C语言基础练习题(1-3) 下载本文

第一部分 C语言基础知识 ·6·

A.string1=programming└┘└┘└┘└┘* B.string1=└┘└┘└┘└┘programming* string2=boy* string2=boy└┘└┘*string3=gi* string3=gi*

C.string1=programming└┘└┘└┘└┘* D.string1=└┘└┘└┘└┘programming* string2=└┘└┘boy*string3=girl* string2=boy└┘└┘*string3=girl*

53.根据题目中已给出的数据的输入和输出形式,程序中输入输出语句的正确内容是( )。

#include ”stdio.h” main() { int a; float b; 输入语句 输出语句 }

输入形式:1└┘2.3<回车> (注:└┘代表空格) 输出形式:a+b=3.300

A.scanf(”%d%f”,&a,&b); B.scanf(”%d%3.1f”,&a,&b); printf(”\\na+b=%5.3f”,a+b); printf(”\\na+b=%f”,a+b); C.scanf(”%d,%f”,&a,&b); D.scanf(”%d%f”,&a,&b); printf(”\\na+b=%5.3f”,a+b) printf(”\\na+b=%f”,a+b);

54.阅读以下程序,当输入数据的形式为:12,34,正确的输出结果为( )。

#include ”stdio.h” main() { int a,b;

scanf(”%d%d”, &a,&b); printf(”a+b=%d\\n”,a+b); }

A.a+b=46 B.有语法错误 C.a+b=12 D.不确定值 55.若有定义:int x,y; char s1,s2,s3; 并有以下输出数据:(注:└┘代表空格)

1└┘2<回车>

U└┘V└┘W<回车>

则能给x赋给整数1,给y赋给整数2,给s1赋给字符U,给s2赋给字符V,给s3赋给字符W的正确程序段是( )。

A.scanf(”x=%dy=%d”,&x,&y); s1=getchar();s2=getchar();s3=getchar(); B.scanf(”%d%d”,&x,&y); s1=getchar();s2=getchar();s3=getchar(); C.scanf(”%d%d%c%c%c”,&x,&y,&s1,&s2,&s3);

D.scanf(”%d%d%c%c%c%c%c%c”,&x,&y,&s1,&s1,&s2,&s2,&s3,&s3);

1.2 填空题

1. C语言的符号集包括________、________、________。

2. 结构化设计中的三种基本结构是________、_______、________。

3. C语言源程序文件的后缀是________,经过编译后生成文件的后缀是________,经过链

接后生成文件的后缀是________。

4. C语言的关键字都用________{大写或小写}。

第一部分 C语言基础知识 ·7·

5. 6. 7. 8.

一个函数由两部分组成,它们是_______、_______。 函数体一般包括_______、_______。

C语言是通过_______来进行输入和输出的。 以下程序的执行结果________。 #include ”stdio.h” main()

{ short i=-1,j=1;

printf(”dec:%d,oct:%o,hex:%x,unsigned:%u\\n”,i,i,i,i); printf(”dec:%d,oct:%o,hex:%x,unsigned:%u\\n”,j,j,j,j); }

9. 以下程序的执行结果是________。

#include ”stdio.h” main()

{ char s=’b’;

printf(”dec:%d,oct:%o,hex:%x,ASCII:%c\\n”, s,s,s,s); }

10.以下程序的执行结果是________。(注:└┘代表空格)

#include ”stdio.h” main()

{ float pi=3.1415927;

printf(”%f,%.4f,%4.3f,.3f”,pi,pi,pi,pi); printf(”\\n%e,%.4e,%4.3e,.3e”,pi,pi,pi,pi); }

11.以下程序的执行结果是:________。

#include ”stdio.h” main()

{ char c=’c’+5;

printf(”c=%c\\n”,c); }

12.以下程序输入1└┘2└┘3后的执行结果是________。(注:└┘代表空格)

#include ”stdio.h” main() { int i,j; char k;

scanf(”%d%c%d”,&i,&k,&j); printf(”i=%d,k=%c,j=%d\\n”,i,k,j); }

13.有以下程序,若输入9876543210后的执行结果是________;若输入为:98└┘76└┘543210

后的执行结果是________;若输入为:987654└┘3210后的执行结果为:________。(注:└┘代表空格)

#include ”stdio.h” main()

{ int x1,x2; char y1,y2;

scanf(”-=<%c”,&x1,&x2,&y1,&y2); printf(”x1=%d,x2=%d,y1=%c,y2=%c\\n”,x,y); }

14.若x和y均为int型变量,则以下语句的功能是________。

第一部分 C语言基础知识 ·8·

x+=y; y=x-y; x-=y; 15.有一输入函数scanf(”%d”,k);则不能使float类型变量k得到正确数值的原因是:________。 16.有如下程序段,输入数据:12345ffl678后,u的值是 【1】 ,v的值是 【2】 。

int u; float v;

scanf(“=%f”,&u,&v);

1.3 答案及部分解析

一.选择题答案 1.B 2.B 3.A 4.B 5.B 6.D 7.B 8.D 9.B 10.C 11.A 12.C 13.C 14.B 15.C 16.A 17.A 18.C 19.C 20.A 21.C 22.C 23.A 24.B 25.A 26.D 27.A 28.A 29.D 30.B 31.C 32.C 33.B 34.B 35.C 36.C 37.C 38.D 39.D 40.C 41.D 42.A 43.B 44.D 45.D 46.A 47.B 48.D 49.B 50.A 51.D 52.D 53.A 54.D 55.D

14.解析:C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须

