📄 二级c机试题.txt
字号:
s++;
}return
n;
}
main()
{
char s [100 ],t [100 ];int m;
printf("\nPlease enter string S:");scanf("%s",s);
printf("\nPlease enter substring t:");scanf("%s",t);
m =fun(s,t);
printf("\nThe result is:m =%d \n",m);
}
解题思路:
第一处:语句后缺少分号。
第二处:判断r 的当前字符是否是字符串结束符,所以应改为:if(*r==0)。
**********************************************************************
函数fun 的功能是:将s 所指字符串中ASCII 值为偶数的字符删除,串中剩余字
符形成一个新串放在t 所指的数组中。
例如,若s 所指字符串中的内容为:"ABCDEFG12345",其中字符B 的ASCII 码值
为偶数、…、字符2 的ASCII 码值为偶数、… 都应当删除,其它依此类推。最后t 所
指的数组中的内容应是:"ACEG135"。
注意:部分源程序存在文件PROG1.C 中。
请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入
你编写的若干语句。
给定源程序:
#include <stdio.h>
#include <string.h>
void fun(char *s,char t [])
{}
main()
{
char s [100 ],t [100 ];
printf("\nPlease enter string S:");scanf("%s",s);
fun(s,t);
printf("\nThe result is:%s \n",t);
NONO();
}
NONO ()
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
char s [100 ],t [100 ] ;
FILE *rf,*wf ;
int i ;
rf =fopen("c:\\test \\in.dat","r");
wf =fopen("c:\\test \\out.dat","w");
for(i =0 ;i <10 ;i++){
fscanf(rf,"%s",s);
fun(s,t);
fprintf(wf,"%s \n",t);
}
fclose(rf);
fclose(wf);
}
解题思路:
本题是从一个字符串按要求生成另一个新的字符串。我们使用for 循环语句来解决这
个问题。
参考答案:
#include <stdio.h>
#include <string.h>
void fun(char *s,char t [])
{
int i,j =0 ;
for(i =0 ;i <strlen(s);i++)if(s [i ] %2)t [j++] =s [i ] ;
t [j ] =0 ;
}
main()
{
char s [100 ],t [100 ];
printf("\nPlease enter string S:");scanf("%s",s);
fun(s,t);
printf("\nThe result is:%s \n",t);
NONO();
}
NONO ()
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
char s [100 ],t [100 ] ;
FILE *rf,*wf ;
int i ;
rf =fopen("c:\\test \\in.dat","r");
wf =fopen("c:\\test \\out.dat","w");
for(i =0 ;i <10 ;i++){
fscanf(rf,"%s",s);
fun(s,t);
fprintf(wf,"%s \n",t);
}
fclose(rf);
fclose(wf);
}
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
第03 套:
给定程序中,函数fun 的功能是:在形参ss 所指字符串数组中查找与形参t 所
指字符串相同的串,找到后返回该串在字符串数组中的位置(下标值),未找到
则返回-1 。ss 所指字符串数组中共有N 个内容不同的字符串,且串长小于M 。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C 中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#include <string.h>
#define N 5
#define M 8
int fun(char (*ss)[M ],char *t)
{int i;
/**********found**********/
for(i=0;i<__1__;i++)
/**********found**********/
if(strcmp(ss [i ],t)==0 )return __2__;
return -1;
}
main()
{char ch [N ][M ]={"if","while","switch","int","for"},t [M ];
int n,i;
printf("\nThe original string \n \n");
for(i=0;i<N;i++)puts(ch [i ]);printf("\n");
printf("\nEnter a string for search:");gets(t);
n=fun(ch,t);
/**********found**********/
if(n==__3__)printf("\nDon't found!\n");
else printf("\nThe position is %d .\n",n);
}
解题思路:
本题是考察在字符串查找指定的子串。
,
第一处:利用for 循环,从几个字符串中进行查找,程序中已经给定了N 个字符串,
所以应填:N 。
第二处:在字符串已经找到,则返回字符串数组中的位置(下标值),所以应填:i 。
第三处:如果没有发现,则显示没有找到信息,所以应填:-1 。
**********************************************************************
给定程序MODI1.C 中函数fun 的功能是:从整数1 到55 之间,选出能被3 整除、
且有一位上的数是5 的那些数,并把这些数放在b 所指的数组中,这些数的个数作为
函数值返回。规定,函数中a1 放个位数,a2 放十位数。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
给定源程序:
#include <stdio.h>
fun(int *b )
{int k,a1,a2,i=0;
for(k=10;k<=55;k++){
/************found************/
a2=k/1O;
a1=k-a2*10;
if((k%3==0 &&a2==5)||(k%3==0 &&a1==5))
{b [i ]=k;i++;}
}
/************found************/
return k;
}
main()
{int a [100 ],k,m;
m=fun(a );
printf("The result is :\n");
for(k=0;k<m;k++)printf("%4d",a [k ]);printf("\n");
}
解题思路:
第一处:取当前变量k 的十位数字上的数,所以应改为:a2=k/10;。
第二处:要求统计个数并存入变量i 中,最后返回i,所以应改为:return i;。
**********************************************************************
假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字
符串尾部的*号全部删除,前面和中间的*号不删除。
例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内
容应当是:****A*BC*DEF*G 。在编写函数时,不得使用C 语言提供的字符串函数。
注意:部分源程序在文件PROG1.C 文件中。
请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入
你编写的若干语句。
给定源程序:
#include <stdio.h>
void fun(char *a )
{}
main()
{char s [81 ];
printf("Enter a string:\n");gets(s);
fun(s );
printf("The string after deleted:\n");puts(s);
NONO();
}
NONO()
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *in,*out ;
int i ;char s [81 ] ;
in =fopen("c:\\test \\in.dat","r");
out =fopen("c:\\test \\out.dat","w");
for(i =0 ;i <10 ;i++){
fscanf(in,"%s",s);
fun(s);
fprintf(out,"%s \n",s);
}
fclose(in);
fclose(out);
}
解题思路:
本题是考察字符串的移动。
1.使用while 循环语句和字符串指针p 扫描出尾部的*号。
2.定义两个字符串中间变量s 和t,其中s 是存放*号后面的字符串,t 是存放*号字符
串。
3.最后利用字符串拷贝和连接,重新组成字符串a 。
参考答案:
#include <stdio.h>
void fun(char *a )
{
char *p =a ;
while(*p)p++;p--;
while(*p =='*')p--;
p++;
*p =0 ;
}
main()
{char s [81 ];
printf("Enter a string:\n");gets(s);
fun(s );
printf("The string after deleted:\n");puts(s);
NONO();
}
NONO()
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *in,*out ;
int i ;char s [81 ] ;
in =fopen("c:\\test \\in.dat","r");
out =fopen("c:\\test \\out.dat","w");
for(i =0 ;i <10 ;i++){
fscanf(in,"%s",s);
fun(s);
fprintf(out,"%s \n",s);
}
fclose(in);
fclose(out);
}
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
第04 套:
程序通过定义学生结构体变量,存储了学生的学号、姓名和3 门课的成绩。所
有学生数据均以二进制方式输出到文件中。函数fun 的功能是重写形参filename 所
指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其它学
生的数据不变。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C 中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#define N 5
typedef struct student {
long sno;
char name [10 ];
float score [3 ];
}STU;
void fun(char *filename,STU n)
{FILE *fp;
/**********found**********/
fp =fopen(__1__,"rb+");
/**********found**********/
fseek(__2__,-1L*sizeof(STU),SEEK_END);
/**********found**********/
fwrite(&n,sizeof(STU),1,__3__);
fclose(fp);
}
main()
{STU t [N ]={{10001,"MaChao",91,92,77},{10002,"CaoKai",75,60,88},
{10003,"LiSi",85,70,78},{10004,"FangFang",90,82,87},
{10005,"ZhangSan",95,80,88}};
STU n={10006,"ZhaoSi",55,70,68},ss [N ];
int i,j;FILE *fp;
fp =fopen("student.dat","wb");
fwrite(t,sizeof(STU),N,fp);
fclose(fp);
fp =fopen("student.dat","rb");
fread(ss,sizeof(STU),N,fp);
fclose(fp);
printf("\nThe original data :\n \n");
for (j=0;j<N;j++)
{printf("\nNo:%ld Name:%-8s Scores:",ss [j ].sno,ss [j ].name);
for (i=0;i<3;i++)printf("%6.2f ",ss [j ].score [i ]);
printf("\n");
}
fun("student.dat",n);
printf("\nThe data after modifing :\n \n");
fp =fopen("student.dat","rb");
fread(ss,sizeof(STU),N,fp);
fclose(fp);
for (j=0;j<N;j++)
{printf("\nNo:%ld Name:%-8s Scores:",ss [j ].sno,ss [j ].name);
for (i=0;i<3;i++)printf("%6.2f ",ss [j ].score [i ]);
printf("\n");
}
}
解题思路:
本题是考察如何从文件中读出数据,再把结构中的数据写入文件中。
第一处:从指定的文件中读出数据,所以应填:filename 。
第二处:读取文件fp 的最后一条记录,所以应填:fp 。
第三处:再把读出的记录,写入文件fp 指定的位置上,所以应填:fp 。
**********************************************************************
给定程序MODI1.C 中的函数Creatlink 的功能是创建带头结点的单向链表,并
为各结点数据域赋0 到m-1 的值。
请改正函数Creatlink 中指定部位的错误,使它能得出正确的结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#include <stdlib.h>
typedef struct aa
{int data;
struct aa *next;
}NODE;
NODE *Creatlink(int n,int m)
{NODE *h=NULL,*p,*s;
int i;
/**********found***********/
p=(NODE )malloc(sizeof(NODE));
h=p;
p->next=NULL;
for(i=1;i<=n;i++)
{s=(NODE *)malloc(sizeof(NODE));
s->data=rand()%m;s->next=p->next;
p->next=s;p=p->next;
}
/**********found***********/
return p;
}
outlink(NODE *h)
{NODE *p;
p=h->next;
printf("\n \nTHE LIST :\n \n HEAD ");
while(p)
{printf("->%d ",p->data);
p=p->next;
}
printf("\n");
}
main()
{NODE *head;
head=Creatlink(8,22);
outlink(head);
}
解题思路:
第一处:指向刚分配的结构指针,所以应改为:p=(NODE *)malloc(sizeof(NODE));
第二处:在动态分配内存的下一行语句是,使用临时结构指针变量h 保存p 指针的初
始位置,最后返回不能使用p,是因为p 的位置已经发生了变化,所以应改为返回h 。
**********************************************************************
请编写函数fun,函数的功能是:统计一行字符串中单词的个数,作为函数值返
回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干
个空格隔开,一行的开始没有空格。
注意:部分源程序在文件PROG1.C 中。
请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入
你编写的若干语句。
给定源程序:
#include <stdio.h>
#include <string.h>
#define N 80
int fun(char *s)
{}
main()
{char line [N ];int num=0;
printf("Enter a string :\n");gets(line);
num=fun(line );
printf("The number of word is :%d \n \n",num);
NONO();
}
NONO()
{/*请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *rf,*wf ;int i,num ;char line [N ],*p ;
rf =fopen("c:\\test \\in.dat","r");
wf =fopen("c:\\test \\out.dat","w");
for(i =0 ;i <10 ;i++){
fgets(line,N,rf);
p =strchr(line,'\n');
if(p !=NULL)*p =0 ;
num =fun(line);
fprintf(wf,"%d \n",num);
}
fclose(rf);fclose(wf);
}
解题思路:
本题是统计字符串中的单词数。
1.利用while 循环语句和指针变量,当字符为空格时,则单词数k 加1 。
2.循环结束返回k 。
参考答案:
#include <stdio.h>
#include <string.h>
#define N 80
int fun(char *s)
{
int k =1 ;
while(*s){
if(*s =='')k++;
s++;
}
return k ;
}
main()
{char line [N ];int num=0;
printf("Enter a string :\n");gets(line);
num=fun(line );
printf("The number of word is :%d \n \n",num);
NONO();
}
NONO()
{/*请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *rf,*wf ;int i,num ;char line [N ],*p ;
rf =fopen("c:\\test \\in.dat","r");
wf =fopen("c:\\test \\out.dat","w");
for(i =0 ;i <10 ;i++){
fgets(line,N,rf);
p =strchr(line,'\n');
if(p !=NULL)*p =0 ;
num =fun(line);
fprintf(wf,"%d \n",num);
}
fclose(rf);fclose(wf);
}
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
第05 套:
程序通过定义学生结构体变量,存储了学生的学号、姓名和3 门课的成绩。所
有学生数据均以二进制方式输出到文件中。函数fun 的功能是从形参filename 所指
的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的
学生数据输出到filename 所指的文件中,覆盖原来的文件内容。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -