C语言考试模拟试卷1.若有定义:char c;int d;程序运行时输入:c=1,d=2<回车>,能把字符1输入给变量c、整数2输入给变量d的输入语句是A、scanf("c=%d d=%d",&c,&d);B、scanf("c=%c d=%d",&c,&d);C、scanf("c=%d,d=%d",&c,&d);D、scanf("c=%c,d=%d",&c,&d);【答案】D【解析】scanf()函数中,%d对应的参数是整数型地址,%c对应参数为char 型地址,C,A选项错误;如果输入地址有多个,应该用逗号隔开,B选项错误,故答案为D选项。
2.以下叙述错误的是A、在进行模块化程序设计的时候,应首先完成每个模块的编写调试,再集中考虑主程序中的算法B、同一程序各模块可由一组人员同时进行编写调试,可提高编写程序的效率C、模块化的程序设计是采用自顶向下、逐步细化的原则D、程序的每个模块都可通过三种基本结构实现【答案】A【解析】结构化程序设计把一个复杂问题的求解过程分阶段进行,需要保证自顶向下、逐步细化、模块化设计、结构化编码。
进行模块化设计时,首先设计框架,并定义和调试好各个模块之间的输入输出关系,然后完成各个模块的编写调试后再集中编译,模块化的程序设计采用自顶向下、逐步细化的原则,A选项叙述错误,C选项叙述正确。
各个模块可以由不同人员同时进行编写调试,提高编写程序的效率,B选项叙述正确。
结构化程序主要由3种基本控制结构组成,顺序结构、选择结构、循环结构,这三种基本结构可以解决任何复杂的问题,D选项叙述正确。
故选择A选项。
3.设有定义:int a=0,b=1,c=1;以下选项中,表达式值与其它三个不同的是A、b=a==cB、a=b=cC、a=c==bD、c=a!=c【答案】A【解析】赋值运算结合性为由右向左结合,赋值运算符左值为变量,右值为变量或常量,且左右两边数据类型相同才能实现赋值。
成功实现赋值后以左值为返回值。
逻辑表达式成立则返回1,不成立返回0。
A选项逻辑表达式a==c不成立(0),则b=0,表达式值为0。
B选项中将c赋值给b,b=1,再将b赋给a,a=1,表达式值为1。
C选项逻辑表达式c==b成立(1),则a=1,表达式值为1。
D选项逻辑表达式a!=c成立(1),则c=1,表达式值为1。
A选项与其他选项不同,A选项正确。
4.设有两行定义语句:int scanf;float case;则以下叙述正确的是A、第2行语句不合法B、两行定义语句都合法C、第1行语句不合法D、两行定义语句都不合法【答案】A【解析】合法的标识符由字母(大、小写均可)、数字和下划线组成,并且必须以字母或下划线开头。
关键字是指被C语言保留的,不能用作其他用途的一些标识符,它们在程序中都代表着固定的含义,用户不可重新定义。
预定义标识符是系统已经有过定义的标识符,用户可以重新定义,可以作为变量名。
scanf为库函数名,属于预定义标识符,可以被用户重定义,所以第一行语句合法。
case为关键字,是选择结构switch语句中的关键字,不可被用户重定义,所以第二行语句不合法。
A选项正确。
5.设有定义:double x=2.12;,以下不能完整输出变量x值的语句是A、printf("x=%5.0f\n",x);B、printf("x=%f\n",x);C、printf("x=%lf\n",x);D、printf("x=%0.5f\n",x);【答案】A【解析】float类型变量有效位数为6~7位,double类型变量有效位数为15~16位。
printf函数控制字符%f输出float类型,%lf输出double类型。
对于float或double型数据,在指定数据输出宽度的同时,也可以指定小数位的位数,格式为%m.nf,表示数据输出总的宽度为m位,其中小数部分占n位。
当数据的小数位多于指定宽度n时,截去右边多余的小数,并对截去的第一位小数做四舍五入处理;而当数据的小数位少于指定宽度n时,在小数的右边补零;当m小于有效位数时,整数部分输出所有有效数字并且自动对齐,小数部分按照n指定位数输出。
A选项按照float格式输出数据,宽度为5位,保留小数0位,输出为2,不能完整输出x,选择A选项。
B选项按照float格式输出数据,输出为2.120000。
C 选项按照double格式输出数据,输出为2.120000。
D选项按照float格式输出数据,保留小数位数为5,输出为2.12000。
6.设有定义:int a,b;float x,y;,则以下选项中对语句所作的注释叙述错误的是A、scanf("%d%d%f",&a,&b);/*多余的格式符%f完全不起作用*/B、scanf("%d%d",&a,&b,&x);/*多余的输入项不能获得输入数据*/C、scanf("%d%f%d",&a,&b,&x);/*输入项与格式符类型不匹配,变量b和x得不到正确的输入数据*/D、scanf("Input:%d%d",&a,&b);/*格式串中允许加入格式符以外的字符串*/【答案】A【解析】A选项中%f是起作用的,程序从键盘正确的读入前两个数据并且保存在指定的地址,读入第三个数据后,将其放入缓冲区,然后寻找应该存放的地址,因为没有找到,程序会发生错误而中断,A选项注释错误,所以选择A选项。
B 选项由于scanf接收数据只有两个,所以变量x得不到赋值,注释正确。
C选项scanf会按照float类型读取输入的第二个数据并且保存为int类型,由于两种类型的存储形式与所占内存单元均不同,所以b得不到正确的赋值,注释正确。
在使用scanf函数时,如果除了格式说明字符和附加格式字符外,还有其他字符,则在输入数据时要求按一一对应的位置原样输入这些字符,故D选项注释正确。
7.若有以下程序#include<stdio.h>main(){int a=1,b=2,c=3,d=4;if((a=2)&&(b=1))c=2;if((c==3)||(d=-1))a=5;printf("%d,%d,%d,%d\n",a,b,c,d);}则程序的输出结果是A、2,2,2,4B、2,1,2,-1C、5,1,2,-1D、1,2,3,4【答案】C【解析】第一个if语句的判断条件中是逻辑与表达式,只有运算对象均非零结果才为真,执行第一个if判断条件,均为赋值表达式,第一个运算对象a=2非零,判断第二个表达式b=1也非零,所以条件成立执行c=2的赋值操作。执行第二个if判断条件中的逻辑或表达式,只要有一个对象非零结果就是真,本条件中c==3运算对象为假,所以需要判断第二个运算对象d=-1,结果为-1非零,所以条件成立,执行a=5,的操作,所以a值为5,b值为1,c值为2,d值为-1。8.若有以下程序#include<stdio.h>main(){int a=1,b=2,c=3,d=4,r=0;if(a!=1);else r=1;if(b==2)r+=2;if(c!=3);r+=3;if(d==4)r+=4;printf("%d\n",r);}则程序的输出结果是A、3B、7C、6D、10【答案】D【解析】第一个if语句a!=1条件为假,所以执行else后的语句r=1。第二个if语句b==2条件成立,执行r+=2,r的值变为3,第三个if语句c!=3条件为假,所以不做任何操作。执行下面的r+=3操作,r的值变为6。判断第四个if条件,d==4条件成立,执行r+=4操作,结果为10。9.若有以下程序#include<stdio.h>main(){int s=0,n;for(n=0;n<4;n++){switch(n){default:s+=4;case1:s+=1;break;case2:s+=2;break;case3:s+=3;}}printf("%d\n",s);}则程序的输出结果是A、10B、11C、13D、15【答案】B【解析】break语句的作用是终止正在执行的switch流程,跳出switch结构或者强制终止当前循环,从当前执行的循环中跳出。题干中第一次循环n值为0,执行default语句后的s+=4,s的值变为4,执行case1语句后的s+=1,s的值变为5,遇到break语句跳出switch语句,进入第二次循环。第二次循环时n的值为1,执行case1后的s+=1,s的值变为6,遇到break语句跳出switch语句,进入第三次循环。第三次循环时n的值为2,执行case2后的s+=2,s的值变为8,遇到break语句跳出switch 语句,进入第四次循环。第四次循环时n的值为3,执行case3后的s+=3,s的值变为11。再判断循环条件为假,退出循环打印s的值11。10.若有以下程序#include<stdio.h>main(){int a=-2,b=0;do{++b;}while(a++);printf("%d,%d\n",a,b);}则程序的输出结果是A、1,3B、0,2C、1,2D、2,3【答案】A【解析】本题重点考察do-while语句及do-while的循环语句保证会执行一次(表达式的真值在每次循环结束后检查),++b即变量b自增1后再参与运算,而a++则表示a参与运算后,再自增1。所以第一次循环结束后,b=1,a=-1。第二次循环后,b=2,a=0。第三次循环后,b=3,a=1。因此A选项正确。11.若有说明语句:int*ptr[10];以下叙述正确的是A、ptr是一个具有10个指针元素的一维数组,每个元素都只能指向整型变量B、ptr是指向整型变量的指针C、ptr是一个指向具有10个整型元素的一维数组的指针D、ptr是一个指向10个整型变量的函数指针【答案】A【解析】int*ptr[10]定义一个指针数组,数组的大小为10,数组中每个元素均是指向整型变量的指针,A选项正确。
ptr是指针数组不是指针,B选项错误。
定义指向具有10个整型元素的一维数组的指针格式为:int(*ptr)[10],C选项错误。