1、国家二级 C语言( C语言程序设计)机试模拟试卷 6及答案与解析 一、选择题 1 以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #include stdio_h #define N10 void fun(int xN) int i=0; while(i N)scanf(“ d“, _); 在程序中下划线处应填入的是 ( A) x+i ( B) xi+1 ( C) x+(i+) ( D) x+i 2 有以下程序 main()int a=3; a+=a-=a*a; printf(“ d n“, a); 程序的输出结果是 ( A) 9 ( B) 3 ( C) -12 ( D) 0 3
2、 若有定义语句: char s10=“1234567 0 0“;,则 strlen(s)的值是 ( A) 7 ( B) 8 ( C) 9 ( D) 10 4 有以下程序 main()int a=2, c=5; printf(“a= d, b= d n“, a, c); 程序的输出结果是 ( A) a= 2, b= 5 ( B) a= d, b= d ( C) a=2, b=5 ( D) a= d, b= d 5 设变量均已正确定义,若要通过 scanf(“ d c d c“, &a1, &c1, &a2,&c2);语句为变量 a1和 a2赋数值 10和 20,为变量 c1和 c2赋字符 X和
3、Y。以下所示的输入形式中正确的是 (注: 代表空格字符 ) ( A) 10X20Y ( B) 10X20Y ( C) 10X20Y ( D) 10X20Y 6 设有定义: double a, b, c;若要求通过输入分别给 a、 b、 c输入 1、 2、 3,输入形式如下 (注:此处 代表一个空格 )1 02 03 0则能进行正确输入的语句是 ( A) scanf(“ 1f 1f 1f, a, b, c); ( B) scanf(“ f f f, &a, &b, &c); ( C) scanf(“ 1f 1f 1f, &a, &b, &c); ( D) scanf(“ 5 11f 5 11f
4、5 1f“, &a, &b, &c); 7 有以下程序 #include main()int a1, a2; char c1, c2; scanf(“ d c d c“, &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则正确的输入格式是 (以下 代表空格,代表回车 ) ( A) 12a34b ( B) 12, a, 34, b ( C) 12a34b ( D) 12a34b
5、 8 若在定义语句: int a, 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); 9 把以下四个表达式用作 if语句的控制表达式时,有一个选项与其他三个选项含义不同,这个选项是 ( A) k 2 ( B) k 2=1 ( C) (k 2)!=0 ( D) !k 2=1 10 若变量已正确定义,在 if(W)printf(“ d n“, k);中,以下不可替代 W的是 (
6、 A) ch=getchar() ( B) a=b+c ( C) a b+c ( D) a+ 11 有如下嵌套的 if语句 if(a b) iffa c)k=a; else k=c: else if(b c)k=b; else k=c; 以下选项中与上述 if语句等价的语句是 ( A) k=(a b)?(bc)?b: c); ( B) k: (a c)?b: c; ( C) k=(a c)?a: c; ( D) k=(a b)?(a c)?a: c): (b c)?b: c); 12 下列条件语句中,输出结果与其他语句不同的是 ( A) if(a=0)printf(“ d n“, x); el
7、se printf(“ d n“, y); ( B) if(a=0)printf(“ d n“, y); else printff“ d n“, x); ( C) if(a!=0)printf(“ d n“, x); else printf(“ d n“, y); ( D) if(a)printf(“ d n“, x); else printf(“ d n“, y); 13 若有以下程序 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(
8、“ d n“, r); 则程序的输出结果是 ( A) 7 ( B) 10 ( C) 6 ( D) 3 14 有以下程序 main()int x=1, y=0, a=0, b=0; switch(x) case1: switch(y) case0: a+; break; case1: b+; break; case2: a+; b+; break; case3: a+; b+; printf(“a= d, b= d n“, a, b); 程序的运行结果是 ( A) a=2, b=2 ( B) a=1, b=1 ( C) a=1, b=0 ( D) a=2, b=1 15 以下选项中与 if(a=
9、1)a=b; else a+;语句功能不同的 switch语句是 ( A) switch(a=1)case0: a=b; break; case1: a+; ( B) switch(a)case1: a=b; break; default: a+; ( C) switch(a)default: a+; break; case1: a=b; ( D) switch(a=1)case1: a=b; break; case0: a+; 16 以下程序段中,与语句: k=a b?(b c?1: 0): 0;功能相同的是 ( A) if(a b)|(b c)k=1; else k=0; ( B) if(
10、a =b)k=0; else if(b =c)k=1; ( C) if(a b)&(b c)k=1; else k=0; ( D) if(a b)k=1; else if(b c)k=1; else k=0; 17 有以下程序 main()int y=10; while(y-); printf(“y= d n“, y); 程序执行后的输出结果是 ( A) y=0 ( B) y=1 ( C) y=-1 ( D) while构成无限循环 18 要求通过 while循环不断读入字符,当读入字 *N时结束循环。若变量已正确定义,以下正确的程序段是 ( A) while(ch=getchar()=N)p
11、rintf(“ c“, ch); ( B) while(ch=getchar()=“N“)printf(“ c“, ch); ( C) while(ch=getchar()!=N)printf(“ c“, ch); ( D) while(ch=getchar()=N)printf(“ c“, ch); 19 关于 do循环体 while(条件表达 式 );以下叙述中正确的是 ( A)循环体的执行次数总是比条件表达式的执行次数多一次 ( B)条件表达式的执行次数总是比循环体的执行次数多一次 ( C)条件表达式的执行次数与循环体的执行次数无关 ( D)条件表达式的执行次数与循环体的执行次数一样 2
12、0 若有以下程序 main()int a=-2, b=0; do+b; while(a+); printf(“ d, d n“, a, b); 则程序的输出结果是 ( A) 0, 2 ( B) 1, 2 ( C) 1, 3 ( D) 2, 3 21 有以下程序段 int i, n; for(i=0; i 8; i+) n=rand() 5; switch(n) case1: case3: printf(“ d n“, n); break; case2: case4: printf(“ d n“, n); continue; case0: exit(0); printf(“ d n“, n);
13、以下关于程序段执行情况的叙述,正确的是 ( A)当产生的随机数 n为 4时结束循环操作 ( B)当产生的随机数 n为 1和 2时不做任何操作 ( C)当产生的随机数 n为 0时结束程序运行 ( D) for循环语句固定执行 8次 22 有以下程序 #include stdio_h main() int i, j; for(i=3; i =1; i-) for(j=1; j =2; j+)printf(“ d“, i+j); printf(“ n“); 程序的运行结果是 ( A) 4 3 2 5 4 3 ( B) 2 3 3 4 4 5 ( C) 4 5 3 4 2 3 ( D) 2 3 3 4
14、 2 3 23 有以下程序 main() int a=1, b=2; for(; a 8; a+) b+=a; a+=2; printf(“ d, d n“, a, b); 程序运行后的输出结果是 ( A) 8, 11 ( B) 10, 14 ( C) 7, 11 ( D) 9, 18 24 以下叙述中正确的是 ( A)对于 “for(表达式 l;表达式 2;表达式 3)循环体 ”首先要计算表达式 2的值,以便决定是否开始循环 ( B)对于 “for(表达式 1;表达式 2;表达式 3)循环体 ”,只在个别情况下才能转换成 while语句 ( C)只要适当地修改代码,就可以将 do-while
15、与 while相互转换 ( D)如果根据算法需要使用无限循环 (即通常 所称的 “死循环 ”),则只能使用 while语句 25 有以下程序 #include stdio h main() int i, j, m=55; for(i=1; i =3: i+) for(j=3; j =ij+)m=m j; printf(“ d n“, m); 程序的运行结果是 ( A) 0 ( B) 1 ( C) 2 ( D) 3 26 以下叙述中正确的是 ( A) continue语句的作用是:使程序的执行流程跳出包含它的所有循环 ( B) break语句只能用在循环体内和 switch语句体内 ( C) 在
16、循环体内使用 break语句和 continue语句的作用相同 ( D) break语句只能用于 switch语句体中 国家二级 C语言( C语言程序设计)机试模拟试卷 6答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 本题考查数组和 scanf函数的使用。程序通过 while循环来给数组元素赋值,赋值语句通过调用 seanf函数来实现。 scanf函数从键盘接收数据,第二个参数是数据保存的地址,因此选项 B)和选项 D)不是地址,错误。选项 A)和选项 C)是地址,但是选项 A)的 i值不会发生变化,循环体内每次都是给同一个元素赋值,不满足要求,选项 C)正确。 【知识模块】 C
17、语言程序设计 2 【正确答案】 C 【试题解析】 对于表达式 a+=a-=a*a相当于 a=a-(a*a),然后计算 a=a+a, a的初值 为 3,则表达式的值为 -12。 【知识模块】 C语言程序设计 3 【正确答案】 A 【试题解析】 本题考查字符串数组和字符串函数。数组 s有 7个数字,然后跟着结束符 “ 0”,因此数组 s的长度为 7。 【知识模块】 C语言程序设计 4 【正确答案】 B 【试题解析】 输出 “ ”,可以在格式控制中用 “ ”表示,将输出一个 “ ”,而没有表示格式符的开始, d不能表示格式符,因此仅输出: a= d, b=d。 【知识模块】 C语言程序设计 5 【正
18、确答案】 C 【试题解 析】 在使用 scanf函数进行输入数据时,输入的数据之间必须用空格、回车符、制表符 (Tab键 )等间隔符隔开,但是空格为合法的字符型数据的输入;而按照格式符 “ d c d c“说明,数值型数据和字符数据输入之间不要加入空格何隔,而字精型数据和数值型数据的输入却可以加入任意的空格,回车和跳格。 【知识模块】 C语言程序设计 6 【正确答案】 C 【试题解析】 输入格式 scanf(格式控制,输入项 1,输入项 2, ) ,其中在scanf。函数的格式字符前可以加入一个正整数指定输入数据所占的宽度,但不可以用实数指定小数位的宽度。输入 double型数据,格式控制必须
19、用 1f。 (或1e)。否则。数据不能正确输入。由于输入是一个字符流, scanf函数从这个字符流中按照格式控制指定的格式解析出相应数据,送到指定地址的变量中。 【知识模块】 C语言程序设计 7 【正确答案】 C 【试题解析】 本题考查 scanf语句。 scanf()函数是格式化输入函数,它从标准输入设备 (键盘 )读取输入的信息。 其调用格式为: scanf(“格式化字符串 “,地址表 ) 格式化字符串包括以下 3类不同的字符。 格式 化说明符:格式化说明符与前面用的 printf()函数中的格式说明符基本相同。 空白字符:空白字符会使 scanf()函数在读操作中略去输入中的一个或多个空
20、白字符。 非空白字符:一个非空白字符会使 scanf()函数在读入时剔除掉与这个非空白字符相同的字符。 由于在 scanf函数中,几个变量之间没有任何问隔,所以输入的时候,也同样不应该有间隔。 【知识模块】 C语言程序设计 8 【正确答案】 C 【试题解析】 程序语句 int a, b, c, *p=&c;定义了三个整型变量 a, b, c,和一个整型指针 变量 p,并且把变量 c的地址赋给 p。 scanf函数的一般形式为“scanf(“格式控制字符串 ”,地址列表 )”,其中的地址列表应当是存放输入数据变量的地址。 【知识模块】 C语言程序设计 9 【正确答案】 D 【试题解析】 本题考查
21、 if语句和 if语句构成的选择。选项 A)表示 k除以 2的余数,如果余数为 1则 if成立,否则不能成立,即 if判断 k是否为奇数;选项 B)是判断 k除以 2的余数是否等于 1,函数和选项 A)相同;选项 C)表示 k除以 2的余数不为 0,和选项 A)一致;选项 D)中, !运算符优先级高于预算符 ,先计算 !k,然后再取余数,并判断余数是否等于 1。 【知识模块】 C语言程序设计 10 【正确答案】 C 【试题解析】 在 if()语句的括号是一个合法的 C语言表达式即可,如果表达式的值为 0,则不执行 if语句,否则执行 if语句,而在选项 C)中,符号不是 C语言的合法运算符,如
22、果要表达 a大于或小于 b+c可用 a!b+c或 (a b+c)|(a b+c)来表达,而不能使用 a b+c。所以它不是一个合法的 C语言表达式。 【知识模块】 C语言程序设计 11 【正确答案】 D 【试题解 析】 嵌套的 if else语句的含义是,在变量 a的值小于变量 b的值,同时,变量 a的值小于变量 c的值时,把变量 a的值赋给变量 k。在变量 a的值小于变量 b的值,同时,变量 a的值大于等于变量 c的值时,把变量 c的值赋给变量k。在变量 a的值大于等于变量 b的值,同时,变量 b的值小于变量 c的值时,把变量 b的值赋给变量 k。在变量 a的值大于等于变量 b的值,同时,变
23、量 b的值大于等于变量 c的值时,把变量 c的值赋给变量 k。 【知识模块】 C语言程序设计 12 【正确答案】 A 【试题解析】 选项 B)、 C)、 D)这三条 语句都是在变量不等于 0的情况下,输出x;等于 0的情况下输出 y,而选项 A)则正好相反。 【知识模块】 C语言程序设计 13 【正确答案】 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分支语句
24、, r+=4, r=10。 【知识模块】 C语言程序设计 14 【正确答案】 D 【试 题解析】 本题考查的是用 switch语句实现多分支选择结构,首先进入第一个 switch(x)判断,进入 case1中进行嵌套判断,如果 switch(y)也成立, a自加 1,遇到 break,退出嵌套,接着执行 case2, a自加为 2, b自加为 1,遇到 break,结束循环,此时 a=2, b=1。 【知识模块】 C语言程序设计 15 【正确答案】 A 【试题解析】 ifelse语句的含义是,如果变量 a的值等于 1,则把变量 b的值赋给变量 a,否则,变量 a的值加 1。在本题的 4个选项中
25、,与其含义不同的是选项A), 表示如果变量 a的值等于 1,则把变量 a的值加 1,否则,把变量 b的值赋给变量 a。 【知识模块】 C语言程序设计 16 【正确答案】 C 【试题解析】 题干中的表达式的功能是当 a b并且 b c时,变量 k的值等于1,其余情况下,变量 k的值都是等于 0。 【知识模块】 C语言程序设计 17 【正确答案】 C 【试题解析】 while循环语句的循环体为空语句,所以每一次循环程序什么都不做。当循环自变量 y=0时,退出循环结束,变量 y执行自减运算,得 -1,所以打印输出变量 y的值为 -1。 【知识模块】 C语言程序设计 18 【正确答案】 C 【试题解析
26、】 while循环的执行过程如下: 计算 while后面圆括号中表达式的值,当值为非 0时,执行步骤 ;当值为 0时,执行步骤 : 执行循环体一次; 转去执行步骤 ; 退出循环。 在选项 C)中,表达式 (ch=getchar()!=N表示输入的字符不等于 N,如果这个条件表达式成立,则执行循环体,打印输出输入的字符。如果这个条件表达式不成立,即输入的字符等于 N,则退出循环。 【知识模块】 C语言程序设计 19 【正确答案 】 D 【试题解析】 dowhile 语句先执行语句,后判断表达式的值。故 dowhile 语句又称 “直到型 ”循环结构。由于是先执行后判断,因此 dowhile 语句
27、的循环语句至少被执行一次,循环条件至少判断一次。 【知识模块】 C语言程序设计 20 【正确答案】 C 【试题解析】 由于 a的初始值等于 -2,所以 while循环语言执行三次结束,第一次 a=-2, b=1,然后判断循环条件 a+非零,执行第二次循环体 a=-1, b=2,判断循环条件非零,执行循环体 a=0, b=3,判断循环条件为 0,此 时变量 a的值等于1。 【知识模块】 C语言程序设计 21 【正确答案】 C 【试题解析】 rand()函数功能为产生一个随机数, rand() 5,则产生 0 4之间的任意随机数,当产生的随机数 n为 0时,执行 “case0: exit(0)”这
28、条语句,结束程序的运行。 【知识模块】 C语言程序设计 22 【正确答案】 C 【试题解析】 本题中的外层行变量 i从 3逐次递减到 1,共输出 3行。内层列变量 j每次从 1递增到 2,每行输出 2个数字。所以当 i=3时,第一行输出i+1=4i+2=5,即 4 5;当 i=2时,第一行输出 i+1=3和 i+2=4,即 3 4;当 i=1时,第一行输出 i+1=2和 i+2=3,即 2 3。 【知识模块】 C语言程序设计 23 【正确答案】 B 【试题解析】 在这段程序中变量 a的初值等于 1,变量 b的初值等于 2。第 1次执行 for循环语句后,变量 a的值等于 3,变量 b的值等于
29、3。第 2次执行 for循环后,变量 a等于 6,变量 b的值等于 7。第 3次执行 for循环后,变量 a等于9,变量 b的值等于 14。第 4次执行 for循环后,变量 a等于 10,这时退出 for循环,此时变量 b的值等于 14。因而程序输出变量 a, b的值分别为 10, 14。 【知识模块】 C语言程序设计 24 【正确答案】 C 【试题解析】 whik和 dowhile 语句和 for语句很容易进行相互转换。对于 for循环的执行过程如下: 计算表达式 1。 计算表达式 2。若其值为非 O,转步骤 ;若其值为 0,转步骤 。 执行一次 for循环体。 计算表达式 3,转向步骤 。
30、 结束循环。任何循环都有可能成为死循环。 【知识模块】 C语言程序设计 25 【正确答案】 B 【试题解析】 在程序中,内层循环 判断条件为 “j =i”,而 j的初值为 3,故当外层循环变量 i的值为 1和 2时,内层循环体都不会被执行。只有当 i和 j都等于 3时循环才会执行一次。因为 m的值为 55对 3求余结果为 1。 【知识模块】 C语言程序设计 26 【正确答案】 B 【试题解析】 只能在循环体内和 switch语句体内使用 break语句。 continue语句的作用是结束本次循环,即跳过本次循环体中 continue语句后面的语句,立刻进行下一次的循环条件判断,可以理解为仅结束本次循环。而 break语句可以使程序流程跳出 switch语句 体,也可用 break语句在循环结构中终止循环体。 【知识模块】 C语言程序设计
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1