1、国家二级( C语言)机试模拟试卷 345及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include typedef struct int num; char name10; PERSON; /*found*/ void fun(PERSON 【 1】 ) /*found*/ 【 2】 temp; if(std0.numstd1
2、.num) temp=std0; std0=std1; std1=temp; if(std0.numstd2.num) temp=std0; std0=std2; std2=temp; if(std1.numstd2.num) temp=std1; std1=std2; std2=temp; main() PERSON std= 5,“Zhanghu“,2,“WangLi“,6,“LinMin“ ; int i; /*found*/ fun(【 3】 ); printf(“nThe result is :n“); for(i=0; i #include #define N 80 void in
3、sert(char *aa) int i,j,n; char ch; /*found*/ n=strlem(aa); for(i=1; i=0) void NONO (); printf(“nPlease enter a string:“); gets(a); printf(“nPlease enter a char:“); ch = getchar(); printf(“nThe number of the char is: %dn“, fun(a, ch); NONO (); void NONO () /* 本函数用于打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。*/ in
4、t i ; FILE *rf, *wf ; char aM, bM, ch ; rf = fopen(“in.dat“,“r“); wf = fopen(“out.dat“,“w“); for(i = 0 ; i std1.num)”可知形参名为 std,故第一空处应为 “void fun(PERSON *std)”。 第二空: temp变量用来进行交换时临时保存变量值,由 “temp=std0;”可知 temp是 PERSON结构体变量,故第二空处的 temp结构体定义应为 “PERSON temp;”。 第三空:这里是调用 fun函数, fun函数的参数是结构体变量指针, std是结构体数
5、组,数组名相当于数组的首地址,故第三空处应为 “fun(std);”。 二、程序修改题( 30分) 2 【正确答案】 n=strlen( aa ); ch=aai; 【试题解析】 ( 1) strlen是求字符串长度的函数,函数调用的形式是: strlen(字符串地址 ),故第一标识下应改成 “n=strlen( aa );”。 ( 2)程序调试时会提示 “c=aai;”中的 c未定义, insert函数中定义的是变量 ch作为存放 aa字符串中字符的临时变量,然后对其与其他字符进行比较。所以将“c=aai;”改为 “ch=aai;”。 三、程序设计题( 40分) 3 【正确答案】 int cnt=0; char *p=ss; while(*p) if(*p=c)cnt+; p+; return cnt; 【试题解析】 如果不是串尾就进入 while循环,在循环过程中利用 if条件表达式判断当前字符是否为指定的字符,如果符合条件,那么对统计计数变量进行加 1操作。