1、二级 C语言笔试-320 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.能正确表示逻辑关系“a10 或 a0“的 C语言表达式是_。(分数:2.00)A.a=10 or a=0B.a=0|a=10C.a=10return(sqrt(6*s);(分数:2.00)填空项 1:_62.若输入字符串:abcde,则以下 while循环体将执行 【12】 次。while(ch=getchar()=e)printf(“*“);(分数:2.00)填空项 1:_63.以下函数用来求出两整数之和,并通过形参将结果传回,请填空。void func(int x
2、,int y, 【13】 z)*z=x+y; (分数:2.00)填空项 1:_64.若有以下定义,则不移动指针 p,且通过指针 p引用值为 98的数组元素的表达式是 【14】 。int w10=23,54,10,33,47,98,72,80,61, *p=w;(分数:2.00)填空项 1:_65.设在主函数中有以下定义和函数调用语句,且 fun函数为 void类型;请写出 fun函数的首部 【15】 。要求形参名为 b。main()double s1022;int n;fun(s);(分数:2.00)填空项 1:_66.有以下程序:int f(int n)if(n=1)return 1;els
3、e return f(n-1)+1;main()int i,j=0;for(i=1;i3;i+)j+t(i);printf(“%d/n“,j);程序运行后的输出结果是 【16】 。(分数:2.00)填空项 1:_67.以下程序的输出结果是 【17】 。void fun()static int a=0;a+=2; printf(“%d“,A) ;main()int cc;for(cc=1;cc4;cc+)fun();printf(“/n“);(分数:2.00)填空项 1:_68.实现程序可将磁盘中的一个文件复制到另一个文件中,两个文件的文件名在可执行命令的命令行中(相当于 copy命令),假定文
4、件在当前目录下。请补全程序。#includestdio.hvoid main(int argc,char*argv)FILE*f1,*f2;if(argc 【18】 )printf(“parameter error!/n“);exit(0);f1=fopen(argv1,“r“);f2=fopen(argv2,“w“);while( 【19】 )fputc(fgetc(f1),f2);fclose(f1);fclose(f2);(分数:4.00)填空项 1:_69.以下程序的输出结果是 【20】 。#define MAX(x,y) (x)(y)?(x):(y)main()int a=5,b=2
5、,c=3,d=3,t;t=MAX(a+b,c+D) *10;printf(“%d/n“,t);(分数:2.00)填空项 1:_二级 C语言笔试-320 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.能正确表示逻辑关系“a10 或 a0“的 C语言表达式是_。(分数:2.00)A.a=10 or a=0B.a=0|a=10C.a=10p-next=s;s 的确已插到了链表的末尾,但它的next却并没有为 NULL,而是指向了它的直接前趋 p;边样它就不是一个单向链表(单向链表最后一个结点的 next指针一定是一个 NULL)。19.若已定义
6、x和 y为 double类型,则表达式 x=1,y=x+3/2的值是_。(分数:1.00)A.1B.2C.2.0 D.2.5解析:评析 这是一个逗号表达式,它的值应为表达式式 y=3/2的值,而前一个表达式已给 x赋值 1,在没有进行类型转换的情况下,3/2 的值为 1,所以 x+3/2的值应为 2.0。20.设有声明语句 char a=/72;,则变量 a_。(分数:1.00)A.包含 1个字符 B.包含 2个字符C.包含 3个字符D.声明不合法解析:评析 转义字符常量/xx可以把/后面的数字转换为对应的 ASCII字符。21.有如下程序main()char s5=“abc“,“de“,“f
7、gh“;printf(“%c“,s26);其输出为_。(分数:1.00)A.不确定 B.编译错误C.gD.输出 null字符解析:评析 由于 s26表示字符串已超出了数组 s的表示范围,在 C中不会对数组越界进行检查,当数组越界时,会得到一个不确定的值。22.假设在 turboc2.0采用 small模式编译如下程序main()char a4=a,b;char*b=“abc“;printf(“%d,%d“,sizeof((分数:1.00)A.,sizeof( B.);return(sqrt(6*s);(分数:2.00)填空项 1:_ (正确答案:1.0/i/i 或 1.0/(i*i))解析:评
8、析 由题面中提供的计算 pi的公式可知:在第 i项其值为 1/(i*i),考虑到运算结果为浮点数,故必须要将 1转化为浮点数或采用 1.0/(i*i)的形式。故本题应填 1.0/(i*i)或其等效形式。62.若输入字符串:abcde,则以下 while循环体将执行 【12】 次。while(ch=getchar()=e)printf(“*“);(分数:2.00)填空项 1:_ (正确答案:0)解析:评析 函数 getchar()是从键盘得到用户输入的一个字符。用户输入的第 1个字符是 a,不管后面输入的是什么 ch的值都是a,因此条件(ch=getchar()=e为假,这个循环不会被执行。63
9、.以下函数用来求出两整数之和,并通过形参将结果传回,请填空。void func(int x,int y, 【13】 z)*z=x+y; (分数:2.00)填空项 1:_ (正确答案:int*)解析:评析 从题中代码可知:z 应该是一个整型指针,因此应填 int*。64.若有以下定义,则不移动指针 p,且通过指针 p引用值为 98的数组元素的表达式是 【14】 。int w10=23,54,10,33,47,98,72,80,61, *p=w;(分数:2.00)填空项 1:_ (正确答案:p5 或 *(p+5))解析:评析 98 是数组 w的第 5个元素(最开始的为第 0个),而通过*p=w 已经将 p指向了数组 w,要想不移动指针 p而引用 98,可以有以下两种写法:p5、*(p+5)。65.设在主函数中有以下定义和函数调用语句,且 fun函数为 void类型;请写出 fun函数的首部 【15】 。要求形参名为 b。main()double s1022;int n;fun(s);(分数:2.00)