1、国家二级 C语言机试( C语言程序设计)模拟试卷 28及答案与解析 一、选择题 1 有以下程序 #include main()int a1, a2; char c1, c2; scanf(“ d c d c“, &al, &c1, &a2, &c2); printf(“ d, c, d, c“, a1, c1, a2, c2): 若想通过键盘输入,使得 al的值为 12, a2的值为 34, c1的值为字符 a, c2的值为字符 b,程序输出结果是: 12, a, 34, b则正确的输入格式是 (以下 口代表空格,代表回车 ) ( A) 12a34b ( B) 12, a, 34, b ( C
2、) 12a34b ( D) 12a34b 2 有以下程序 #include main()char c1 c2, c3, c4, c5, c6; scanf(“ c c c c“, &c1, &c2, &c3, &c4); c5=getchar(); c6=getchar(); putchar(c1); putchar(c2); printf(“ c c n“, c5, c6); 程序运行后,若从键盘输入 (从第 1列开始 )123 45678则输出结果是 ( A) 1256 ( B) 1278 ( C) 1245 ( D) 1 267 3 若有定义语句: double x, y, *px, *
3、py;执行 px=&x; py=&y;正确的输入语句是 ( A) scanf(“ f f“&x, &y); ( B) scanf(“ f f“, x, y); ( C) scanf(“ lf le“, px, py); ( D) scanf(“ lf lf“, x, y); 4 以下程序段 完全正确的是 ( 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): 5 若在定义语句: int a,
4、 b, c, *p=&c;接着执行以下选项中的语句,则能正确执行的语句是 ( A) scanf(“ d d d“, a, b, c); ( B) scanf(“ d“, a, b, c); ( C) scanf(“ d”, p); ( D) scanf(“ d“, &p); 6 有以下程序段 intj; float y; char name50; scanf(“ 2d f s“, &i, &yname); 当执行上述程序段,从键盘上输入 55566 7777abc后, y的值为 ( A) 55566 0 ( B) 7777 0 ( C) 566 0 ( D) 566777 0 7 有以下程序段
5、 char name20; int num; scanf(“name= s num= d“, name, &num); 当执行上述程序段,并从键盘输入: name=Lili num=1001后, name的值为 ( A) name=Lili ( B) Lili num= ( C) name=Lili num=1001 ( D) Lili 8 s1和 s2已正确定义并分别指向两个字符串。若要求:当 s1所指串大于 s2所指串时,执行语句 S;则以下选项中正确的是 ( A) iffs1s2)S; ( B) if(strcmp(s1, s2)S; ( C) if(strcmp(s2, s1)0)S;
6、 ( D) if(strcp(s1, s2)0)S: 9 把以下四个表达式用作 if语句的控制表达式时,有一个选项与其他三个选项含义不同,这个选项是 ( A) k 2 ( B) k 2=1 ( C) (k 2)!=0 ( D) !k 2=1 10 以下是 if语句的基本形式: if(表达式 )语句 其中 “表达式 ” ( A)必须是逻辑表达式 ( B)必须是关系表达式 ( C)必须是逻辑表达或关系表达 ( D)可以是任意合法的表达式 11 有以下程序 main()int a=0, b=0, c=0, d=0; if(a=1)b=1; c=2; else d=3; printf(“ d, d,
7、d, d n“, a, b, c, d); 程序输出 ( A) 0, 0, 0, 3 ( B) 1, 1, 2, 0 ( C)编译有错 ( D) 0 1 2, 0 12 有以下程序 main()int x=1, y=0; if(!x)y+; else if(x=0) if(x)y+=2; else y+=3; pfintf(“ d n“, y); 程序运行后的输出 结果是 ( A) 2 ( B) 0 ( C) 1 ( D) 3 13 若变量已正确定义,在 if(W)printf(“ d n“, k);中,以下不可替代 W的是 ( A) ch=getchar() ( B) a=b+c ( C)
8、ab)a=b, b=c; c=a; printf(“a= d b= d c= d n“, a, b, c); 程序的输出结果是 ( A) a=10 b=50 c=30 ( B) a=10 b=30 c=10 ( C) a=10 b=50 c=10 ( D) a=50 b=30 c=5 15 设有定义: int a=1, b=2, c=3;以下语句中执行效果与其它三个不同的是 ( A) if(ab)c=a; a=b; b=c; ( B) if(ab)c=a, a=b, b=c; ( C) if(ab)c=a, a=b, b=c; ( D) if(ab)c=a; a=b; b=c; 16 if语句
9、的基本形式是: if(表达式 )语句,以下关于 “表达式 ”值的叙述中正确的是 ( A)必须是整数值 ( B)必须是正数 ( C)可以是任意合法的数值 ( D)必须是逻辑值 17 有如下嵌套的 if语句 if(a=0)y=sqrt(x); else y=sqrt(-x); ( C) if(x=0)y=sqrt(x); if(x=07x: -x); 19 有以下程序 #include main()int x; scanf(“ d“, x); if(x 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
10、(“ d, d, d, d n“, a, b, c, d); 则程序的输出结果是 ( A) 2, 1, 2, -1 ( B) 2, 2, 2, 4 ( C) 5, 1, 2, -1 ( D) 1, 2, 3, 4 23 若有以下程序 #include main()int a=1, b=2, c=3, d=4, r=0; if(a!=1); else r=1; if(b=2)r+=2; else; if(c!=3)r+=3; else; if(d=4)r+=4; printf(“ d n“, r); 则程序的输出结果是 ( A) 10 ( B) 6 ( C) 7 ( D) 3 24 若有以下程序
11、 #include main()int a=1, b=2, c=3, d=4; if(a=2)&(b=1)c=2; if(c=3)Il(d=-1)a=5; printf(“ d, d, d, d n“, a, b, c, d); ) 则程序的输出结果是 ( A) 2, 1, 2, -1 ( B) 2, 2, 2, 4 ( C) 1, 2, 3, 4 ( D) 5, 1, 2, -1 25 若有以下程序 main()int a=l, 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;
12、printf(“ d n“, r); 则程序的输出结果是 ( A) 7 ( B) 10 ( C) 6 ( D) 3 26 以下叙述中正确的是 ( A) if语句只能嵌套一层 ( B)不能在 else子句中再嵌套 if语句 ( C) if子句和 else子句中可以是任意的合法的 C语句 ( D)改变 if-else语 句的缩进格式,会改变程序的执行流程 27 以下选项中与 if(a=1)a=b; else a+;语句功能不同的 switch语句是 ( A) switch(a) case 1: a=b: break; default: a+; ( B) switch(a=1) case 0: a=
13、b; break; case 1: a+; ( C) switch(a) default: a+; break; case 1: a=b; ( D) switch(a=1) case 1: a=b; break; case 0: a+; 国家二级 C语言机试( C语言程序设计)模拟试卷 28答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 本题考查 scanf语句。 SCanf()函数是格式化输入函数,它从标准输入设备 (键盘 )读取输入的信息。 其调用格式为: scanf(“, ) 格式化字符串包括以下 3类不同的字符。 格式化说明符:格式化说明符与前面用的 printf()函数中
14、的格式说明符基本相同。 空白字符:空白字符会使 scanf()函数在读操作中略去输入中的一个或多个空白字符。 非空白字符:一个非空白字符会使 scanf()函数在读入时剔除掉与这个非空白字符相同的字符。 由于在 scanf函数中,几个变量之间没有任何间隔,所以输入的时候,也同样不应该有间隔。 【知识模块】 C语言程序设计 2 【正确答案】 C 【试题解析】 当用 scanf函数从键盘输入数据时,每行数据的未尾按下回车键(Enter键 )之前,可以任意修改。但按下回车键 putchar(c1)(Enter键 )之后, scanf函数即接受了这一行数据,不能再回去修改。所以本题中,当输入 123时
15、,变量 c1、 c2、 c3的值分别为 1、 2、 3,当输入 45678耐,变量 c5、 c6的值 4和 5。所以用输出函数 putchar(c1)输出 1, putchar(c2)输出 2, printf(“ c cn“, c5, c6)输出 45。 【知识模块】 C语言程序设计 3 【正确答案】 C 【试题解析】 本题考查 scanf语句。 scanf()函数的一般格式为: scanf(“格式字符串 “,输入项首地址表 ),对于 double类型数据,输入时候要加上 1修饰,否则会产牛错误的输入信息,同时输入项必须是地址,可以使保存变量地址的指针变量。 【知识模块】 C语言程序设计 4
16、【正确答案】 A 【试题解析】 选项 B没有对指针进行初始化,无效指针。选项 C错在没有对指针进行初始化,无效指针并且在 scanf(“ d“, &p)中无需再进行取地址操作。选项 D,语句 “*p=&k; ”的左端 *p是指针所指内存空间的值, &k是地址,应为“p= k”。 【知识模块】 C语言程序设计 5 【正确答案】 C 【试题解析】 程序语句 int a, b, c, *p=&c;定义了三个整型变量 a, b, c,和一个整型指针变量 p,并且把变量 c的地址赋给 p。 scanf函数的一般形式为“scanf(“格式控制字符串 ”,地址列表 )”,其中的地址列表应当是存放输入数据变量
17、的地址。 【知识模块】 C语言程序设计 6 【正确答案】 C 【试题解析】 因为在输入格式控制符中指定变量 i的输入格式控制符为 “ 2d”,即变量 j所占的宽度为 2,所以变量 i只接收输入数据的前两位,从第三位开始直到空格之间的输入整数都会被保存到变量 y中,因为 y为浮点型 数据,所以输出结果为选项 C。 【知识模块】 C语言程序设计 7 【正确答案】 D 【试题解析】 在题目中以字符串的形式给字符数组赋值,所以字符数组 name的值为 Lili。 【知识模块】 C语言程序设计 8 【正确答案】 D 【试题解析】 字符串标记使用 strcmp函数,该函数有两个参数分别是需要比较大小的两个
18、字符串 s1和 s2,如果 s1大于 s2则返回值大于 0,如果 s1小于 s2则返回值小于 0,否则 s1和 s2相同返回 0。题目要求 s1大于 s2时执行语句 S,因此strcmp(s1, s2)的返回值大于 o时执行 S。 【知识模块】 C语言程序设计 9 【正确答案】 D 【试题解析】 本题考查 if语句和 if语句构成的选择。选项 A表示 k除以 2的余数,如果余数为 1则 if成立,否则不能成立,即 if判断 k是否为奇数;选项 B是判断 k除以 2的余数是否等于 1,函数和选项 A相同;选项 C表示 k除以 2的余数不为 0,和选项 A一致;选项 D中, !运算符优先级高于预算
19、符,先计算 !k,然后再取余数,并判断余数是否等于 1。 【知识模块】 C语言程序设计 10 【正确答案】 D 【试题解析】 本 题考查 if语句, C语言中 if语句中的表达式可以是任意合法的表达式。 【知识模块】 C语言程序设计 11 【正确答案】 C 【试题解析】 if语句的格式为: if表达式 )语句 1 else 语句 2 if和 else是 C语言的关键字。 “语句 1”称为 if子句, “语句 2”称为 else子句,这些子句只允许为一条语句,若需要多条语句时,则应该使用复合语句。因此题目“if(a=1)b=1; c=2; else d=3; ”, if分支有两条语句,没构成复合
20、语句。 【知识模块 】 C语言程序设计 12 【正确答案】 B 【试题解析】 x=1, if和 else if的条件都不满足,故 y值不改变输出。 【知识模块】 C语言程序设计 13 【正确答案】 C 【试题解析】 在 if()语句的括号是一个合法的 C语言表达式即可,如果表达式的值为 0,则不执行 if语句,否则执行 if语句,而在选项 C中,符号 b+c)(ab+c。所以它不是一个合法的 C语言表达式 。 【知识模块】 C语言程序设计 14 【正确答案】 C 【试题解析】 本题的程序段首先定义三个整型变量 a, b, c,并且其初始值分别等于 10, 50, 30,然后判断 ab是否成立,
21、如果条件成立,则把 b的值赋给 a,把 c的值赋给 b。由 a和 b的初始值可知,此条件表达式不成立,所以 a和 b的值保持不变。再执行下一条语句,把 a的值赋给 c,所以 c的当前值等于 10,最后由输出语句输出变量 a b c的当前值,分别为 10, 50, 10。 【知识模块】 C语言程序设计 15 【正确答案】 A 【试题解 析】 在 C语言中,用分号表示一条语句的结束,用 把几条语句放在一块表示一个语句块,其整体表示一个功能。因而在题目给出的四个选项中,选项B、 C、 D表示的功能相同,而选项 A表示的是一条 if语句,两条赋值语句。 【知识模块】 C语言程序设计 16 【正确答案】
22、 C 【试题解析】 在 if语句中,表达式可以是任意合法的数值。当其值为非零时,执行 if语句,为 0时执行 else语句。 【知识模块】 C语言程序设计 17 【正确答案】 D 【试题解析】 嵌套的 if else语句的含义是,在变 量 a的值小于变量 b的值,同时,变量 a的值小于变量 c的值时,把变量 a的值赋给变量 k。在变量 a的值小于变量 b的值,同时,变量 a的值大于等于变量 c的值时,把变量 c的值赋给变量k。在变量 a的值大于等于变量 b的值,同时,变量 b的值小于变量 c的值时,把变量 b的值赋给变量 k。在变量 a的值大十等卡变量 b的值,同时,变量 b的值大于等于变量
23、c的值时,把变量 c的值赋给变量 k。 【知识模块】 C语言程序设计 18 【正确答案】 A 【试题解析】 由题意可知计算公式的含义是:当 x大于等于 0时, y值等于 x的算术平方根: 当 x小于 0时, y值等于 x的相反数的算术平方根。所以选项 B用一个完整的 if else语句表达了计算公式的含义;选项 C用两个 if语句表达了计算公式的含义:选项 D在求平方根函数的后面用 x0?x: x条件表达式来表达了计算公式的含义。选项 A没有用 C语言语句正确的表达计算公式的含义。 【知识模块】 C语言程序设计 19 【正确答案】 D 【试题解析】 题目中,虽然 else和第二个 if不在同一
24、行上,但等价于在同一行上,因此,程序的意思是当 x大于 3且不等于 10时打印出来。 【知识模块】 C语言程序设 计 20 【正确答案】 C 【试题解析】 a, b, c, d初始值分别为 1, 2, 3, 0。嵌套的 if语句中,第一个if中,表达式 a=1 &b+=2值为 1,执行嵌套的 if分支,此时 “b=3, b!=2”成立,由于运算符是 ,不管后面一个表达式的值是不是 1,其整个表达式的值总是1, “c-!=3”表达式不执行,最后打印出 a, b, c的值是 1, 3, 3。 【知识模块】 C语言程序设计 21 【正确答案】 A 【试题解析】 选项 B、 C、 D这三条语句都是在变
25、量不等于 0的情况下,输出x;等于 0的情况 下输出 y,而选项 A则正好相反。 【知识模块】 C语言程序设计 22 【正确答案】 B 【试题解析】 代码中有两条并列的 if语句,第一条 if语句执行, (a=2)(b=1)值为1,由于逻辑或表达式,根据其短路运算规则, a=2, b=2,即 b值不变执行 if分支c=2。并列的 if语句中表达式 (c=3) &(d=-1)为逻辑与表达式, c=3不成立,不考虑 d=-1表达式, d为 5逻辑表达式值为 0,不执行相应 if分支。 【知识模块】 C语言程序设计 23 【正确答案】 C 【试题解析】 程序代码中有四条并列的 if语句,第一条 if
26、表达式 a!=1不成立,执行 else分支, r=1;第二条 if表达式 b=2成立,执行 r+=2, r=3:第三条 if语句 c!=3不成立,执行 else分支,分支为空语句;第四条 if分支 d=4成立,执行该 if分支语句, r+=4, r=7。 【知识模块】 C语言程序设计 24 【正确答案】 D 【试题解析】 代码中有两条并列的 if语句,第一条 if语句,逻辑与表达式(a=2)&f1)=1)中, a=2,则执行 b=1,得到该逻辑与表达式值为 1,执行分支语句c=2; 第二条 if语句 (c=3)(d=-1), c=3不成立,执行 d=-1,而后得出整个逻辑与表达式值为 1,执行
27、分支语句 a=5。 【知识模块】 C语言程序设计 25 【正确答案】 B 【试题解析】 程序代码中有四条并列的 if语句,第一条 if表达式 a!=1不成立,执行 else分支, r=1;第二条 if表达式 b=2成立,执行 r+=2, r=3;第三条 if语句 c!=3不成立,执行语句 r+=3, r=6:第四条 if分支 d=4成立,执行该 if分支语句, r+=4, r=10。 【知识模块】 C语言程序设计 26 【正确答案】 C 【试题解析】 含 else子句的 if语句的格式为 if(表达式 )语句 1 else 语句 2 其中 if和 else是 C语言的关键字。 “语句 1”称为
28、 if子句, “语句 2”称为 else子句,这些子句只允许为一条语句,若需要多条语句时,则应该使用复合语句,对于 if和 else语句的嵌套原则是比较自由的。 【知识模块】 C语言程序设计 27 【正确答案】 B 【试题解析】 本题主要考查 if和 switch结构。 “if(a=1)a=b; else a+; ”代码段的功能是如果 a等于则把 b的值赋值给 a,否则 a+。选项 A使用 switch对 a进行判断,如果是 1则 a=b,跳出 switch,如果是其他值则 a+;选项 B对 a=1的结果进行 switch判断,如果为 0表示 a不等于 1则 a=b,和题目要求不符合;选项C和选项 A一样;选项 D和选项 case条件相反,满足题目要求。 【知识模块】 C语言程序设计
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1