国家二级C语言(C语言程序设计)机试模拟试卷14 (题后含答案及解析)
题型有:1. 选择题
选择题
1. 以下能正确定义且赋初值的语句是
A.int n1=n2=10;
B.char c=32;
C.float f=f+1.1;
D.double x=12.3E2.5;
正确答案:B
解析:本题主要考查变量的定义和赋值,C语言中变量的定义形式为:类型说明符变量名=初始值;选项A)中,n1和n2只能单独赋初值;选项B)正确,定义了一个字符变量c,初值为32;
选项C错误,初值设置自身不能参与运算;选项D)中字母E后面的指数必须是整数。 知识模块:C语言程序设计
2. 设有定义:int n1=0,n2,*p=n2,*q=n1;,以下赋值语句中与n2=n1;语句等价的是
A.*p=*q;
B.p=q;
C.*p=n1;
D.p=*q;
正确答案:A
解析:本题考查指针的使用。指针p和q分别指向变量n2和n1,n2=n1可以用指针来代替,即+p代替n2,*q代替n1。 知识模块:C语言程序设计
3. 以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。#include<stdio-h
>#define N10void fun(int x[N]){int i=0;while(i<N)scanf(%d,_______);}在程序中下划线处应填入的是
A.x+i
B.x[i+1]
C.x+(i++)
D.x[++i]
正确答案:C
解析:本题考查数组和scanf函数的使用。程序通过while循环来给数组元素赋值,赋值语句通过调用scanf函数来实现。scanf函数从键盘接收数据,第二个参数是数据保存的地址,因此选项B)和选项D)不是地址,错误。选项A)和选项C)是地址,但是选项A)的i值不会发生变化,循环体内每次都是给同一个元素赋值,不满足要求,选项C)正确。 知识模块:C语言程序设计
4. fun函数的功能是:通过键盘输入给x所指的整型数组所有元素赋值。在下划线处应填写的是#include<stdio.h>#define N5Void fun(int x[N]){int m;for(m=N-1;m>=0;m--)scanff%d,_______);}
A.x+m
B.x[m+1]
C.x+(m++)
D.x[++m]
正确答案:A
解析:本题考查数组和scanf函数的使用。程序通过for循环来给数组元素赋值,赋值语句通过调用scanf函数来实现。scanf函数从键盘接收数据,函数的第二个参数是数据保存的地址,因此选项B)和选项D)不是地址,错误。选项A)和选项C)是地址,但是选项C)的m值会++自增,然后for循环里面又m--自减,会导致死循环,不满足要求,选项A)正确。 知识模块:C语言程序设计
5. 以下选项中,合法的是
A.char name[10];name=char
B.char str1[5]=pass,str2[6];str2=str1;
C.char str3[]={debug\0};
D.char str4;str4=hello world
正确答案:C
解析:本题考查字符数组。选项A)定义了一个字符数组name,接下来直接给name赋值字符串是错误的;选项B)定义了两个字符串数组str1和str2,str1和str2表示两个字符串的首地址,直接把str1赋值给str2错误;选项C)是正确的;选项D)定义了一个字符变量str4,给字符变量赋值字符串是错误的。 知识模块:C语言程序设计
6. 以下叙述中正确的是
A.赋值语句是一种执行语句,必须放在函数的可执行部分
B.scanf和printf是C语言提供的输入和输出语句
C.由printf输出的数据都隐含左对齐
D.由printf输出的数据的实际精度是由格式控制中的域宽和小数的域宽来完全决定的
正确答案:A
解析:C语言本身没有提供输入输出语句,但是可以通过调用标准库函数中提供的输入和输出函数来实现输入和输出,选项B)错误;采用printf输出数据,输出数据都默认为右对齐,若要左对齐,可以在格式控制中的“%”和宽度之间加一个“-”号来实现,选项C)错误;printf的输出精度由变量的类型决定,与域宽无关,选项D)错误。 知识模块:C语言程序设计
printf输出格式 d
7. 有以下程序main(  ){int a=3;a+=a=a*a;pfintf(%dha,a);}程序的输出结果是
A.9
B.3
C.12
D.0
正确答案:C
解析:对于表达式a+=a=a*a相当于a=a-(a*a),然后计算a=a+a,a的初值为3,则表达式的值为-12。 知识模块:C语言程序设计
8. 设有定义语句int x[6]={2,4,6,8,5,7},*p=x,i;要求依次输出x数组6个元素中的值不能完成此操作的语句是
A.for(i=0;i<6;i++) printf(%2d,*(p++));
B.for(i=0;i<6;i++) printf(%2d,*(p+i));
C.for(i=0;i<6;i++) printf(%2d,*p++);
D.for(i=0;i<6;i++) printf(%2d,(*p)++);
正确答案:D
解析:指针p指向数组x,因此可以使用p来输出数组x的值。选项A)中,*(p++)表示先取出p指向的元素的值,然后p++指向下一个元素,满足要求;选项B)中*(p+i)每次i的值发生变化,(p+i)指向x数组的x[i]元素,因此*(p+i)是取出数组x的x[i]元素的值,满足要求;选项C)和选项A)相比,少了括号,由于*运算符的优先级比++要求,因此,因此*p++表示先取出p指向的元素的值,然后p再++指向下一个元素,满足要求;选项D)中(*p)++表示先取出p指向的元素的值,然后该值++,p没有增加,每次循环都*p取出的x[0]的值,不满足要求。 知识模块:C语言程序设计
9. 有以下程序段int k=0,a=1,b=2,c=3;k=a<b?b:a;k=k>c?c:k:执行程序段后,k的值是
A.3
B.2
C.1
D.0
正确答案:B
解析:本题主要考查条件表达式。k=a<b?b:a中a<b为真,因此k的值为b,即k=2。k=k>c?c:k中k>c为假,k的值为2。 知识模块:C语言程序设计
10. 执行以下程序段后,w的值为int w=A,x=14,y=15;w=((x||y)&(w<a));
A.-1
B.NULL
C.1
D.0
正确答案:C
解析:本题考查表达式和逻辑运算。x和y分别为14和15,因此(x||y)的值是真。w的值为A,其ASCII值为65,a的ASCII值为97,因此(w<a)的值为真。表达式w=((x||y)&(w<a))的前后两个值均为真,整个表达式的值为真(1)。 知识模块:C语言程序设计
11. 若有定义语句:char s[10]=1234567\0\0;,则strlen(s)的值是
A.7
B.8
C.9
D.10
正确答案:A
解析:本题考查字符串数组和字符串函数。数组s有7个数字,然后跟着结束符“\0”,因此数组s的长度为7。 知识模块:C语言程序设计
12. 程序段:int x=12;double y=3.141593;printf(%d%8.6f,x,y);的输出结果是
A.123.141593
B.12 3.141593
C.12,3.141593
D.123.1415930
正确答案:A
解析:本题考查格式化输出函数printf。在printf函数调用里面首先输入整型变量x的值12,然后按照“%8.6”格式输出double类型变量y的值,“%8.6f”表示输出8位,小数点后输出6位。 知识模块:C语言程序设计
13. 有如下程序段:int x=12;double y=3.141593;printf(%d%8.6f,x,y);其输出结果是
A.12 3.141593
B.12,3.141593
C.123.1415930
D.123.141593
正确答案:D
解析:本题考查printf语句。primf(  )函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printf(  )函数的调用格式为:printf(<格式化字符串>,<参量表>)。其中,“格式化字符串”包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以“%”开始,后跟一个或几个规定字符,用来确定输出内容格式。格式化字符串的格式是:%[标志][输出最小宽度][精度][长度]格式字符①标志:标志字符为-、+、空格等,其意义如下所示:-:结果左对齐,右边填空格;+:输出符号(正号或负号);空格:输出值为正时冠以空格,为负时冠以负号。②输出最小宽度:用十进制整数来表示输出的最少位数(包括小数点在内至少要输出这么多位)。若实际位数多于定义的宽度,则按实际位数输出;若实际位数少于定义的宽度,则右对齐,左边留空;有负号,左对齐,右边留空;表示宽度的数字以0开始,则右对齐,左边留空。③精度:精度格式符以“.”开头,后跟十进制整数。它的意义是:如果输出数字,则表示小数的位数,若实际位数大于所定义的精度数,则四舍五入,若不足则补0;如果输出的是字符,则表示输出字符的个数,若实际位数大于所定义的精度数,则截去超过的部分;④长度:长度格式符为h和l两种,b表示按短整型量输出,l表示按长整型量输出。 知识模块:C语言程
序设计