1、20172017 年全国计算机等级考试年全国计算机等级考试 C C 语言上机考试题库语言上机考试题库学生练习用第学生练习用第 8686 套至第套至第 9090 套内涵套内涵 5 5 套新题套新题第八十六套第八十六套1 1、程序填空、程序填空函数 fun 的功能是:统计所有小于等于 n(n2)的素数的个数,素数的个数作为函数值返回。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件 BLANK1.C 中。不得增行或删行,也不得更改程序的结构!-#include#include int fun(int n)int fun(int n)int i,j,cou
2、nt=0;int i,j,count=0;printf(nThe prime number between 3 to%dn,n);printf(nThe prime number between 3 to%dn,n);for(i=3;i=n;i+)for(i=3;i=n;i+)/*found*/*found*/for(_1_;ji;j+)for(_1_;j=i)if(_3_=i)count+;printf(count%15?%5d:n%5d,i);count+;printf(count%15?%5d:n%5d,i);return count;return count;main()main()i
3、nt n=20,r;int n=20,r;r=fun(n);r=fun(n);printf(nThe number of prime is :%dn,r);printf(nThe number of prime is :%dn,r);-【参考答案】(1)j=2(2)i(3)j【解题思路】填空 1:j 的初始化要从 2 开始,因为要判断一个数是否为素数即将其除以从 2开始的数字,看有没有被整除的。填空2:如果碰到有个数字j可以被i整除,那么表示这个数不是素数,要用break直接结束循环,这个时候的 j 肯定小于 i。填空 3:j=i,表示在上面 if(i%j=0)没有成功,所以会循环执行 for
4、(j=2;j=i,这样可以知道该数字 i 就是素数。2 2、程序修改、程序修改数列中,第一项为 3,后一项都比前一项的值增 5。下列给定程序中,函数 fun的功能是:计算前 n(4n50)项的累计和。在累加过程中把那些被 4 除后余 2的当前累加值放入数组中,符合此条件的累加值的个数作为函数值返回。例如,当 n 的值为 20 时,该数列为 3、8、13、18、23、28、93、98,符合此条件的累加值应为 42、126、366、570、1010。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件 MODI1.C 中,不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
5、-#include#include#define N 20#define N 20int fun(int n,int *a)int fun(int n,int *a)/*found*/*found*/int i,j,k,sum;int i,j,k,sum;sum=0;sum=0;for(k=3,i=0;in;i+,k+=5)for(k=3,i=0;in;i+,k+=5)sum=sum+k;sum=sum+k;/*found*/*found*/if(sum%4=2)if(sum%4=2)aj+=sum;aj+=sum;return j;return j;main()main()int aN,d,
6、n,i;int aN,d,n,i;printf(nEnter n(4=n=50):);scanf(%d,&n);printf(nEnter n(4=n=50):);scanf(%d,&n);d=fun(n,a);d=fun(n,a);printf(nnThe result:n);printf(nnThe result:n);for(i=0;id;i+)printf(%6d,ai);printf(nn);for(i=0;id;i+)printf(%6d,ai);printf(nn);-【参考答案】(1)inti,j=0,k,sum;(2)if(sum%4=2)【解题思路】(1)变量 j 用于控制
7、数组下标,使用前应初始化为 0。(2)这里混淆了=与=的区别,=是比较运算符,=是赋值运算符。3 3、程序设计、程序设计请编写函数 fun,其功能是:计算并输出下列多项式的值,S(1-1/2)(1/3-1/4)(1/(2n-1)-1/2n)。例如,若主函数从键盘给 n 输入 8 后,则输出为 S0.662872。注意:要求 n 的值大于 1 但不大于 100。部分源程序在文件 PROG1.C 中。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。-#include#include double fun(int n)double fun(int
8、n)main()main()int n;double s;int n;double s;void NONO();void NONO();printf(nInput n:);scanf(%d,&n);printf(nInput n:);scanf(%d,&n);s=fun(n);s=fun(n);printf(ns=%fn,s);printf(ns=%fn,s);NONO();NONO();void NONO()void NONO()/*/*请在此函数内打开文件,输入测试数据,调用请在此函数内打开文件,输入测试数据,调用 fun fun 函数,输出数据,关闭文件。函数,输出数据,关闭文件。FIL
9、E*rf,*wf;int n,i;double s;FILE*rf,*wf;int n,i;double s;rf=fopen(in.dat,r);rf=fopen(in.dat,r);wf=fopen(out.dat,w);wf=fopen(out.dat,w);for(i=0;i 10;i+)for(i=0;i 10;i+)fscanf(rf,%d,&n);fscanf(rf,%d,&n);s=fun(n);s=fun(n);fprintf(wf,%lfn,s);fprintf(wf,%lfn,s);fclose(rf);fclose(wf);fclose(rf);fclose(wf);-
10、【参考答案】doublefun(intn)inti;doubles=0.0;*/*/for(i=1;i=n;i+)s=s+(1.0/(2*i-1)-1.0/(2*i);/*计算 S=(1-1/2)+(1/3-1/4)+(1/(2n-1)-1/2n)*/returns;【解题思路】对于求多项式值的题目,一般都使用循环语句来累加计算多项式的通项。本题中多项式的通项为 1/(2n-1)-1/2n,循环变量的取值范围为 1n。注意,存放累加和的变量 s 要定义为实型,累加时要进行类型转换。第八十七套第八十七套1 1、程序填空、程序填空函数 fun 的功能是:统计长整数n 的各位上出现数字 1、2、3
11、的次数,并用外部(全局)变量 c1、c2、c3 返回主函数。例如,当 n123114350 时,结果应该为:c13c21c32。注意:部分源程序在文件 BLANK1.C 中。请勿改动 main 函数和其他函数中的任何内容,仅在函数 fun 的横线上填入所编写的若干表达式或语句。-#include#include int c1,c2,c3;int c1,c2,c3;void fun(long n)void fun(long n)c1=c2=c3=0;c1=c2=c3=0;while(n)while(n)switch(_1_)switch(_1_)case 1:case 1:c1+;_2_;c1+
12、;_2_;case 2:case 2:c2+;_3_;c2+;_3_;case 3:case 3:c3+;c3+;n/=10;n/=10;main()main()long n=123114350L;long n=123114350L;fun(n);fun(n);printf(nThe result:n);printf(nThe result:n);printf(n=%ld c1=%d c2=%d c3=%dn,n,c1,c2,c3);printf(n=%ld c1=%d c2=%d c3=%dn,n,c1,c2,c3);-【参考答案】(1)n%10(2)break(3)break【解题思路】填
13、空 1:要统计长整数 n 的各个位上出现数字 1、2、3 的次数,就需要判断各个位上的数是多少。通过 n 除以 10 求余,可得到个位上的数,所以填入 n%10。填空 2 和填空 3:switch 语句是多分支选择语句,在每个分支中要加入 break,不然会依次执行后面的分支。continue 语句的作用是结束当前分支的运行,而break 语句的作用是结束整个 switch 语句的运行。2 2、程序修改、程序修改下列给定程序中,函数 fun 实现的功能是:统计一个无符号整数中各位数字值为0 的个数,通过形参传回主函数,并把该整数中各位上最大的数字值作为函数值返回。例如,若输入无符号整数 308
14、00,则数字值为 0 的位的个数为 3,各位上数字值最大的是 8。请改正函数 fun 中的错误,使它能得出正确的结果。注意:部分源程序在文件 MODI1.C 中,不要改动 main 函数,不得增行或删行,也不得更改程序的结构。-#include#include int fun(unsigned n,int*zero)int fun(unsigned n,int*zero)int count=0,max=0,t;int count=0,max=0,t;do do t=n%10;t=n%10;/*found*/*found*/if(t=0)if(t=0)count+;count+;if(maxt)
15、if(maxt)max=t;max=t;n=n/10;n=n/10;while(n);while(n);/*found*/*found*/zero=count;zero=count;return max;return max;main()main()unsigned n;unsigned n;int zero,max;int zero,max;printf(nInput n(unsigned):);printf(nInput n(unsigned):);scanf(%d,&n);scanf(%d,&n);max=fun(n,&zero);max=fun(n,&zero);printf(nThe
16、 result:max=%dn zero=%dn,max,zero);printf(nThe result:max=%dn zero=%dn,max,zero);-【参考答案】(1)if(t=0)(2)*zero=count;【解题思路】(1)根据题意,此处应该是条件语句,而不是赋值语句,并且在条件表达式中不会出现号。(2)此处是指针赋值的一个简单错误,对指针指向的元素进行赋值应使用*号。3 3、程序设计、程序设计请编写函数 fun,其功能是:计算并输出下列多项式的值。例如,在主函数中从键盘为 n 输入 50 后,输出为 S=1.718282。注意:要求 n 的值在大于 1 但不大于 100
17、之间。部分源程序在文件 PROG1.C 中。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。-#include#include double fun(int n)double fun(int n)main()main()int n;double s;int n;double s;void NONO();void NONO();printf(nInput n:);scanf(%d,&n);printf(nInput n:);scanf(%d,&n);s=fun(n);s=fun(n);printf(nns=%fnn,s);printf(nns=
18、%fnn,s);NONO();NONO();void NONO()void NONO()/*/*请在此函数内打开文件,输入测试数据,调用请在此函数内打开文件,输入测试数据,调用 fun fun 函数,输出数据,关闭文件。函数,输出数据,关闭文件。*/*/FILE*rf,*wf;int n,i;double s;FILE*rf,*wf;int n,i;double s;rf=fopen(in.dat,r);rf=fopen(in.dat,r);wf=fopen(out.dat,w);wf=fopen(out.dat,w);for(i=0;i 10;i+)for(i=0;i 10;i+)fscan
19、f(rf,%d,&n);fscanf(rf,%d,&n);s=fun(n);s=fun(n);fprintf(wf,%lfn,s);fprintf(wf,%lfn,s);fclose(rf);fclose(wf);fclose(rf);fclose(wf);-【参考答案】doublefun(intn)doublesum=0,tmp=1;inti;for(i=1;i=n;i+)tmp=tmp*i;sum+=1.0/tmp;returnsum;【解题思路】本题要求计算并输出多项式的值,通式为:1/(1*2*n),在给出的参考程序中,由于函数的返回值为双精度型,所以定义 sum、tmp 为双精度型,
20、再对符合条件的n,使用中间变量tmp求出1到n的累乘值,即题目中每个多项式中分子的值,再通过 sum+=1.0/tmp;计算出所有多项式之和,最终返回值。第八十八套第八十八套1 1、程序填空、程序填空下列给定程序中,函数 fun 的功能是:把形参 s 所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于 2)。例如,形参 s 所指字符串为abcdefgh,执行结果为ahcbedgf。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序在文件 BLANK1.C 中。不得增
21、行或删行,也不得更改程序的结构!-#include#include void fun(char *s)void fun(char *s)int i,n,k;char c;int i,n,k;char c;n=0;n=0;for(i=0;si!=0;i+)n+;for(i=0;si!=0;i+)n+;/*found*/*found*/if(n%2=0)k=n-_1_;if(n%2=0)k=n-_1_;else k=n-2;else k=n-2;/*found*/*found*/c=_2_;c=_2_;for(i=k-2;i=1;i=i-2)si+2=si;for(i=k-2;i=1;i=i-2)
22、si+2=si;/*found*/*found*/s1=_3_;s1=_3_;main()main()char s80=abcdefgh;char s80=abcdefgh;printf(nThe original string is:%sn,s);printf(nThe original string is:%sn,s);fun(s);fun(s);printf(nThe result is:%sn,s);printf(nThe result is:%sn,s);-【参考答案】(1)1(2)sk或*(s+k)(3)c【考点分析】本题考查:指针型变量;ifelse 语句;赋值语句。【解题思路】
23、填空 1:函数 fun 中变量 n 统计字符的长度,假如长度为偶数,则 kn1;假如长度为奇数,则 kn2,使得下标为奇数的最后一个元素有效(不是0)。填空 2:了解变量 k 的作用后,则将最右边的奇数位置的数赋值给变量 c。填空 3:将最后一个下标为奇数的元素移到第一个奇数位置。2 2、程序修改、程序修改下列给定程序中 fun 函数的功能是:求表达式s=aaaa-aaa-aa-a(此处 aaaa 表示 n 个 a,a 和 n 的值在 1 至9 之间)例如,a=3,n=6,则以上表达式为:s=333333-33333-3333-333-33-3其值是 296298。a 和 n 是 fun 函数
24、的形参,表达式的值作为函数值传回 main 函数。请改正程序中的错误,使它能计算出正确的结果。注意:部分源程序在文件 MODI1.C 中,不得增行或删行,也不得更改程序的结构!-#include#include long fun(int a,int n)long fun(int a,int n)int j;int j;/*found*/*found*/long s=0,t=1;long s=0,t=1;for(j=0;j n;j+)for(j=0;j n;j+)t=t*10+a;t=t*10+a;s=t;s=t;for(j=1;j n;j+)for(j=1;j n;j+)/*found*/*f
25、ound*/t=t%10;t=t%10;s=s-t;s=s-t;return(s);return(s);main()main()int a,n;int a,n;printf(nPlease enter a and n:);printf(nPlease enter a and n:);scanf(%d%d,&a,&n);scanf(%d%d,&a,&n);printf(The value of function is:%ldn,fun(a,n);printf(The value of function is:%ldn,fun(a,n);-【参考答案】(1)longs=0,t=0;(2)t=t/1
26、0;【考点分析】本题考查:变量赋初值操作;求余运算和除法运算的区别。【解题思路】(1)t 用来存放每次循环后的多位数,第一次循环时,t 应当是个位数,所以 t的初始值应为 0。(2)根据题意,这里不需要求余数,而是要去掉个位数,重新组合一个数,因此应用除法运算。【解题宝典】去掉数值 n 的个位的方法是采用除法运算,如果需要取出个位数才使用求余运算,不要混淆。3 3、程序设计、程序设计编写函数 voidfun(char*tt,intpp),统计在tt 所指的字符串中a到z26 个小写字母各自出现的次数,并依次放在 pp 所指的数组中。例如,当输入字符串 abcdefgabcdeabc 后,程序的
27、输出结果应该是:33322110000000000000000000注意:部分源程序在文件 PROG1.C 中。请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。-#include#include#include#include void fun(char*tt,int pp)void fun(char*tt,int pp)main()main()char aa1000;char aa1000;int bb26,k;int bb26,k;void NONO();void NONO();printf(nPlease enter a char st
28、ring:);scanf(%s,aa);printf(nPlease enter a char string:);scanf(%s,aa);fun(aa,bb);fun(aa,bb);for(k=0;k 26;k+)printf(%d,bbk);for(k=0;k 26;k+)printf(%d,bbk);printf(n);printf(n);NONO();NONO();void NONO()void NONO()/*/*本函数用于打开文件,输入测试数据,调用本函数用于打开文件,输入测试数据,调用 funfun 函数,输出数据,关闭文件。函数,输出数据,关闭文件。*/*/char aa100
29、0;char aa1000;int bb26,k,i;int bb26,k,i;FILE*rf,*wf;FILE*rf,*wf;rf=fopen(in.dat,r);rf=fopen(in.dat,r);wf=fopen(out.dat,w);wf=fopen(out.dat,w);for(i=0;i 10;i+)for(i=0;i 10;i+)fscanf(rf,%s,aa);fscanf(rf,%s,aa);fun(aa,bb);fun(aa,bb);for(k=0;k 26;k+)fprintf(wf,%d,bbk);for(k=0;k 26;k+)fprintf(wf,%d,bbk);
30、fprintf(wf,n);fprintf(wf,n);fclose(rf);fclose(rf);fclose(wf);fclose(wf);-【参考答案】voidfun(char*tt,intpp)inti;for(i=0;i=a&*tt=z)pp*tt-a+;【考点分析】本题考查:for 循环语句,注意循环变量取值范围以及循环体语句作用;数组元素初始化和赋值操作;if 语句条件表达式,需注意条件表达式的逻辑运算;字符串结束标识0。【解题思路】要求统计在 tt 所指字符串中az26 个小写母各自出现的次数,并依次放在pp 所指数组中。首先使用 for 循环语句初始化 pp 数组中分别用来统
31、计 26 个字母的个数,再使用循环判断语句对 tt 所指字符串中的字符进行逐一比较操作,同时存入相对应的 pp 数组中。第八十九套第八十九套1 1、程序填空、程序填空下列给定程序中,函数 fun 的功能是:在形参 ss 所指字符串数组中查找与形参t 所指字符串相同的串,找到后返回该串在字符串数组中的位置(即下标值),若未找到则返回-1。ss 所指字符串数组中共有 N 个内容不同的字符串,且串长小于 M。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序在文件 BLANK1.C 中。不得增行或删行,也不得更改程序的结构!-#include#include#in
32、clude#include#define N 5#define N 5#define M 8#define M 8int fun(char (*ss)M,char *t)int fun(char (*ss)M,char *t)int i;int i;/*found*/*found*/for(i=0;i _1_;i+)for(i=0;i _1_;i+)/*found*/*found*/if(strcmp(ssi,t)=0)return _2_;if(strcmp(ssi,t)=0)return _2_;return-1;return-1;main()main()char chNM=if,whil
33、e,switch,int,for,tM;char chNM=if,while,switch,int,for,tM;int n,i;int n,i;printf(nThe original stringnn);printf(nThe original stringnn);for(i=0;iN;i+)puts(chi);printf(n);for(i=0;iN;i+)puts(chi);printf(n);printf(nEnter a string for search:);gets(t);printf(nEnter a string for search:);gets(t);n=fun(ch,
34、t);n=fun(ch,t);/*found*/*found*/if(n=_3_)printf(nDont found!n);if(n=_3_)printf(nDont found!n);else printf(nThe position is%d.n,n);else printf(nThe position is%d.n,n);-【参考答案】(1)N(2)i(3)-1【考点分析】本题考查:for 循环语句;函数返回值;if 语句条件表达式。【解题思路】填空 1:变量 i 是循环变量,它的取值范围是在 0 到 N 之间。填空 2:如果 ss 所指字符串数组中的字符串和 t 所指字符串相同的话,
35、则返回其下标值,即 returni;否则返回-1,即 return-1;。填空 3:在 main 函数中输出最后结果,判断函数返回值 n,如果 n=-1,说明没有找到,否则输出 n。2 2、程序修改、程序修改下列给定程序中函数 fun 的功能是:从整数 10 到 55 之间,查找能被 3 整除且有一位上的数值是 5 的数,把这些数放在 b 所指的数组中,这些数的个数作为函数值返回。规定函数中 al 放个位数,a2 放十位数。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件 MODI1.C 中,不得增行或删行,也不得更改的程序的结构!-#include#include int f
36、un(int *b)int fun(int *b)int k,a1,a2,i=0;int k,a1,a2,i=0;for(k=10;k=55;k+)for(k=10;k=55;k+)/*found*/*found*/a2=k/1O;a2=k/1O;a1=k-a2*10;a1=k-a2*10;if(k%3=0&a2=5)|(k%3=0&a1=5)if(k%3=0&a2=5)|(k%3=0&a1=5)bi=k;i+;bi=k;i+;/*found*/*found*/return k;return k;main()main()int a100,k,m;int a100,k,m;m=fun(a);m=
37、fun(a);printf(The result is:n);printf(The result is:n);for(k=0;km;k+)printf(%4d,ak);printf(n);for(k=0;km;k+)printf(%4d,ak);printf(n);-【参考答案】(1)a2=k/10;(2)returni;【考点分析】本题考查:取数值 n 的各个位;return 语句,将需要返回的函数值返回给函数 main。【解题思路】(1)a2 存放十位数,所以是 a2=k/10,此处是一个书写错误。(2)根据题意,要返回能被 3 整除的数的个数,从循环体中可以知道其个数是由i 来计算的,所
38、以返回的是 i。3 3、程序设计、程序设计规定输入的字符串中只包含字母和*号。请编写函数 fun,其功能是:将字符串尾部的*号全部删除,前面和中间的*号不动。例如,字符串中的内容为:*A*BC*DEF*G*,删除后,字符串中的内容应当是:*A*BC*DEF*G。在编写函数时,不得使用 C 语言提供的字符串函数。注意:部分源程序在文件 PROG1.C 中。请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。-#include#include void fun(char*a)void fun(char*a)main()main()char s81;v
39、oid NONO();char s81;void NONO();printf(Enter a string:n);gets(s);printf(Enter a string:n);gets(s);fun(s);fun(s);printf(The string after deleted:n);puts(s);printf(The string after deleted:n);puts(s);NONO();NONO();void NONO()void NONO()/*/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/
40、*/FILE*in,*out;FILE*in,*out;int i;char s81;int i;char s81;in=fopen(in.dat,r);in=fopen(in.dat,r);out=fopen(out.dat,w);out=fopen(out.dat,w);for(i=0;i 10;i+)for(i=0;i 10;i+)fscanf(in,%s,s);fscanf(in,%s,s);fun(s);fun(s);fprintf(out,%sn,s);fprintf(out,%sn,s);fclose(in);fclose(in);fclose(out);fclose(out);
41、-【参考答案】voidfun(char*a)while(*a!=0)a+;a-;/*指针 a 指向字符串的尾部*/while(*a=*)a-;/*指针 a 指向最后一个字母*/*(a+1)=0;/*在字符串最后加上结束标志符*/【考点分析】本题考查:删除字符串尾部*号;删除的主要思想是把不删除的字符保留起来。【解题思路】对于一个字符串要删除其尾部的*号,只需要在最后一个不是*号的字符后面加上结束符号0。具体操作为:首先找到字符串的结尾,然后从最后一个字符开始往前逐个判断是否为*号,直到找到非*号字符为止,最后在该字符后面加上结束符号0。第九十套第九十套1 1、程序填空、程序填空下列给定程序中已
42、建立了一个带头结点的单向链表,在 main 函数中将多次调用fun 函数,每调用一次,输出链表尾部结点中的数据,并释放该结点,使链表缩短。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序在文件 BLANK1.C 中。不得增行或删行,也不得更改程序的结构!-#include#include#include#include#define N 8#define N 8typedef struct listtypedef struct list int data;int data;struct list *next;struct list *next;SLIST;
43、SLIST;void fun(SLIST *p)void fun(SLIST *p)SLIST *t,*s;SLIST *t,*s;t=p-next;s=p;t=p-next;s=p;while(t-next!=NULL)while(t-next!=NULL)s=t;s=t;/*found*/*found*/t=t-_1_;t=t-_1_;/*found*/*found*/printf(%d,_2_);printf(%d,_2_);s-next=NULL;s-next=NULL;/*found*/*found*/free(_3_);free(_3_);SLIST*creatlist(int *
44、a)SLIST*creatlist(int *a)SLIST *h,*p,*q;int i;SLIST *h,*p,*q;int i;h=p=(SLIST*)malloc(sizeof(SLIST);h=p=(SLIST*)malloc(sizeof(SLIST);for(i=0;iN;i+)for(i=0;idata=ai;p-next=q;p=q;q-data=ai;p-next=q;p=q;p-next=0;p-next=0;return h;return h;void outlist(SLIST *h)void outlist(SLIST *h)SLIST *p;SLIST *p;p=
45、h-next;p=h-next;if(p=NULL)printf(nThe list is NULL!n);if(p=NULL)printf(nThe list is NULL!n);else else printf(nHead);printf(nHead);do printf(-%d,p-data);p=p-next;while(p!=NULL);do printf(-%d,p-data);p=p-next;while(p!=NULL);printf(-Endn);printf(-Endn);main()main()SLIST *head;SLIST *head;int aN=11,12,1
46、5,18,19,22,25,29;int aN=11,12,15,18,19,22,25,29;head=creatlist(a);head=creatlist(a);printf(nOutput from head:n);outlist(head);printf(nOutput from head:n);outlist(head);printf(nOutput from tail:n);printf(nOutput from tail:n);while(head-next!=NULL)while(head-next!=NULL)fun(head);fun(head);printf(nn);p
47、rintf(nn);printf(nOutput from head again:n);outlist(head);printf(nOutput from head again:n);outlist(head);-【参考答案】(1)next(2)t-data(3)t【考点分析】本题考查:链表数据结构,结点的表示方法,掌握链表数据结构的基本思想;释放内存空间函数 free()。【解题思路】填空 1:因为是链表操作,所以要使 t 逐一往后移动,语句为 ttnext。填空 2:输出链表结点的数据域,即 tdata。填空 3:使用free 函数将 t 所指向的内存空间释放。释放内存空间函数free 调
48、用形式:free(void*p);。功能:释放 p 所指向的一块内存空间,p 是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由 malloc 或calloc 函数所分配的区域。2 2、程序修改、程序修改下列给定程序中函数 fun 的功能是:将字符串中的字符逆序输出,但不改变字符串中的内容。例如,若字符串为abcd,则应输出:dcba。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件 MODI1.C 中,不得增行或删行,也不得更改程序的结构!-#include#include/*found*/*found*/void fun(char a)void fun(ch
49、ar a)if(*a)if(*a)fun(a+1);fun(a+1);/*found*/*found*/printf(%c*a);printf(%c*a);main()main()char s10=abcd;char s10=abcd;printf(printf(处理前字符串处理前字符串=%sn=%sn 处理后字符串处理后字符串=,s);=,s);fun(s);printf(n);fun(s);printf(n);-【参考答案】(1)voidfun(char*a)(2)printf(%c,*a);【考点分析】本题考查:函数定义,本题为有参函数定义。printf()函数,其一般形式为“print
50、f(格式控制字符串,输出表列);”。%d表示按十进制整型输出;%ld表示按十进制长整型输出;%c表示按字符型输出等。非格式字符串在输出时原样输出,起提示作用。【解题思路】(1)定义函数时形参的类型要与调用函数中实参的类型一致,主函数中 fun 传递的是字符串 s 的首地址,所以此处形参应为指针类型。(2)根据 printf 函数格式,很容易找到错误之处。3 3、程序设计、程序设计编写函数 fun,其功能是:比较字符串的长度,(不得使用 C 语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符长度相同,则返回第一个字符串。例如,输入 beijingshanghai(为回车键),函数将