1、二级 C 语言机试-264 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun 的功能是进行数字字符转换。若形参 ch 中是数字字符09,则将0转换成9,1转换成8,2转换成7,9转换成0;若是其他字符则保持不变,并将转换后的结果作为函数值返回。请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includestdio.h/*found*/(1) fun(char ch)/*found*/if(ch=0return ch;m
2、ain()(char c1,c2;printf(“/nThe result:/n“)“c1=2;c2=fun(c1);printf(“c1=%c c2=%c/n“,c1,c2);c1=8;c2=fun(c1);printf(“c1=%c c2=%c/n“,c1,c2);c1=a;c2=fun(c1);printf(“c1=%c c2=%c/n“,c1,c2);(分数:30.00)_二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:将 P 所指字符串中的所有字符复制到 b 中,要求每复制 3 个字符之后插入一个空格。例如,若给 a 输入字符串:“ABCDE
3、FGHIJK”,调用函数后,字符数组 b 中的内容为:“ABC DEFGHI JK”。请改正程序中的错误,使它能得出正确结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!试题程序:#includestdio.hvoid fun(char*p,char*b)(int i,k=0;while(*p)i=1;while(i=3k+;p+;1+;if(*p)/*found*/bk+=“;bk=/0;)main()(char a80,b80;printf(“Enter a string:“);gets(a);printf(“The original string:“);puts
4、(a);fun(a,b);printf(“/nThe string after insert space:“);puts(b);printf(“/n“);(分数:30.00)_三、程序设计题(总题数:1,分数:40.00)3.N 名学生的成绩已在主函数中放人一个带头结点的链表结构中,h 指向链表的头结点。请编写函数fun,其功能是:求出平均分,并由函数值返回。例如,若学生的成绩是:85,76,69,85,9l,72,64,87,则平均分应当是:78625。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若千语句。试题程序:#i
5、ncludestdlib.h#includestdio.h#define N 8struct slistdouble s;struct slist*next;typedef struct slist STREC;double fun(STREC*h)STREC*creat(double*s) /*创建链表*/STREC*h,*p,*q;int i=0;h=P=(STREC*)mallocsizeof(STREC);P-s=0;whilel(iN)q=(STREC*)mallodsizeof(STREC);q-s=si;i+lp-next=q;P=q;p-next=0;return h;oucl
6、ist(STREC*h)STREC*p;P=h-next;printf(“head“);doprintf(“-%4.1f“,p-s);P=P-next;/*输出各成绩*/while(p!=NULL);printf(“/n/n“);void main()double sN=85,76,69,85,91,72,64,87,ave;STREC*h;h=creat(s);outlist(h);ave=fun(h);printf(“ave=%6.3f/n“,ave);(分数:40.00)_二级 C 语言机试-264 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:3
7、0.00)1.下列给定程序中,函数 fun 的功能是进行数字字符转换。若形参 ch 中是数字字符09,则将0转换成9,1转换成8,2转换成7,9转换成0;若是其他字符则保持不变,并将转换后的结果作为函数值返回。请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includestdio.h/*found*/(1) fun(char ch)/*found*/if(ch=0return ch;main()(char c1,c2;printf(“/nThe result:/n“)“c1=2;c2=fun(c1);
8、printf(“c1=%c c2=%c/n“,c1,c2);c1=8;c2=fun(c1);printf(“c1=%c c2=%c/n“,c1,c2);c1=a;c2=fun(c1);printf(“c1=%c c2=%c/n“,c1,c2);(分数:30.00)_正确答案:(char (2)ch=9 (3)0)解析:解析 本题关键字有:函数定义;if 语句条件表达式;函数返回值。函数定义一般形式为:类型标识符函数名(形式参数列表),形参可以是各种类型的变量,各参数之间用逗号隔开,形参列表中要给出形参类型。微分析填空 1:函数的类型由类型标识符表示,与函数返回值的类型相同,所以应该填入 cha
9、r。填空 2:if 语句用来判断字符是否为数字字符。填空 3:return 语句返回转换后的字符,完成字符转换应填入 return9-(ch-0)。二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:将 P 所指字符串中的所有字符复制到 b 中,要求每复制 3 个字符之后插入一个空格。例如,若给 a 输入字符串:“ABCDEFGHIJK”,调用函数后,字符数组 b 中的内容为:“ABC DEFGHI JK”。请改正程序中的错误,使它能得出正确结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!试题程序:#includestdio.h
10、void fun(char*p,char*b)(int i,k=0;while(*p)i=1;while(i=3k+;p+;1+;if(*p)/*found*/bk+=“;bk=/0;)main()(char a80,b80;printf(“Enter a string:“);gets(a);printf(“The original string:“);puts(a);fun(a,b);printf(“/nThe string after insert space:“);puts(b);printf(“/n“);(分数:30.00)_正确答案:(bk=*p;(2)bk+=;)解析:解析 本题关
11、键字有:指针类型变量;字符与字符串的区别。函数的参数可以是整型、实型、字符型等数据类型,也可以是指针类型。它将一个变量的地址传送到另一个函数中。指针变量前加星号表示指针所指向的变量。微分析(1)p 是指针型变量,所以赋值语句为 bk=*p。(2)复制三个字符后加一个空格,字符用单引号,所以改为 bk+;。三、程序设计题(总题数:1,分数:40.00)3.N 名学生的成绩已在主函数中放人一个带头结点的链表结构中,h 指向链表的头结点。请编写函数fun,其功能是:求出平均分,并由函数值返回。例如,若学生的成绩是:85,76,69,85,9l,72,64,87,则平均分应当是:78625。注意:部分
12、源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若千语句。试题程序:#includestdlib.h#includestdio.h#define N 8struct slistdouble s;struct slist*next;typedef struct slist STREC;double fun(STREC*h)STREC*creat(double*s) /*创建链表*/STREC*h,*p,*q;int i=0;h=P=(STREC*)mallocsizeof(STREC);P-s=0;whilel(iN)q=(STREC*)
13、mallodsizeof(STREC);q-s=si;i+lp-next=q;P=q;p-next=0;return h;ouclist(STREC*h)STREC*p;P=h-next;printf(“head“);doprintf(“-%4.1f“,p-s);P=P-next;/*输出各成绩*/while(p!=NULL);printf(“/n/n“);void main()double sN=85,76,69,85,91,72,64,87,ave;STREC*h;h=creat(s);outlist(h);ave=fun(h);printf(“ave=%6.3f/n“,ave);(分数:40.00)_正确答案:(double fun(STREC*h)double av=0.0;STREC*p=h-next; /*p 指向头结点的下一个结点,即第一个成绩*/while(p!=NULL) av=av+p-s; /*求总分数*/p=p-next;return av/N; /*返回平均值*/)解析:解析 本题关键字有:链表的操作;结构体类型。链表的主要操作包括:建立链表、结点的查找与输出、插入一个结点、删除一个结点。微分析定义一个指向结点的指针 p 对链表进行遍历,头结点中没有数值,从其下一结点开始遍历,求出学生的成绩总和,并返回平均值。