1、国家二级 C语言机试(C 语言程序设计)模拟试卷 24及答案解析(总分:70.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.以下能正确定义且赋初值的语句是(分数:2.00)A.int n1=n2=10:B.char c=32;C.float f=f+11;D.double x=123E25;2.设有定义:int n1=0,n2,*p=n2,*q=n1;,以下赋值语句中与 n2=n1;语句等价的是(分数:2.00)A.*p=*q;B.p=q;C.*p=n1;D.p=*q;3.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。#includestdioh#d
2、efine N 10void fun(int xN) int i=0; while(iN)scanf(“d“,_);在程序中下划线处应填入的是(分数:2.00)A.x+iB.xi+1C.x+(i+)D.x+i4.fun函数的功能是:通过键盘输入给 x所指的整型数组所有元素赋值。在下划线处应填写的是#includestdioh#define N 5Void fun(int xN) int m; for(m=N1;m=0;m-)scanf(“d“,_);(分数:2.00)A.x+mB.xm+1C.x+(m+)D.x+m5.以下选项中,合法的是(分数:2.00)A.char name10;name=
3、“char“;B.char strl5=“pass“,str26;str2=str1;C.char str3=d,e,b,u,g,0;D.char str4;str4=“hello world“;6.以下叙述中正确的是(分数:2.00)A.赋值语句是一种执行语句,必须放在函数的可执行部分B.scanf和 printf是 C语言提供的输入和输出语句C.由 printf输出的数据都隐含左对齐D.由 printf输出的数据的实际精度是由格式控制中的域宽和小数的域宽来完全决定的7.有以下程序 main()int a=3; a+=a=a*a: printf(“dn“,a);程序的输出结果是(分数:2.0
4、0)A.9B.3C.12D.08.设有定义语句 int x6=2,4,6,8,5,7,*p=x,i;要求依次输出 x数组 6个元素中的值不能完成此操作的语句是(分数:2.00)A.for(i=0;i6;i+)printf(“2d“,*(p+);B.for(i=0;i6;i+)printf(“2d“,*(p+i);C.for(i=0;i6;i+)printf(“2d“,*p+);D.for(i=0;i6;i+)pfintf(“2d“,(*p)+);9.有以下程序段 int k=0,a=1,b=2,c=3;k=ab?b:a;k=kc?c:k;执行程序段后,k 的值是(分数:2.00)A.3B.2C
5、.1D.010.执行以下程序段后,w 的值为 int w=A,x=14,y=15;w=(xy)&(wa);(分数:2.00)A.B.NULLC.1D.011.若有定义语句:char s10=“123456700“;,则 strlen(s)的值是(分数:2.00)A.7B.8C.9D.1012.程序段:int x=12;double y=3141593;printf(“d86f“,x,y);的输出结果是(分数:2.00)A.123141593B.12 3141593C.12,3141593D.123141593013.有如下程序段:int x=12;double y=3141593;printf
6、(“d86f“,x,y);其输出结果是(分数:2.00)A.12 3141593B.123141593C.1231415930D.12314159314.若有以下程序#includestdiohmain()int b=10,a=11;a=b=4:printf(“ddn“,a,b);则程序的输出结果是(分数:2.00)A.1 2B.12C.12D.1215.有以下程序 main()int a=2,c=5; printf(“a=d,b=dn“,a,c);程序的输出结果是(分数:2.00)A.a=2,b=5B.a=d,b=dC.a=2,b=5D.a=d,b=d16.有以下程序 main()char
7、a,b,c,d; scanf(“cc“,a,&b); c=getchar();d=getchar(); printf(“ccccn“,a,b,c,d);当执行程序时,按下列方式输入数据(从第 1列开始,代表回车,注意:回车也是一个字符) 12 34 则输出结果是(分数:2.00)A.12B.1234C.12 3D.12 3417.有以下程序段 int n,t=1,s=0;scanf(“d“,&n);dos=s+;t=t2; while(t!=n);为使此程序段不陷入死循环,从键盘输入的数据应该是(分数:2.00)A.任意正奇数B.任意负偶数C.任意正偶数D.任意负奇数18.若变量已正确定义为
8、int型,要通过语句 scanf(“d,d,d“,&a,&b,&c);给 a赋值 1、给 b赋值 2、给 c赋值 3,以下输入形式中错误的是(注:口代表一个空格符)(分数:2.00)A.口口口 1,2,3B.1,口口口 2,口口口 3C.1,2,3D.1口 2口 319.设变量均己正确定义,若要通过 scanf(”dcdc“,&a1,&c1,&a2,&c2);语句为变量 a1和a2赋数值 10和 20,为变量 c1和 c2赋字符 X和 Y。以下所示的输入形式中正确的是(注:口代表空格字符)(分数:2.00)A.10口 X20口 YB.10口 X20口 YC.10X20YD.10口 X口 20口
9、 Y20.设有定义:int a;float b;执行 scanf(“2df“,&a,&b);语句时,若从键盘输入 876 5430则 a和 b的值分别是(分数:2.00)A.876和 5430B.87和 60C.87和 5430D.76和 543021.若有定义: int a,b;通过语句 scanf(“d;d“,&a,&b);能把整数 3赋给变量 a,5 赋给变量b的输入数据是(分数:2.00)A.3,5B.3 5C.3;5D.3522.若有定义 int a;float b;double c;程序运行时输入:3 4 5 能把值 3输入给变量 a、4 输入给变量b、5 输入给变量 c的语句是(
10、分数:2.00)A.scanf(“dlflf“,&a,&b,&c);B.scanf(“dflf“,&a,&b,&c);C.scanf(“dff“,&a,&b,&c);D.scanf(“lflflf“,&a,&b,&c);23.设有定义:double a,b,c;若要求通过输入分别给 a、b、c 输入 1、2、3,输入形式如下(注:此处口代表一个空格)口口 10 口口 20 口口 30 则能进行正确输入的语句是(分数:2.00)A.scanf(“lflflf“,a,b,c);B.scanf(“fff“,&a,&b,&c);C.scanf(“lflflf“,&a,&b,&c);D.scanf(“5
11、1lf51lf51lf“,&a,&b,&c);24.以下叙述中正确的是(分数:2.00)A.当用 scanf从键盘输入数据时,每行数据在没按下回车键(Enter 键)前,可以任意修改B.花括号对只能用来表示函数的开头和结尾,不能用于其他目的C.空语句就是指程序中的空行D.复合语句在语法上包含多条语句,其中不能定义局部变量25.以下叙述中正确的是(分数:2.00)A.在 scanf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上B.在使用 scanf函数输入整数或实数时,输入数据之间只能用空格来分隔C.在 printf函数中,各个输出项只能是变量D.使用 printf函数无法输出百分号
12、26.以下叙述中正确的是(分数:2.00)A.在 scanf函数的格式串中,必须有与输入项一一对应的格式转换说明符B.只能在 printf函数中指定输入数据的宽度,而不能在 scanf函数中指定输入数据占的宽度C.scanf函数中的字符串,是提示程序员的,输入数据时不必管它D.复合语句也被称为语句块,它至少要包含两条语句27.有以下程序#includemain()int a1,a2; char c1,c2; scanf(“dcdc“,&a1,&c1,&a2,c2); printf(“d,c,d,c“,a1,c1,a2,c2);若想通过键盘输入,使得 a1的值为 12,a2 的值为 34,c1
13、的值为字符 a,c2 的值为字符 b,程序输出结果是:12,a,34,b 则正确的输入格式是(以下口代表空格,代表回车)(分数:2.00)A.12口 a口 34口 bB.12,a,34bC.12a34bD.12口 a34口 b28.有以下程序#includestdio hmain()char c1,c2,c3,c4,c5,c6; scanf(“cccc“,&c1,&c2,&c3,&c4); c5=getchar(); c6=getchar(); putchar(c1); putchar(c2); printf(“ccn“,c5,c6);程序运行后,若从键盘输入(从第 1列开始)123 4567
14、8则输出结果是(分数:2.00)A.1256B.1278C.1245D.126729.若有定义语句:double x,y,*px,*py;执行 px=&x;py=&y;正确的输入语句是(分数:2.00)A.scanf(“ff“&x,&y);B.scanf(“ff“,x,y);C.scanf(“lfle“,px,py);D.scanf(“lflf“,x,y);30.以下程序段完全正确的是(分数:2.00)A.int k,*p=&k;scanf(“d“,p);B.int*p;scanf(“d“,p);C.int*p;scanf(“d“,&p);D.int k,*p;*p=&k;scanf(“d“,
15、p);31.若在定义语句: int a,b,c,*p=&c;接着执行以下选项中的语句,则能正确执行的语句是(分数:2.00)A.scanf(“ddd“,a,b,c);B.scanf(“d“,a,b,c);C.scanf(“d“,p);D.scanf(“d“,&p);32.有以下程序段 intj;float y;char name50;scanf(“2dfs“,&j,&y,name);当执行上述程序段,从键盘上输入 55566 7777abc后,y 的值为(分数:2.00)A.555660B.77770C.5660D.566777033.有以下程序段 char name20;int num;sc
16、anf(“name=s num=d“,name,&num);当执行上述程序段,并从键盘输入:name=Lili num=1001 后,name 的值为(分数:2.00)A.name=LiliB.Lili num=C.name=Lili num=1001D.Lili34.s1和 s2已正确定义并分别指向两个字符串。若要求:当 s1所指串大于 s2所指串时,执行语句 S;则以下选项中正确的是(分数:2.00)A.if(s1s2)S;B.if(strcmp(s1,s2)S;C.if(strcmp(s2,s1)0)S;D.if(strcp(s1,s2)0)S;35.把以下四个表达式用作 if语句的控制
17、表达式时,有一个选项与其他三个选项含义不同,这个选项是(分数:2.00)A.k2B.k2=1C.(k2)!=0D.!k2=1国家二级 C语言机试(C 语言程序设计)模拟试卷 24答案解析(总分:70.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.以下能正确定义且赋初值的语句是(分数:2.00)A.int n1=n2=10:B.char c=32; C.float f=f+11;D.double x=123E25;解析:解析:本题主要考查变量的定义和赋值,C 语言中变量的定义形式为:类型说明符变量名=初始值;选项 A)中,n1 和 n2只能单独赋初值:选项 B)正确
18、,定义了一个字符变量 c,初值为 32;选项 C错误,初值设置自身不能参与运算;选项 D)中字母 E后面的指数必须是整数。2.设有定义:int n1=0,n2,*p=n2,*q=n1;,以下赋值语句中与 n2=n1;语句等价的是(分数:2.00)A.*p=*q; B.p=q;C.*p=n1;D.p=*q;解析:解析:本题考查指针的使用。指针 p和 q分别指向变量 n2和 n1,n2=n1 可以用指针来代替,即*p代替 n2,*q 代替 n1。3.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。#includestdioh#define N 10void fun(int xN) in
19、t i=0; while(iN)scanf(“d“,_);在程序中下划线处应填入的是(分数:2.00)A.x+iB.xi+1C.x+(i+) D.x+i解析:解析:本题考查数组和 scanf函数的使用。程序通过 while循环来给数组元素赋值,赋值语句通过调用 scanf函数来实现。scanf 函数从键盘接收数据,第二个参数是数据保存的地址,因此选项 B)和选项D)不是地址,错误。选项 A)和选项 C)是地址,但是选项 A)的 i值不会发生变化循环体内每次都是给同。个元素赋值,不满足要求,选项 C)正确。4.fun函数的功能是:通过键盘输入给 x所指的整型数组所有元素赋值。在下划线处应填写的是
20、#includestdioh#define N 5Void fun(int xN) int m; for(m=N1;m=0;m-)scanf(“d“,_);(分数:2.00)A.x+m B.xm+1C.x+(m+)D.x+m解析:解析:本题考查数组和 scanf函数的使用。程序通过 for循环来给数组元素赋值,赋值语句通过调用 scanf函数来实现。scanf 函数从键盘接收数据函数的第二个参数是数据保存的地址,因此选项 B)和选项 D)不是地址,错误。选项 A)和选项 C)是地址,但是选项 C)的 m值会+自增,然后 for循环里面又m-自减,会导致死循环,不满足要求,选项 A)正确。5.以
21、下选项中,合法的是(分数:2.00)A.char name10;name=“char“;B.char strl5=“pass“,str26;str2=str1;C.char str3=d,e,b,u,g,0; D.char str4;str4=“hello world“;解析:解析:本题考查字符数组。选项 A)定义了一个字符数组 name,接下来直接给 name赋值字符串是错误的;选项 B)定义了两个字符串数组 str1和 str2,str1 和 str2表示两个字符串的首地址,直接把 str1赋值给 str2错误:选项 C)是正确的;选项 D)定义了一个字符变量 str4,给字符变量赋值字符
22、串是错误的。6.以下叙述中正确的是(分数:2.00)A.赋值语句是一种执行语句,必须放在函数的可执行部分 B.scanf和 printf是 C语言提供的输入和输出语句C.由 printf输出的数据都隐含左对齐D.由 printf输出的数据的实际精度是由格式控制中的域宽和小数的域宽来完全决定的解析:解析:C 语言本身没有提供输入输出语句,但是可以通过调用标准库函数中提供的输入和输出函数来实现输入和输出,选项 B)错误;采用 printf输出数据,输出数据都默认为右对齐,若要左对齐,可以在格式控制中的“”和宽度之间加一个“-”号来实现,选项 C)错误;printf 的输出精度由变量的类型决定,与域
23、宽无关,选项 D)错误。7.有以下程序 main()int a=3; a+=a=a*a: printf(“dn“,a);程序的输出结果是(分数:2.00)A.9B.3C.12 D.0解析:解析:对于表达式 a+=a=a*a 相当于 a=a(a*a),然后计算 a=a+a,a 的初值为 3,则表达式的值为12。8.设有定义语句 int x6=2,4,6,8,5,7,*p=x,i;要求依次输出 x数组 6个元素中的值不能完成此操作的语句是(分数:2.00)A.for(i=0;i6;i+)printf(“2d“,*(p+);B.for(i=0;i6;i+)printf(“2d“,*(p+i);C.f
24、or(i=0;i6;i+)printf(“2d“,*p+);D.for(i=0;i6;i+)pfintf(“2d“,(*p)+); 解析:解析:指针 p指向数组 x,因此可以使用 p来输出数组 x的值。选项 A)中,*(p+)表示先取出 p指向的元素的值,然后 p+指向下一个元素,满足要求;选项 B)中*(p+i)每次 i的值发牛变化,(p+i)指向x数组的 xi元素,因此*(p+i)是取出数组 x的 xi元素的值,满足要求;选项 C)和选项(A)相比,少了括号,由于*运算符的优先级比+要求,因此,因此*p+表示先取出 p指向的元素的值,然后 p再+指向下一个元素,满足要求;选项 D)中(*p
25、)+表示先取出 p指向的元素的值,然后该值+,p 没有增加,每次循环都*p 取出的 x0的值,不满足要求。9.有以下程序段 int k=0,a=1,b=2,c=3;k=ab?b:a;k=kc?c:k;执行程序段后,k 的值是(分数:2.00)A.3B.2 C.1D.0解析:解析:本题主要考查条件表达式。k=ab?b:a 中 ab 为真,因此 k的值为 b,即k=2。k=kc?c:k 中 kc 为假,k 的值为 2。10.执行以下程序段后,w 的值为 int w=A,x=14,y=15;w=(xy)&(wa);(分数:2.00)A.B.NULLC.1 D.0解析:解析:本题考查表达式和逻辑运算。
26、x 和 y分别为 14和 15,因此(xy)的值是真。w 的值为A,其 ASCII值为 65a的 ASCIl值为 97,因此(wa)的值为真。表达式 w=(xy)&(wa)的前后两个值均为真,整个表达式的值为真(1)。11.若有定义语句:char s10=“123456700“;,则 strlen(s)的值是(分数:2.00)A.7 B.8C.9D.10解析:解析:本题考察字符串数组和字符串函数。数组 s有 7个数字,然后跟着结束符“0”,因此数组 s的长度为 7。12.程序段:int x=12;double y=3141593;printf(“d86f“,x,y);的输出结果是(分数:2.0
27、0)A.123141593 B.12 3141593C.12,3141593D.1231415930解析:解析:本题考查格式化输出函数 printf。在 printf函数调用里面首先输入整型变量 x的值 12,然后按照“86f”格式输出 double类型变量 y的值,“86f”表示输出 8位,小数点后输出 6位。13.有如下程序段:int x=12;double y=3141593;printf(“d86f“,x,y);其输出结果是(分数:2.00)A.12 3141593B.123141593C.1231415930D.123141593 解析:解析:本题考查 printf语句。printf
28、()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为:printf(“格式化字符串“,参量表)。 其中,“格式化字符串”包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以“”开始,后跟一个或几个规定字符,用来确定输出内容格式。格式化字符串的格式是:标志输出最小宽度精度长度 格式字符 标志:标志字符为、+、空格等,其意义如下所示:-:结果左对齐,右边填空格;+:输出符号(正号或负号);空格:输出值为正时冠以空格,为负时冠以负号。 输出最小宽度:用十进制整数来表示输出的最少位数(包括小数
29、点在内至少要输出这么多位)。若实际位数多于定义的宽度,则按实际位数输出;若实际位数少于定义的宽度,则右对齐,左边留空;有负号,左对齐,右边留空;表示宽度的数字以 0开始,则右对齐,左边留空。 精度:精度格式符以“.”开头,后跟十进制整数。它的意义是:如果输出数字,则表示小数的位数,若实际位数人于所定义的精度数,则四舍五入,若不是则补 0;如果输出的是字符,则表示输出字符的个数,若实际位数大于所定义的精度数,则截去超过的部分; 长度:长度格式符为 h和 1两种,h 表示按短整型量输出,1 表示按长整型量输出。14.若有以下程序#includestdiohmain()int b=10,a=11;a
30、=b=4:printf(“ddn“,a,b);则程序的输出结果是(分数:2.00)A.1 2B.12C.12 D.12解析:解析:对于表达式 a=b=4 为复合的赋值运算,结合性自右至左,相当于先计算b=b4,a=ab;结果的符号和第一个操作数的符号相同,因此 b为 2,a 的结果为1。15.有以下程序 main()int a=2,c=5; printf(“a=d,b=dn“,a,c);程序的输出结果是(分数:2.00)A.a=2,b=5B.a=d,b=d C.a=2,b=5D.a=d,b=d解析:解析:输出“”,可以在格式控制中用“”表示,将输出一个“”,而没有表示格式符的开始,d 不能表示
31、格式符,因此仅输出:a=d,b=d。16.有以下程序 main()char a,b,c,d; scanf(“cc“,a,&b); c=getchar();d=getchar(); printf(“ccccn“,a,b,c,d);当执行程序时,按下列方式输入数据(从第 1列开始,代表回车,注意:回车也是一个字符) 12 34 则输出结果是(分数:2.00)A.12B.1234C.12 3 D.12 34解析:解析:scanf 和 getchax函数分别从键盘上读入一个字符,因此输入 12空格 34,则变量 a中存放的为 1,b 中存放 2,c 中存放空格,d 中存放 3。17.有以下程序段 in
32、t n,t=1,s=0;scanf(“d“,&n);dos=s+;t=t2; while(t!=n);为使此程序段不陷入死循环,从键盘输入的数据应该是(分数:2.00)A.任意正奇数B.任意负偶数C.任意正偶数D.任意负奇数 解析:解析:本题考查基本输入和循环。程序代码的功能是通过 scanf给变量 n赋值,在 dowhile循环中,s 变量自增,t 变量每次减 2,t 的初值为 1,循环执行执行一次后 t的值变成1,然后是3、5,直到 t的值和 n的值相同循环结束。从 t的值的变化可知,t 是一个变化的负奇数,因此输入的 n如果是负奇数,则循环能退出,否则是死循环。18.若变量已正确定义为
33、int型,要通过语句 scanf(“d,d,d“,&a,&b,&c);给 a赋值 1、给 b赋值 2、给 c赋值 3,以下输入形式中错误的是(注:口代表一个空格符)(分数:2.00)A.口口口 1,2,3B.1,口口口 2,口口口 3C.1,2,3D.1口 2口 3 解析:解析:本题主要考查 scanf函数的输入格式问题 oscanf函数的一般形式为:scanf(q 格式控制字符串,地址 1,地址 2,);格式控制字符串是由双撇号括起来的字符串,它主要由两种类型的字符组成:格式说明符由“”和格式字符组成,如c,d,s,f 等。其作用是将输入的数据转换为指定的格式,赋给 scanf的二个参量(是
34、地址 1)所指定的内存单元(可能一次使用多个)中。格式说明以“”字符为标志:普通字符,是需要用户在输入时原样输入的字符。在本题中格式控制字符串为“d,d,d”,表示按十进制输入三个数据。要求在输入数据时,两个数据间一定以一个逗号“,”作为间隔符。19.设变量均己正确定义,若要通过 scanf(”dcdc“,&a1,&c1,&a2,&c2);语句为变量 a1和a2赋数值 10和 20,为变量 c1和 c2赋字符 X和 Y。以下所示的输入形式中正确的是(注:口代表空格字符)(分数:2.00)A.10口 X20口 YB.10口 X20口 YC.10X20Y D.10口 X口 20口 Y解析:解析:在
35、使用 scanf函数进行输入数据时,输入的数据之间必须用空格、回车符、制表符(Tab 键)等间隔符隔开,但是空格为合法的字符型数据的输入。而按照格式符“dcdc“说明,数值型数据和字符数据输入之间不要加入空格间隔,而字符型数据和数值型数据的输入却可以加入任意的空格,回车和跳格。20.设有定义:int a;float b;执行 scanf(“2df“,&a,&b);语句时,若从键盘输入 876 5430则 a和 b的值分别是(分数:2.00)A.876和 5430B.87和 60 C.87和 5430D.76和 5430解析:解析:在输入函数 scanf的输入格式符2df 中,2d 表示输入的数
36、据的宽度为 2,所以当从键盘输入 8765430CR时,这时把输入数字串的前两位 87赋给变量 a,然后将紧接着将 6按照格式控制符f的形式赋给变量 b,所以 b的值为 6000000。21.若有定义: int a,b;通过语句 scanf(“d;d“,&a,&b);能把整数 3赋给变量 a,5 赋给变量b的输入数据是(分数:2.00)A.3,5B.3 5C.3;5 D.35解析:解析:在采用 scanf这个函数输入数据时,要严格遵守其输入的规则定义。本题此函数定义的规则是,在两个整数之间加分号输入。22.若有定义 int a;float b;double c;程序运行时输入:3 4 5 能把
37、值 3输入给变量 a、4 输入给变量b、5 输入给变量 c的语句是(分数:2.00)A.scanf(“dlflf“,&a,&b,&c);B.scanf(“dflf“,&a,&b,&c); C.scanf(“dff“,&a,&b,&c);D.scanf(“lflflf“,&a,&b,&c);解析:解析:scanf 函数进行输入的时候,默认的输入间隔为空格、跳格和回车,变量 a、b 和 c均为数值型数据,输入时间隔为空格,因此 scanf函数的第一个表示格式的参数之间不用加入分隔符,而要输入double型数据,格式控制必须用lf(或le)。否则,数据不能正确输入。23.设有定义:double a,
38、b,c;若要求通过输入分别给 a、b、c 输入 1、2、3,输入形式如下(注:此处口代表一个空格)口口 10 口口 20 口口 30 则能进行正确输入的语句是(分数:2.00)A.scanf(“lflflf“,a,b,c);B.scanf(“fff“,&a,&b,&c);C.scanf(“lflflf“,&a,&b,&c); D.scanf(“51lf51lf51lf“,&a,&b,&c);解析:解析:输入格式 scanf(格式控制,输入项 1,输入项 2,),其中在 scanf函数的格式字符前可以加入一个正整数指定输入数据所占的宽度,但不可以用实数指定小数位的宽度。输入 double型数据,
39、格式控制必须用lf(或le)。否则,数据不能正确输入。由于输入是一个字符流,scanf 函数从这个字符流中按照格式控制指定的格式解析出相应数据,送到指定地址的变量中。24.以下叙述中正确的是(分数:2.00)A.当用 scanf从键盘输入数据时,每行数据在没按下回车键(Enter 键)前,可以任意修改 B.花括号对只能用来表示函数的开头和结尾,不能用于其他目的C.空语句就是指程序中的空行D.复合语句在语法上包含多条语句,其中不能定义局部变量解析:解析:当使用 scanf函数从键盘输入数据时,每行数据在未按下回车键之前,可以任意修改。但按下回车键后,scanf 函数即接受了这一行数据,不能再修改
40、。选项 A)正确,对于选项 B),还可以表明复合语句的开头结尾,或者循环体的开头结尾等,选项 B)错误,而空语句为“;”,不是空行,选项 C)错误,在复合语句中可以定义变量为局部变量,选项 D)错误。25.以下叙述中正确的是(分数:2.00)A.在 scanf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上 B.在使用 scanf函数输入整数或实数时,输入数据之间只能用空格来分隔C.在 printf函数中,各个输出项只能是变量D.使用 printf函数无法输出百分号解析:解析:scanf 函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,因此若想在屏幕
41、上输出提示信息,应该首先使用 printf函数输出,选项 A)正确;在使用 scanf函数输入整数或实数时,输入数据之间可以用空格、跳格、回车来分隔,选项 B)错误;printf 输出项不但可以为变量,还可以表达式或者常量,选项 C)错误;如果要输出“”,可以在格式控制中用“”表示,将输出一个“”,选项 D)错误。26.以下叙述中正确的是(分数:2.00)A.在 scanf函数的格式串中,必须有与输入项一一对应的格式转换说明符 B.只能在 printf函数中指定输入数据的宽度,而不能在 scanf函数中指定输入数据占的宽度C.scanf函数中的字符串,是提示程序员的,输入数据时不必管它D.复合
42、语句也被称为语句块,它至少要包含两条语句解析:解析:输入函数的调用格式: scanf(格式控制,输入项 1,输入项 2,) 格式控制的主要作用是指定输入时的数据转换格式,格式串中,必须含有与输入项一一对应的格式转换说明符选项 A)正确,在scanf函数的格式字符前可以加入一个正整数指定输入数据所占的宽度,但不可以用实数指定小数位的宽度,选项 B)错误,scanf 函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,因此若想在屏幕上输出提示信息,应该首先使用 printf函数输出,选项 C)错误,复合语句还可以是空语句呢,并没有规定语句条数,选项 D)错误。27.有
43、以下程序#includemain()int a1,a2; char c1,c2; scanf(“dcdc“,&a1,&c1,&a2,c2); printf(“d,c,d,c“,a1,c1,a2,c2);若想通过键盘输入,使得 a1的值为 12,a2 的值为 34,c1 的值为字符 a,c2 的值为字符 b,程序输出结果是:12,a,34,b 则正确的输入格式是(以下口代表空格,代表回车)(分数:2.00)A.12口 a口 34口 bB.12,a,34bC.12a34b D.12口 a34口 b解析:解析:本题考查 scanf语句。scanf()函数是格式化输入函数,它从标准输入设备(键盘)读取
44、输入的信息。 其调用格式为:scanf(“格式化字符串“,地址表) 格式化字符串包括以下 3类不同的字符。 格式化说明符:格式化说明符与前面用的 printf()函数中的格式说明符基本相同。 空白字符:空白字符会使 scanfi()函数在读操作中略去输入中的一个或多个空白字符。 非空白字符:一个非空白字符会使 scanf()函数在读入时剔除掉与这个非空白字符相同的字符。 由于在 scanf函数中,几个变量之间没有任何间隔,所以输入的时候,也同样不应该有间隔。28.有以下程序#includestdio hmain()char c1,c2,c3,c4,c5,c6; scanf(“cccc“,&c1
45、,&c2,&c3,&c4); c5=getchar(); c6=getchar(); putchar(c1); putchar(c2); printf(“ccn“,c5,c6);程序运行后,若从键盘输入(从第 1列开始)123 45678则输出结果是(分数:2.00)A.1256B.1278C.1245 D.1267解析:解析:当用 scanf函数从键盘输入数据时,每行数据的未尾按下回车键(Enter 键)之前,可以任意修改。但按下回车键 putchar(c1)(Enter键)之后,scanf 函数即接受了这一行数据,不能再同去修改。所以本题中,当输入 123CR时,变量 c1、c2、c3 的
46、值分别为 1、2、3,当输入 45678CR时,变量c5、c6 的值 4和 5。所以用输出函数 putchar(c1)输出 1,putchar(c2)输出2,print(“ccn“,c5,c6)输出 45。29.若有定义语句:double x,y,*px,*py;执行 px=&x;py=&y;正确的输入语句是(分数:2.00)A.scanf(“ff“&x,&y);B.scanf(“ff“,x,y);C.scanf(“lfle“,px,py); D.scanf(“lflf“,x,y);解析:解析:本题考查 scanf语句。scanf()函数的一般格式为:scanf(“格式字符串“,输入项首地址表
47、),对于 double类型数据,输入时候要加上 1修饰,否则会产生错误的输入信息,同时输入项必须是地址,可以使保存变量地址的指针变量。30.以下程序段完全正确的是(分数:2.00)A.int k,*p=&k;scanf(“d“,p); B.int*p;scanf(“d“,p);C.int*p;scanf(“d“,&p);D.int k,*p;*p=&k;scanf(“d“,p);解析:解析:选项 B)没有对指针进行初始化,无效指针。选项 C)错在没有对指针进行初始化,无效指针,并且在 scanf(“d“,&p)中无需再进行取地址操作。选项 D),语句“*p=&k;”的左端*p 是指针所指内存空间的值,k 是地址,应为“p=k”。31.若在定义语句: int a,b,c,*p=&c;接着执行以下选项中的语句,则能正确执行的语句是(分数:2.00)A.scanf(“ddd“,a,b,c);B.scanf(“d“,a,b,c);C.scanf(“d“,p); D.scanf(“d“,&p);解析:解析:程序语句 int ab,c,*