1、国家二级 C语言( C语言程序设计)机试模拟试卷 7及答案与解析 一、选择题 1 fun函数的功能是:通过键盘输入给 x所指的整型数组所有元素赋值。在下划线处应填写的是 #include stdio h #define N5 Void fun(int xN) int m; for(m=N-l; m =0; m-)scanf(“ d“, _); ( A) x+m ( B) xm+1 ( C) x+(m+) ( D) x+m 2 设有定义语句 int x61=2, 4, 6, 8, 5, 7), *p=x, i; 要求依次输出 x数组 6个元素中的值不能完成此操作的语句是 ( A) for(i=0
2、; 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+)pfintf(“ 2d“, (*p)+); 3 程序段: int x=12; double y=3 141593; printf(“ d 8 6f“, x, y);的输出结果是 ( A) 123 141593 ( B) 123 141593 ( C) 12, 3 141593 ( D) 123 1415930 4 有以下
3、程序 main()char a, b, c, d; scanf(“ c c“, &a, &b); c=getchar(); d=getchar(); printf(” c c c cha” , a, b, c, d); 当执行程序时,按下列方式输入数据 (从第 1列开始,代表回车,注意:回车也是一个字符 )12 34则输出结果是 ( A) 12 ( B) 1234 ( C) 12 3 ( D) 12 34 5 设有定义: int a; float b;执行 scanf(“ 2d f“, &a, &b);语句时,若从键盘输入 876 543 0则 a和 b的值分别是 ( A) 876和 543
4、0 ( B) 87和 6 0 ( C) 87和 543 0 ( D) 76和 543 0 6 以下叙述中正确的是 ( A)当用 scanf从键盘输入数据时,每行数据在没按下回车键 (Enter键 )前,可以任意修改 ( B)花括号对 只能用来表示函数的开头和结尾,不能用于其他目的 ( C)空语句就是指程序中的空行 ( D)复合语句在语法上包含多条语句,其中不能定义局部变量 7 有以下程序 #include stdio h main()char c1, c2, c3, c4, c5, c6; scanf(“ c c c c“, &c1, &c2, &c3, &c4); c5=getchar();
5、 c6=getchar(); putchar(c1); putchar(c2); printf(“ c c n“, c5, c6); 程序运行后,若从键盘输入 (从第 1列开始 )123 45678则输出结果是 ( A) 1256 ( B) 1278 ( C) 1245 ( D) 1267 8 有以下程序段 int j; float y; char name50; scanf(“ 2d f s“, &j, &y, name); 当执行上述程序段,从键盘上输入 55566 7777abc后, y的值为 ( A) 55566 0 ( B) 7777 0 ( C) 566 0 ( D) 566777
6、 0 9 以下是 if语句的基本形式: if(表达式 )语句 其中 “表达式 ” ( A)必须是逻辑表达式 ( B)必须是关系表达式 ( C)必须是逻辑表达或关系表达 ( D)可以是任意 合法的表达式 10 有以下程序段 int a, b, c; a=10; b=50; c=30; if(a b)a=b, b=c; c=a; printf(“a= db= dc= 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=50 11 有以下计算公式 若
7、程序前面已经在命令行中包含 math h文件,不能够正确计算上述公式的程序段是 ( A) y=sqrt(x); if(x 0)y=sqrt(-x); ( B) if(x =0)y=sqrt(x); elsey=sqrt(-x); ( C) if(x =0)y=sqrt(x); if(x 0)y=sqrt(-x); ( D) y=sqrt(x =07x: -x); 12 若有以下程序 #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“,
8、 a,b, c, d); 则程序的输出 结果是 ( A) 2, 1, 2, -1 ( B) 2, 2, 2, 4 ( C) 5, 1, 2, -1 ( D) 1, 2, 3, 4 13 以下叙述中正确的是 ( A) if语句只能嵌套一层 ( B)不能在 else子句中再嵌套 if语句 ( C) if子句和 else子句中可以是任意的合法的 C语句 ( D)改变 if-else语句的缩进格式,会改变程序的执行流程 14 若有定义: float x=1 5; int a=1, b=3, c=2;则正确的 switch语句是 ( A) switch(a+b)case1: printf(“* n“);
9、 case2+1: printf(“* n“); ( B) switch(int)x); case1: printf(“* n“); case2: printf(“* n“); ( C) switch(x)case1 0: printf(“* n“); case2 0: printf(“* n“); ( D) switch(a+b)case1: printf(“* n“); case c: printf(“* n“); 15 有以下程序 #include main()int x=1, y=0, a=0, b=0; switch(x)case1: switch(y) case0: a+; bre
10、ak; case1: b+; break; ) case2: a+; b+; break; printf(“a= d, b= d n“, a, b); 程序运行后的输出结果是 ( A) a=1, b=1 ( B) a=1, b=0 ( C) a=2, b=1 ( D) a=2, b=2 16 关于 “while(条件表达式 )循环体 ”,以下叙述正确的是 ( A)循环体的执行次数总是比条件表达式的执行次数多一次 ( B)条件表达式的执行次数与循环体的执 行次数一样 ( C)条件表达式的执行次数总是比循环体的执行次数多一次 ( D)条件表达式的执行次数与循环体的执行次数无关 17 有以下程序 #
11、include stdio h void main() int s; scanf(“ d“, &s); while(s 0) switch(s) case1: printf(“ d“, s+5); case2: printf(“ d“, s+4); break; case3: printf(“ d“, s+3); default: printf(“ d“s+1); break; scanf(“ d“, &s); 运行时,若输入 1 2 3 4 5 0,则输出结果是 ( A) 66656 ( B) 6566456 ( C) 66666 ( D) 6666656 18 若有以下程序 main()i
12、nt a=-2, b=0; while(a+) +b: printf(“ d, d n“, a, b); 则程序的输出结果是 ( A) 0 2 ( B) 1, 2 ( C) 1, 3 ( D) 2, 3 19 以下不构成无限循环的语句或语句组是 ( A) n=0; do+n; while(n =0); ( B) n=0; while(1)n+; ( C) n=10; while(n); n-; ( D) for(n=0, i=1; i+)n+=i; 20 有以下程序 main()int a=3; doprintf(“ d, “, a-=2); while(!(-a); printf(“ n“)
13、; 程序运行后的输出结果是 ( A) 1, 1 ( B) 1, -2, ( C) 3, 0, ( D) 1, 0 21 有以下程序 #include stdio h main() int y=9; for(; y 0; y-) if(y 3=0)printf(“ d“, -y); 程序的运行结果是 ( A) 963 ( B) 852 ( C) 741 ( D) 875421 22 设变量已正确定义,则以下能正确计算 f=n!的程序段是 ( A) f=0; for(i=; i =n; i+)f*=i; ( B) f=1; for(i: 1; i n; i+)f*=i; ( C) f=1; for
14、(i=n; i 1; i+)if=i; ( D) f=1; for(i=n; i =2; i-)f*=i; 23 有以下程序段 int i, n; for(i=0; i 8; i+) n=rand() 5; switch(n) case1: case3: printf(“ d n“, n); break; case2: case4: printf(“ (1 n“, n); continue; case0: exit(0); printf(“ d n“, n); ( A)当产生的随机数 n为 4时结束循环操作 ( B)当产生的随机数 n为 1和 2时不做任何操作 ( C)当产生的随机数 n为 0
15、时结束程序运行 ( D) for循环语句固定执行 8次 24 若有以下程序 #include char*a=“you“; char b=“Welcome you to China!“; main()int i, j=0: char*p; for(i=0: bi!= 0; i+) if(*a=bi) p=a; for(j=i; *p!= 0; j+) if(*p!=bj)break; p+; if(*p= 0)break; printf(“ s“, &bi); 则程序的输出结果是 ( A) you to China! ( B) to China! ( C) me you to China! (
16、D) China! 25 以下叙述中正确的是 ( A)循环发生嵌套时,最多只能两层 ( B)三种循环 for, while, do-while可以互相嵌套 ( C)循环嵌套时,如果不进行缩进形式书写代码,则会有编译错误 ( D) for语句的圆括号中的表达式不能都省略掉 26 以下叙述中正确的是 ( A) break语句不能用于提前结束 for语句的本层循环 ( B) continue语句使得整个循环终止 ( C)使用 break语句可以使流程跳出 switch语句 体 ( D)在 for语句中, continue与 break的效果是一样的,可以互换 国家二级 C语言( C语言程序设计)机试
17、模拟试卷 7答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 本题考查数组和 scanf函数的使用。程序通过 for循环来给数组元素斌值,赋值语句通过调用 scanf函数来实现。 scanf函数从键盘接收数据,函数的第二个参数是数据保存的地址,因此选项 B)和选项 D)不是地址,错误。选项 A)和选项 C)是地址,但是选项 C)的 m值会 +自增,然后 for循环里面又 m-自减,会导致死循环,不满足要求,选项 A)正确。 【知识模块】 C语言程序设计 2 【正确答案】 D 【试题解析】 指针 p指向数组 x,因此可以使用 p来输出数组 x的值。选项 A)中, *(p+)表示先取出
18、p指向的元素的值,然后 p+指向下一个元素,满足要求;选项 B)中 *(p+i)每次 i的值发生变化, (p+i)指向 x数组的 xi元素,因此 *(p+i)是取出数组 x的 xi元素的值,满足要求;选项 C)和选项 A)相比,少了括号,由于 *运算符的优先级比 +要求,因此,因此 *p+表示先取出 p指向的元素的值,然后 p再 +指向下一个元素,满足要求;选项 D)中 (+p)+表示先取出 p指向的元素的值,然后该值 +, p没有增加,每次循环都 *p取出的 x0的值,不满足要求。 【知识模块】 C语言程序设计 3 【正确答案】 A 【试题解析】 本题考查格式化输出函数 printf。在 p
19、rintf函数调用里面首先输入整型变量 x的值 12,然后按照 “ 8 6f”格式输出 double类型变量 y的值, “8 6f”表示输出 8位,小数点后输出 6位。 【知识模块】 C语言程序设计 4 【正确答案】 C 【试题解析】 scanf和 gecchar函数分别从键盘上读入一个字符,因此输入 12空格 34,则变量 a中存放的为 1, b中存放 2, c中存放空格, d中存放 3。 【知识模块】 C语言程序设计 5 【 正确答案】 B 【试题解析】 在输入函数 scanf的输入格式符 2d f中, 2d表示输入的数据的宽度为 2,所以当从键盘输入 876543 0 cR时,这时把输入
20、数字串的前两位87赋给变量 a,然后将紧接着将 6按照格式控制符 f的形式赋给变量 b,所以 b的值为 6 000000。 【知识模块】 C语言程序设计 6 【正确答案】 A 【试题解析】 当使用 scanf函数从键盘输入数据时,每行数据在未按下回车键之前,可以任意修改。但按下回车键后, scanf函数即接受了这一行数据,不能再修改。选项 A)正确,对于选项 B), 还可以表明复合语句的开头结尾,或者循环体的开头结尾等,选项 B)错误,而空语句为 “: ”,不是空行,选项 C)错误,在复合语句中可以定义变量为局部变量,选项 D)错误。 【知识模块】 C语言程序设计 7 【正确答案】 C 【试题
21、解析】 当用 seanf函数从键盘输入数据时,每行数据的未尾按下回车键(Enter键 )之前,可以任意修改。但按下回车键 putchar(c1)(Enter键 )之后, scanf函数即接受了这一行数据,不能再回去修改。所以本题中,当输入 123 CR时,变量 c1、 c2、 c3的值分别为 1、 2、 3,当输入 45678 CR时,变量 c5、 c6的值 4和 5。所以用输出函数 putehar(c1)输出 1 putchar(c2)输出 2, printf(“c c n“, c5, c6)输出 45。 【知识模块】 C语言程序设计 8 【正确答案】 C 【试题解析】 因为在输入格式控制符
22、中指定变量 j的输入格式控制符为 “ 2d”,即变量 j所占的宽度为 2,所以变量 i只接收输入数据的前两位,从第三位开始直到空格之间的输入整数都会被保存到变量 y中,因为 y为浮点型数据,所以输出结果为 选项 C)。 【知识模块】 C语言程序设计 9 【正确答案】 D 【试题解析】 本题考查 if语句, C语言中 if语句中的表达式可以是任意合法的表达式。 【知识模块】 C语言程序设计 10 【正确答案】 C 【试题解析】 本题的程序段首先定义三个整型变量 a。 b。 c,并且其初始值分别等于 10, 50, 30然后判断 a b是否成立,如果条件成立,则把 b的值赋给 a,把 c的值赋给
23、b。由 a和 b的初始值可知,此条件表达式不成立,所以 a和 b的值保持不变。再执行下一条语句,把 a的值赋给 c,所以 c的当 前值等于 10。最后由输出语句输出变量 a, b, c的当前值,分别为 10, 50, 10。 【知识模块】 C语言程序设计 11 【正确答案】 A 【试题解析】 由题意可知计算公式的含义是:当 x大于等于 0时, y值等于 x的算 *平方根;当 x小于 0时, y值等于 x的相反数的算 *平方根。所以选项 B)用一个完整的 if else语句表达了计算公式的含义:选项 C)用两个 if语句表达了计算公式的含义;选项 D)在求平方根函数的后面用 x0?x: -x条件
24、表达式来表达了计算公式的含义。选项 A)没有用 C语言语句正确的表达计算公式 的含义。 【知识模块】 C语言程序设计 12 【正确答案】 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语言程序设计 13 【正确答案】 C 【试题解析】 含 else子句的 if语句的格式为 i
25、fr表达式 ) 语句 1 else 语句 2 其中 if和 else是 C语言的关键字。 “语句 1”称为 if子句, “语句 2”称为 else子句,这些子句只允许为一条语句,若需要多条语句时,则应该使用复合语句,对于iffielse语句的嵌套原则是比较自由的。 【知识模块】 C语言程序设计 14 【正确答案】 A 【试题解析】 在 C语言中, switch()后一对圆括号中的可以是整型表达式或字符表达式。 case语句后面的常量表达式的类型必须与 switch后圆括号中的表达式类型相同,各 case语句标号的值应该互不相同,选项 B)中 switch后括号表达式出错,选项 C)中 case
26、后面的常量类型不正确,选项 D)中 Case后面出现了变量表达式,所以 D)不正确。 【知识模块】 C语言程序设计 15 【正确答案】 C 【试题解析】 本题考查的是用 switch语句实现多分支选择结构,首先进入第一个 switch(x)判断,进入 case1中进行嵌套判断,如果 switch(y)也成立, a自加 1,遇到 break,退出嵌套,接着执行 case2, a自加为 2, b自加为 1,遇到 break,结束循环,此时 a=2, b=1。 【知识模块】 C语言程序设计 16 【正确答案】 C 【试题解析】 while语句中表达式是循环条件,语句为循环体。 while语句中当表达
27、式计算的值为真 (非 0)时,执行循环体语句。因此条件表达式执行的次数总是比循环体多一次。 【知识模块】 C语言程序设计 17 【正确答案】 B 【试题解析】 这道试题主要考查了 switch和 break语句,当变量 s的值为 1时,执行 case1、 case2两条语句,输出 65;当变量 s的值为 2时,执行 case2语句,输出 6;变量 s的值为 3时,执行 case3、 default两条语句,输出 64;变量 s的值为4时,执行 default语句,输入 5,变量 s的值为 5时,执行 default语句,输出6;变量 s的值为 0时,程序运行结束。 【知识模块】 C语言程序设计
28、 18 【正确答案】 B 【试题解析】 循环体执行两次,第一次表达式 a+值为 -2, a的值为 -1,执行循环体 +b, b值为 1,第二次表达式 a+值为 -1, a的值等于 0,执行 +b, b值为2,第三次判断条件 a+,表达式值为 0,不执行循环体,但是条件判断以后, a的值为 1。 【知识模块】 C语言程序设计 19 【正确答案】 A 【试题解析】 选项 B)中 while(1)永远为真所以进入死循环,选项 C)中while(n=10)同理,选项 D)中 for循环没有循环限定条件也将进入无限循环,只有选项 A)中 while(n =0)循环判定成立,循环将不进入无限循环。 【知识
29、模块】 C语言程序设计 20 【正确答案】 B 【试题解析】 循环体执行两次。首先输出 a=1,然后判断表达式 !(-a), a为 0,循环条件表达式值为 1,执行第二次循环体,输出 a=-2。判断循环条件 表达式值为 0,循环退出。 【知识模块】 C语言程序设计 21 【正确答案】 B 【试题解析】 y的值的初值为 9,所以在 for循环中,当 y的值为 9、 6或 3时,if语句的条件成立,执行输出语句,输出表达式 -y的值,因为自减符号在 y的前面,所以首先 y的自减 1,然后再输出 y的值,故输出结果为 8 5 2。 【知识模块】 C语言程序设计 22 【正确答案】 D 【试题解析】
30、本题主要考查 for循环的使用。题目要求计算阶乘 n!,通过 for循环来实现,循环变量 i可以从 1到 n(包括 n)或者从 n到 1,在循环体内做累乘。选项 A)中,累乘变量的初值为 0,最终计算结果也为 0:选项 B)中循环次数为 n-1次,累乘结果少乘了 n;选项 C)是死循环;选项 D)正确。 【知识模块】 C语言程序设计 23 【正确答案】 C 【试题解析】 rand()函数功能为产生一个随机数, rand() 5,则产生 0 4之间的任意随机数,当产生的随机数 n为 0时。执行 case0: exit(0)这条语句,结束程序的运行。 【知识模块】 C语言程序设计 24 【正确答案
31、】 A 【试题解析】 程序中循环部分的主 要功能是,在字符串 b中寻找是否含有子串a,如果含有则退出,此时 i为子串 a在字符串 b中第一次出现的位置。因此最后的输出函数则从第 i个字符开始一直输出到字符串的末尾。 【知识模块】 C语言程序设计 25 【正确答案】 B 【试题解析】 在一个循环体内又完整包含了另一个循环,称为循环嵌套。循环的嵌套可以多层,但每一层循环在逻辑上必须是完整的。 for循环、 while循环、 do-while循环可咀互相嵌套,但每层循环在逻辑上必须完整。而在 for语句中, for语句中的表达式可以部分或全部省略,但两个 “; ”不可省略。 【知识模块】 C语言程序设计 26 【正确答案】 C 【试题解析】 用 break语句可以使程序流程跳出 switch语句体,也可用 break语句在循环结构中终止循环体,从而提前结束循环。而 continue语句的作用是结束本次循环,即跳过本次循环体中 continue语句后面的语句,立刻进行下一次的循环条件判断,可以理解为仅结束本次循环。 【知识模块】 C语言程序设计