为字母或下划线。而且不能与C语言规定的关键字同名。关键字如:auto, break, case, char, const, continue, default, do, double, else, entry, extern, for, float, goto, if, int, int, long, register, return, short, signed, sizeof, static, struct, unsigned, while, switch, typedef, void, volatile, unior。这些关键字先不必硬背下来,随着后续的学习,你将发现它们都是一些数据的类型、语句等,自然会随着学习的深入,而记下来。

15.解析:用指数形式表示一个实型常数时,E或e之前必须有数字,且E后面指数必须为

整数。

16.解析:’\\101’为转义字符,相对应一个ASCII码字符。(101)8=(65)10=A.

17.解析:转义字符的特征是以“\\”开头,其后跟一些字符,如\\n, \\t, \\’, \\\\, \\}, \\‖, \\b, \\f等代表

一些特殊的含义,而\\后如跟数字,可以为八进制或者十六进制,将其转换为对应的ASCII码值,就可以得出对应的字符。“\\”后跟八进制的写法:\\0nn, 或者\\nn, 表示“\\0”或者“\\”后只能跟1或3位0——7之间的数字;“\\”后跟十六进制的写法:\\xnn,或者\\nn, 表示“\\x”或者“\\”后只能跟1或2位0——9及a——f(A——F)之间的字符。选项B的错误在于8不是八进制;而选项C的错误在于没有“\\”;选项D的错误在于超长(多了一位)。

21.解析:B的错误在于赋值语句的左侧只能为一个简单变量,如:n=3*(n=18); C的错误在

于%运算符只能适用于整型数据,D的错误在于作类型转换时,应将类型加上括号,即为:y=(float) m

31.解析:逗号表达式的最终结果为最右端的表达式(即x+y)的值,其运算顺序是从左自

右的。第三个表达式y++,其隐含有两步操作:先取y的原值,再执行y=y+1运算;而本题中,虽然没有将y赋给某个变量(取其原值),但还是一定会执行加运算的。因而,经过第三个表达式,y已经自加为6,故x+y的值为8,相对应得表

第一部分 C语言基础知识 ·9·

达式最终结果为8。若本题改为:(x=2, y=5, z=y++, x+z),则其结果应为7。 二.填空题答案

1. 答案:英文字母、数字、一些有特定含义的标点符号 2. 答案:顺序结构、选择结构、循环结构 3. 答案:C,OBJ,EXE 4. 答案:小写

5. 答案:函数说明部分和函数体 6. 答案:变量定义部分和执行部分 7. 答案:输入和输出函数

8. 答案:dec:-1,oct:177777,hex:ffff,unsigned:65535

dec:1,oct:1,hex:1,unsigned:1

9. 答案:dec:98,oct:142,hex:62,ASCII:b

10.答案:3.141593,3.1416,3.142, └┘└┘└┘└┘└┘3.142

3.141593e+00,3.1416e+00,3.142e+00,└┘└┘3.142e+00

(注:由于c编译系统不同,我们上机使用的机器,其第二个printf语句实际结果为:3.14159e+00,3.142e+00,3.14e+00,└┘└┘3.14e+00,即:小数点后取5位。)

11.答案:c=h

12.答案:i=1,k=└┘,j=2

13.答案:第一种情况的执行结果:x1=98,x2=765,y1=4,y2=1

第二种情况的执行结果:x1=98,x2=76,y1=└┘,y2=3

第三种情况的执行结果:x1=98,x2=765,y1=4,y2=2

14.答案:交换x和y的值 15.答案:(1)格式符应为:%f;(2)变量前边未加取地址符&, 即应为scanf(”%f”,&k); 16.答案:【1】123 【2】45.000000

第二部分 选择结构 ·10·

第二部分 选择结构

2.1 选择题

1. 已有定义:int x=3, y=4, z=5; 则表达式!(x+y)+z-1 && y+z/2的值是()。

A.6 B.0 C.2 D.1

2. 设a=5,b=6,c=7,d=8,m=2,n=2, 则执行(m=a>b) && (n=c>d)后n的值为()。

A.1 B.2 C.3 D.4

3. 设x、y和z都是int类型变量,且x=3,y=4,z=5, 则下面的表达式中,值为0的表达式为

()。

A.’x’ && ’y’ B.x<=y

C.x||y+z && y-z D.!((x

4.为了避免嵌套的if-else语句的二义性,C语言规定else总是与()组成配对关系。

A.缩排位置相同的if B.在其之前未配对的if

C.在其之前未配对的最近的if D.同一行上的if

5. 逻辑运算符两侧运算对象的数据类型()。 A.只能是0或1

B.只能是0或非0正数

C.只能是整型或字符型数据 D.可以是任何类型的数据

6. 以下关于运算符优先顺序的描述中正确的是()。

A.关系运算符<算术运算符<赋值运算符<逻辑与运算符 B.逻辑与运算符<关系运算符<算术运算符<赋值运算符 C.赋值运算符<逻辑与运算符<关系运算符<算术运算符 D.算术运算符<关系运算符<赋值运算符<逻辑与运算符 7. 下列运算符中优先级最高的是()。

A.< B.&& C.+ D.!= 8. 选择出合法的if语句(设int x,a,b,c;)()。 A.if(a=b) c++; B.if(a=b) c++; D.if(a=>b) c++;

9. 能正确表示“当x的取值在[-58,-40]和[40,58]范围内为真,否则为假”的表达式是()。 A.(x>= -58) && (x<= -40) && (x>=40) && (x<=58) B.(x>= -58) || (x<= -40) || (x>=40) || (x<=58)

C.(x>= -58) && (x<= -40) || (x>=40) && (x<=58) D.(x>= -58) | |(x<= -40) && (x>=40) || (x<=58)

10.判断char型变量s是否为小写字母的正确表达式是()。

A.’a’ <= s<=’z’ B.(s>=’a’) & (s<=’z’)