计算机二级C上机练习题汇总(二)
第四套
(1) 填空题
人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构!
#include
int year,month,day ; }STU;
/**********found**********/
___1___ fun(STU *std, char *num)
{ int i; STU a={\ for (i=0; i /**********found**********/ if( strcmp(___2___,num)==0 ) /**********found**********/ return (___3___); return a; } main() { STU std[N]={ {\ {\ {\ STU p; char n[10]=\ p=fun(std,n); if(p.num[0]==0) printf(\ else { printf(\ \ printf(\ %d-%d-%d\\n\ } } 第1 处:STU fun(STU *std, char *num) 第2 处:if( strcmp(std[i].num,num)==0 ) 第3 处:return (std[i]); (2) 改错题 给定程序modi.c中,函数fun的功能是:将s所指字符串的正序和反序进行连接,形成一个新串放在t所指的数组中。 例如,当s所指字符串为:\时,则t所指字符串中的内容应为:\。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! #include /************found************/ void fun(char s,char t) { int i,d; d=strlen(s); for(i=0;i for(i=0;i main() { char s[100],t[100]; system(\ printf(\ fun(s,t); printf(\} 第1 处:void fun(char s,char t) 改为 void fun (char *s, char *t) 第2 处:t[2*d-1]='\\0'; 改为 t[2*d] = '\\0'; (3) 程序设计 请编写一个函数fun,它的功能是:根据以下公式求π的值(要求满足精度0.0005, 即某项小于0.0005时停止迭代): 程序运行后,如果输入精度0.0005,则程序输出为3.140578。 注意:部分源程序存在文件prog.c中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 /******本答案只作参考。******/ #include double fun ( double eps) { int n=0; double down=1,up=1; double one ,pi=0; one = (double)up/(double)down; while(one>=eps) { pi+=one; n++; up=up*n; down=down*(2*n+1); one=(double)up/(double)down; } return pi*2; } main( ) { double x; printf(\ scanf(\} 第五套 (1) 填空题 人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在形参k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构! #include int year,month,day ; }STU; int fun(STU *std, STU *k, int year) { int i,n=0; for (i=0; i /**********found**********/ if( ___1___ ) /**********found**********/ k[___2___]= std[i]; /**********found**********/ return (___3___); } main() { STU std[N]={ {1,1984,2,15},{2,1983,9,21},{3,1984,9,1},{4,1983,7,15}, {5,1985,9,28},{6,1982,11,15},{7,1982,6,22},{8,1984,8,19}}; STU k[N]; int i,n,year; printf(\ \ scanf(\ n=fun(std,k,year); if(n==0) printf(\ else { printf(\ for(i=0; i printf(\ %d-%d-%d\\n\ } } 第1 处:if( std[i].year==year) 第2 处:k[n++]= std[i]; 第3 处:return (n); (2) 改错题 给定程序modi.c中,函数fun的功能是:将从键盘上输入的每个单词的第一个字母写为大写字母,输入时各单词必须用空格隔开,用'.'结束输入。 请改正程序中的错误,使程序能输出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! #include int fun(char *c,int status) { /************found************/ if (*c=='') return 1; else { if(status && *c<='z' && *c>='a') /************found************/ c+='A'-'a'; return 0; } } main() { int flag=1; char ch; printf(\请输入一字符串,用点号结束输入!\\n\ do { ch=getchar(); flag=fun(&ch,flag); putchar(ch); }while(ch!='.'); printf(\} 第1 处:if (*c=='') return 1; 改为 if (*c==' ') return 1; 第2 处:c+='A'-'a'; 改为 *c+='A'-'a'; (3) 程序设计 请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。 例如,输入beijing shanghai↙,函数将返回shanghai。 注意:部分源程序存在文件prog.c中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 /******本答案只作参考。******/ #include char *fun ( char *s, char *t) { int first=0,second=0; char *p,*q; p=s; q=t; while(*p++!='\\0') first++; while(*q++!='\\0') second++; if(first==second) return s; else if (first>second) return s; else return t; } main( ) { char a[20],b[10]; printf(\ gets( a); printf(\ gets( b); printf(\