1、国家二级 C语言( C语言程序设计)机试模拟试卷 4及答案与解析 一、选择题 1 以下能正确定义且赋初值的语句是 ( A) int n1=n2=10: ( B) char c=32; ( C) float f+1 1: ( D) double x=12 3E2 5; 2 以下选项中,合法的是 ( 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“; 3 有以下程序段
2、int k=0, a=1, b=2, c=3; k: a b?b: a; k=k c?c: k; 执行程序段后, k的值是 ( A) 3 ( B) 2 ( C) 1 ( D) 0 4 有如下程序段: int x=12; double y=3 141593; printf(“ d 8 6f“, x, y); 其输出结果是 ( A) 123 141593 ( B) 12, 3 141593 ( C) 123 1415930 ( D) 123 141593 5 有以下程序段 int n, t=1, s=0; scanf(“ d“, &n); dos=s+; t=t-2; while(t!=n); 为
3、使此程序段不陷入死循环,从键盘输入的数据应该是 ( A)任意正奇数 ( B)任意负偶数 ( C)任意正偶数 ( D)任意负奇数 6 若有定义: int a, b;通过语句 scanf(“ d; d“, &a, &b);能把整数 3赋给变量 a, 5赋给变量 b的输入数据是 ( A) 3 5 ( B) 35 ( C) 3; 5 ( D) 35 7 以 F叙述中正确的是 ( A) 在 scanf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上 ( B)在使用 scanf函数输入整数或实数时,输入数据之间只能用空格来分隔 ( C)在 printf函数中,各个输出项只能是变量 ( D)使用
4、printf函数无法输出百分号 8 若有定义语句: double x, y, *px, *py;执行 px=&x; py=&y;正确的输入语句是 ( A) scanf(“ f f“&x, &y); ( B) scanf(“ f f“, x, y); ( C) scanf(“ 1f le“, px, py); ( D) scanf(“ 1f 1f“, x, y); 9 有以下程序段 char name20; int num; scanf(“name= snum= d“, name, &num); 当执行上述程序段,并从键盘输入: name=Lili num=1001后, name的值为 ( A)
5、 name=Lili ( B) Lili num= ( C) name=Lili num=1001 ( D) Lili 10 有以下程序 main()int a=0, b=0, c=0, d=0; if(a=1)b=1; c=2; else d=3; printf(“ d, d, d, d 11“, a, b, c, d); 程序输出 ( A) 0, 0, 0, 3 ( B) 1, 1, 2,0 ( C)编译有错 ( D) 0, 1, 2, 0 11 设有定义: int a=1, b=2, c=3;以下语句中执行效果与其它三个不同的是 ( A) if(a b)c=a; a=b; b=c; (
6、B) if(a b)c=a, a=b, b=c; ( C) if(a b)c=a, a=b, b: c; ( D) if(a b)c=a; a=b; b=c; 12 有以下程序 #include main()int x; scanf(“ d“, &x); if(x =3); else if(x!=10)printf(“ d n“, x); 程序运行时,输入的值在哪个范围才会有输出结果 ( A)不等于 10的整数 ( B)大于 3或等于 10的整数 ( C)小于 3的整数 ( D)大于 3且不等 10的整数 13 若有以下程序 #include stdio h main()int a=1, b=
7、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 14 以下选项中与 if(a=1)a=b; else a+;语句功能不同的 switch语句是 ( A) switch(a) case1: a=b; break; default: a+: ( B) switch(a=1) case0: a=b; break; case1: a+; ( C) switc
8、h(a) default: a+; break; case1: a=b; ( D) switch(a=1) case1: a=b; break; case0: a+; 15 下列叙述中正确的是 ( A)在 switch语句中必须使用 default ( B) break语句必须与 switch语句中的 case配对使用 ( C)在 switch语句中,不一定使用 break语句 ( D) break语句只能用于 switch语句 16 若以下选项中的变量 a, b, y均己正确定义并赋值,则语法正确的 switch语句是 ( A) switch(a*a+b*b)default: break;
9、case3: y=a+b; break; case2: y=a-b;break; ( B) switch(a+b)case1: case3: y=a+b; break; case0: case4: y=a-b; ( C) switch(a+9)case a: y=a-b: case b: y=a+b: ( D) switch a*bcase10: y=a+b; default: y=a-b; 17 有以下程序 #include stdio h main()int y=10; while(y-); printf(“y= d n“, y); 程序执行后的输出结果是 ( A) y=0 ( B) y=
10、-1 ( C) y=1 ( D) while构成无限循环 18 有以下程序 #include main()int a=7; while(a-); printf(“ d n“, a); 程序运行后的输出结果是 ( A) 0 ( B) 1 ( C) -1 ( D) 7 19 由以下 while构成的循环,循环体执行的次数是 int k=0; while(k=1)k+; ( A)一次也不执行 ( B)执行一次 ( C)无限次 ( D)有语法错,不能执行 20 有以下程序 main() int i=5; do if(i 3=1) if(i 5=2)printf(“* d“, i); break; i+
11、; while(i!=0); printf(“ n“), 程序的运行结果是 ( A) *3*5 ( B) *5 ( C) *7 ( D) *2*6 21 若 i和 k都是 int类型变量,有以下 for语句 for(i=0, k=-1; k=1; k+)printf(“* n“); 下面关于语句执行情况的叙述中正确的是 ( A)循环 体执行两次 ( B)循环体执行一次 ( C)循环体一次也不能执行 ( D)构成无限循环 22 有以下程序 #include stdio h main() int i, j, m=1; for(i=1; i 3; i+) for(j=3j 0; j-) if(i*j
12、 3)break; m*=i*j; printf(“m= d n“, m); 程序运行后的输出结果是 ( A) m=2 ( B) m=4 ( C) m=5 ( D) m=6 23 有以下程序 main() int i; for(i=1; i =40; i+) if(i+ 5=0) if(+i 8=0)printf(“ d“, i); printf(“ n“); 执行后的输出结果是 ( A) 24 ( B) 5 ( C) 32 ( D) 40 24 若有以下程序 main()int a=6, b=0, c=0; for(; a; ) b+=a: a-=+C; printf(“ d, d, d n
13、“, a, b, c); 则程序的输出结果是 ( A) 1, 14, 3 ( B) 0, 18, 3 ( C) 0, 14, 3 ( D) 0, 14, 6 25 以下程序段中的变量已正确定义 for(i=0; i 4; i+, i+) for(k=1; k 3; k+); printf(“*“); 程序段的输出结果是 ( A) * ( B) * ( C) * ( D) * 26 有以下程序 main() int i, j, x=0; for(i=0; i 2; i+) x+; for(j=0; j =3; j+) if(j 2)continue; x+: x+; printf(“x= d n
14、“, x); 程序执行后的输出结果是 ( A) x=4 ( B) x=6 ( C) x=12 ( D) x=8 27 以下叙述中正确的是 ( A)当 break出现在循环体中的 switch语句体内时,其作用是跳出该 switch语句体,并中止循环体的执行 ( B)只能在循环体内和 switch语句体内使用 break语句 ( C) continue语句的作用是:在执行完本次循环体中剩余语句后,中止循环 ( D)在 while语句和 do-while语句中无法使用 continue语句 国家二级 C语言( C语言程序设计)机试模拟试卷 4答案与解析 一、选择题 1 【正确答案】 B 【试题解析
15、】 本题主要考查变量的定义和赋值, C语言中变量的定义形式为:类型说明符变量名 =初始值:选项 A)中。 n1和 n2只能单独赋初值;选项 B)正确,定义了一个字符变量 c,初值为 32;选项 C错误,初值设置自身不能参与运算;选项 D)中字母 E后面的指数必须是整数。 【知识模块】 C语言程序设计 2 【正确答案】 C 【试题解析】 本题考查字符数组。选项 A)定义了一个字符数组 name,接下来直接给 name赋值字符串是错误的;选项 B)定义了两个字符串数组 str1和 str2 str1和 str2表示两个字符串的首地址,直接把 str1赋值给 str2错误;选项 C)是正确的;选项
16、D)定义了一个字符变量 str4,给字符变量赋值字符串是错误的。 【知识模块】 C语言程序设计 3 【正确答案】 B 【试题解析】 本题主要考查条件表达式。 k=a b?b: a中 a b为真,因此 k的值为 b,即 k=2。 k=k c?c: k中 k c为假, k的值为 2, 【知识模块】 C语言程序设计 4 【正确答案】 D 【试题解析】 本题考查 printf语句。 printf()函数是格式化输出函数,一股用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。 printf()函数的调用格式为: printf“格式化字符串 “, (参量表 )。 其中, “格式化字符串
17、”包括两部分内容:一部分是正常字符,这些字符将按原样输出:另一部分是格式化规定字符,以 “ ”开始,后跟一个或几个规定字符,用来确定输出内容格式。 格式化字符串的格式是: 标志 输出最小宽度 精度 长度 格式字符 标志:标志字符为 -、 +、空格等,其意义如下所示: -:结果左对齐,右边填空格; +:输出符号 (正号或负号 ); 空格:输出值为正时冠以空格,为负时冠以负号。 输出最小宽度:用十进制整数来表示输出的最少位数 (包括小数点在内至少要输出这么多位 )。 若实际位数多于定义的宽度,则按实际位数输出; 若实际位数少于定义的宽度,则右对齐,左边留空; 有负号,左对齐,右边留空: 表示宽度的
18、数字以 0开始,则右对齐,左边留空。 精度:精度格式符以 “ ”开头,后跟十进制整数。它的意义是:如果输出数字,则表示小数的位数,若实际位数大于所定义的精度数,则四舍五入,若不足则补 0;如果输出的是字符,则表示输出字符的个数,若实际位数大于所定义的 精度数,则截去超过的部分; 长度:长度格式符为 h和 1两种。 h表示按短整型量输出, 1表示按长整型量输出。 【知识模块】 C语言程序设计 5 【正确答案】 D 【试题解析】 本题考查基本输入和循环。程序代码的功能是通过 scanf给变量 n赋值,在 dowhile 循环中, s变量自增, t变量每次减 2, t的初值为 1,循环执行执行一次后
19、 t的值变成 -1,然后是 -3、 -5 ,直到 t的值和 n的值相同循环结束。从 t的值的变化可知, t是一个变化的负奇数,因此输入的 n如果是负奇数,则循环能退出,否则是死循环。 【知识模块】 C语言程序设计 6 【正确答案】 C 【试题解析】 在采用 scant这个函数输入数据时,要严格遵守其输入的规则定义。本题此函数定义的规则是,在两个整数之间加分号输入。 【知识模块】 C语言程序设计 7 【正确答案】 A 【试题解析】 scanf函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,因此若想在屏幕上输出提示信息,应该首先使用 printf函数输出,选项 A
20、)正确;在使用 scanf。函数输入整数或实数时,输入数据之问可以用空格、跳 格、回车来分隔,选项 B)错误; printf输出项不但可以为变量,还可以表达式或者常量,选项 C)错误:如果要输出 “ ”,可以在格式控制中用 “ ”表示。将输出一个 “ ”,选项 D)错误。 【知识模块】 C语言程序设计 8 【正确答案】 C 【试题解析】 本题考查 scanf语句。 scanf()函数的一般格式为: scanf(“格式字符串 “,输入项首地址表 ),对于。 aouble类型数据,输入时候要加上 1修饰,否则会产生错误的输入信息,同时输入项必须是地址,可以使保存变量地址的指针变量。 【知识模 块】
21、 C语言程序设计 9 【正确答案】 D 【试题解析】 在题目中以字符串的形式给字符数组赋值,所以字符数组 name的值为 Lili。 【知识模块】 C语言程序设计 10 【正确答案】 C 【试题解析】 if语句的格式为: if(表达式 ) 语句 1 else 语句 2 if和 else是 C语言的关键字。 “语句 1”称为 if子句, “语句 2”称为 else子句,这些子句只允许为一条语句若需要多条语句时,则应该使用复合语句。因此题目“if(a=1)b=1; c=2; else d=3: ”, if分支有 两条语句,没构成复合语句。 【知识模块】 C语言程序设计 11 【正确答案】 A 【试
22、题解析】 在 C语言中,用分号表示一条语句的结柬;用 f把几条语句放在一块表示一个语句块,其整体表示一个功能。因而在题目给出的四个选项中,选项 B)、 C)、 D)表示的功能相同,而选项 A)表示的是一条 if语句,两条赋值语句。 【知识模块】 C语言程序设计 12 【正确答案】 D 【试题解析】 题目中,虽然 else和第二个 if不在同一行上,但等价于在同一行上,因此,程序的意思是当 x大于 3且不等于 10时打印出来。 【知识模块】 C语言程序设计 13 【正确答案】 C 【试题解析】 程序代码中有四条并列的 if语句,第一条 if表达式 a!=1不成立,执行 else分支, r=1;第
23、二条 if表达式 b=2成立,执行 r+=2, r=3;第三条 if语句 c!=3不成立,执行 else分支,分支为空语句:第四条 if分支 d=4成立,执行该 if分支语句, r+=4, r=7。 【知识模块】 C语言程序设计 14 【正确答案】 B 【试题解析】 本题主要考查 if和 switch结构。 “if(a=1)a=b; elsea+; ”代码段的功能是如果 a等于则把 b的值赋值给 a,否则 a+。选项 A)使用 switch对 a进行判断,如果是 1则 a=b,跳出 switch,如果是其他值则 a+;选项 B)对 a=1的结果进行 switch判断,如果为 0表示 a不等于
24、1则 a=b,和题目要求不符合;选项 C)和选项 A)一样;选项 D)和选项 Case条件相反,满足题目要求。 【知识模块】 C语言程序设计 15 【正确答案】 C 【试题解析】 break为 C语言关键字,又称间断语句。 break语句的功能是跳出正在执行的条件语句或 循环语句。它可以出现在 switch语句中,也可以出现在循环语句中。 defauh是关键字,起标号的作用,代表所有 case标号之外的那些标号。 default标号可以出现在语句体中任何标号位置上。在 switch语句体中也可以没有 default标号。 【知识模块】 C语言程序设计 16 【正确答案】 A 【试题解析】 使用
25、 switch语句直接处理多个分支,其一般形式为: switch(表达式 ) case常量表达式 1: 语句 1: break; case常量表达式 n: 语句 n: break; defauh: 语句 n+1; break; switch语句的执行流程是:首先计算 switch后面圆括号中表达式的值,然后用此值依次与各个 case的常量表达式比较,若圆括号中表达式的值与某个 case后面的常量表达式的值相等,就执行此 case后面的语句,执行后遇 break语句就退出switch语句;若圆括号中表达式的值与所有 case后面的常量表达式都不等,则执行 default后面的语句 n+1,然后退
26、出 switch语句。 对于选项 B), case语句和常量之问没有空格,而选项 C)中的 case后面为变量选项 D)中 switch后面没给出圆括号。 【知识模块】 C语言程序设计 17 【正确答案】 B 【试题解析】 在 while循环中每次变量 y的值减 1,直到其值等于 0时退出循环,这时 y的再减 1变为 -1。 【知识模块】 C语言程序设计 18 【正确答案】 C 【试题解析】 在 while语句中,先判断 while后面的表达式是否为 0,如果为 0,则退出循环,否则执行循环体。在本题中当变量 a的值经过几次循环后,其值等于 0时,退出 while循环语句,变量 a再执行自减运
27、算,所以其值等于 -1。 【知识 模块】 C语言程序设计 19 【正确答案】 C 【试题解析】 循环条件表达式为赋值表达式 k=1,因此循环执行无限次。 【知识模块】 C语言程序设计 20 【正确答案】 C 【试题解析】 由于循环变量 i的初值等于 5,所以第一、二次进入 dowhile 循环语句时,条件语句 if(i 3=1), if(i 5=2)printf(“* d”, i); break;不执行,只执行 i+语句。当 i=7时,满足条件语句 if(i 3=1), if(i5=2)printf(“* d, “i); break; ,所以输出 *7,结束循环。 【知识模块】 C语言程序设计
28、 21 【正确答案】 D 【试题解析】 本题考查 for循环。本题的 for循环初始条件为 i=0, k=-1;循环结束条件为 k=1永远为真 (k不为 0),因此循环不能结束。 【知识模块】 C语言程序设计 22 【正确答案】 D 【试题解析】 这道题考查了 for循环的嵌套应用。对于外层 for循环来说,变量 i从 l增到 2,循环执行 2次。当变量 i的值等于 1时,对于内层 for循环来说,变量 j从 3减到 1,求得变量 m的值等于 6。当变 量 i的值等于 2时,第一遍执行内层 for循环,变量 j的值等于 3,那么 i*j的值等于 6,其值大于 3这时执行break语句,退出内层
29、 for循环的执行。所以程序输出变量 m的值为 6。 【知识模块】 C语言程序设计 23 【正确答案】 C 【试题解析】 在 for循环体中,先判断自变量 i能否被 5整除,然后自加两次,最后判断 i能否被 8整除。当 for循环执行到第 30次时, i的值为 30能被 5整除,然后 i经过两次自加 1运算,值变为 32,能被 8整除,故执行 “printf(“ d“,i); ”语句,即输出 32。 【知识模块】 C语言程序设计 24 【正确答案】 C 【试题解析】 循环体执行三次, a初值 6,第一次执行循环体, b=6, a=5。继续执行循环体, b=11, a=3,第三次执行循环体, b
30、=14, a=0,循环退出。 【知识模块】 C语言程序设计 25 【正确答案】 D 【试题解析】 本题考查循环语句,题中第二个 (内层 )for循环之后有一个分号,意思是每次循环中的操作为空,不执行任何操作。再循环结束后执行 printf语句,即只打出一个 *。 【知识模块】 C语言程序设计 26 【 正确答案】 D 【试题解析】 在第 1次外层 for循环中,首先 x+得到 x=1。进入到内层 for循环,只有循环变量 j的值为奇数时,变量 x的值才自加 1,所以在内层 for循环执行过程中,变量 x的值自加两次,当退出内层 fof循环时, x=3,然后执行 x+,得到 x=4。在进入执行第
31、 2次外层 fbr循环中,首先 xH得到 x=5。进入到内层 for循环,只有循环变量 j的值为奇数时,变量 x的值才自加 1,所以在内层 for循环执行过程中,变量 x的值自加 1两次,当退出内层 for循环时, x=7,然后执行x+,得到 x=8,所以打印 输出变量 x的值为 8。 【知识模块】 C语言程序设计 27 【正确答案】 B 【试题解析】 break语句可以使程序流程跳出 switch语句体,也可用 brealk语句在循环结构中终止循环体从而提前结束循环,而当 break出现在循环体中的switch语句体内时,其作用只是跳出该 switch语句体,并不能中止循环体的执行,若想强行终止循环体的执行,可以在循环体中,但并不在 switch语句中设置break语句,满足某种条件则跳出循环体。 continue语句的作用是结束本次循环,在 while和 do-while循环中, confinue语句使得流程直接跳到循环控制条件的测试部分,然后决定循环是否继续进行。 【知识模块】 C语言程序设计