C语言程序设计综合练习题集Word文件下载.docx
《C语言程序设计综合练习题集Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计综合练习题集Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。
完成一定的控制功能,C语言有9种控制语句,分别是if-else、while、continue、
switch、return、for、do-while、break、goto;
表达式语句:
由各类表达式构成,后面加上一个分号,就可以单独作为一条语句出现在一行,多数情况下含赋值运算符。
复合语句:
由一对大括号将一组语句序列括起来形成一个程序段,经常出现在选择或循环语句中。
空语句:
只有一个分号,表示什么也不做。
函数调用语句:
由函数名、圆括号内加实参表和分号组成。
本题中D选项为三条语句,一条控制语句,链条表达式语句。
正确答案为D选项。
10.能将高级语言编写的源程序转换为目标程序的软件是。
A)汇编程序B)编辑程序C)解释程序D)编译程序
11.以下选项中合法的实型常数是。
A)5E2.0B)E-3C).2E0D)1.3E
【解析】以指数形式表示实数时,字母e或E之前必须有数字,且e后面指数必须为整数。
12.依据C语言的语法规则,下列合法标识符是A
A)ElseB)elseC)user$2D)5_examp
【解析】标识符的定义有明确的规则:
(1)标识符只能由字母、数字、下划线三者构成;
(2)
标识符的首字符必须是字母或者下划线;
(3)标识符命名对字母大小写敏感;
(4)标识符定
义不能和C语言关键字(KeyWords)相同。
C语言中标识符对大小写敏感,sum和SUM是不同的标识符。
13.以下选项中合法的用户标识是。
A)longB)_2TestC)3DmaxD)A.dat
【解析】选项中A为保留字;
选项C没有以字母或者“_”开头;
选项D中不能有“.”
14.在C语言中,字符型数据在内存中的存储形式是。
A)原码B)补码C)反码D)ASCII码
【解析】数据在内存中是以二进制形式存放的。
数值是以补码表示的。
c的char数据属于基本
类型,在内存中字符的存储实际上是把字符相对应的
ASCII代码放到存储单元中的。
而这些
ASCII代码值在计算机中也是以二进制形式存放的。
这个与整型的存储很相似。
因此这两类之
间的转换也比较方便!
整型:
一个正数的补码和其原码的形式相同。
而负数的补码方式是将其
绝对值的二进制形式“按位求反再加1”实型:
在内存中占4个字节,是按照指数形式存储的,
实型数据分为小数部分和指数部分,分别存放!
计算机用二进制表示小数部分,用2的幕次来
表示指数部分!
15.以下非法的赋值语句是。
A)n=(i=2,++i);
B)j++;
D)x=j>
0;
16.已定义c为字符型变量,则下列正确的赋值语句是。
A)c='
66:
B)c="
66"
;
C)c="
B"
D)c=66;
17.已知小写字母的ASCII码为97,对于inta=99,b='
b:
printf(%c,%d”,a,b);
的结果
是。
A)99,bB)c,98C)99,98D)c,b
【解析】字符类型变量用char来定义,特别要注意字符数据在内存中的存储方式:
字符数据在
内存中是用字符对应的ASCII码存储,其存储形式实质是采用整数形式,由于ASCII码集合中
有256个字符,因此用0~255这个范围内的256个整数分别与每个字符对应。
因此字符型数据和整型数据在一定范围(0~255)内,形式上可以相互引用。
表现在这两种类型的变量能够以对方形式常量来赋值,以对方的形式来输出,还可以同时出现在算数表达式中参与运算
intn='
a:
/*相当于n=97*/
printf("
c=%d,c=%c"
c,c);
/*输出:
n=65,n=A*/
虽然字符型数据和整型数据在一定范围内可以通用,但其外在表现形式并不影响各自的数据类型,上例中n本质上还是整型变量,c本质上还是字符型变量。
18.若变量a和i已正确定义,且i已正确赋值,合法的语句是。
B
A)a=1B)++i;
C)a=a++=5D)a=int(i)
【解析】C语言的语句必须以分号结束,选项A是错误的。
赋值表达式等号的左边只能是变量,而不能是表达式,选项C中含有a++=5,是错误的。
选项D中的强制转换类型必须用圆括号将int括起来,也是不正确的。
19.假定x和y为double型,则表达式x=2,y=x+3/2的值是。
A)3.500000B)3C)2.000000D)3.000000
【解析】算出来结果为3,排除A和C选项;
又因为是double型,所以D选项为正确答案。
20.以下程序的输出结果是。
main()
{
inta=5,b=4,c=6,d;
printf(“%d\n”,d=a>
b?
(a>
c?
a:
c):
(b));
}
1:
表达式2)可以用来代
A)5B)4C)6D)不确定
【解析】本题考察条件表达式。
简单的条件表达式(条件表达式?
表达式
替if语句进行赋值。
详见教材102页。
21.设a=3,b=4,c=-5,则逻辑表达式:
a||b+c&
b==c的值是。
A)1B)0C)非0D)语法错
【解析】运算符优先级由高到底为算术运算符---关系运算符---&
和|卜--赋值运算符。
其中&
和
||的结合方向为从左到右
22.表示关系x<
=y<
=z的c语言表达式为。
A)(x<
=y)&
(y<
=z)B)(x<
=y)AND(y<
=z)
C)x<
=zD)(x<
(y<
【解析】C语言中没有关键字AND,逻辑与运算符是&
不是AND,因此选项B是错误的;
而&
是C语言的位与运算符,因此选项D是错误的;
选项C是数学表达式,也是错误的。
23.设有变量intx=0,y=1,z=1,则运行表达式:
x=y++>
z--后,x,y,z的值分别是。
A)1,1,1B)1,2,0C)0,1,1D)0,2,0
【解析】注:
前缀是先增值后引用,后缀是先引用再增值
24.已知inta=4,b=5;
执行表达式a=a>
b后,变量a的值为。
A)0B)1C)4D)5
”算术运算符>
关系运算符>
逻辑
”逻辑或“|”赋值运算符>
逗号运算符。
由于关系运算符优先级别高于赋值运算符,所以先执行a>
b,得到结果为假,即0,所以变量a的值为0。
25.能正确表示逻辑关系“a>
10或a<
0”的C语言表达式是。
26.
设有定义inta=3,b=4,c=5;
则以下表达式中,值为0的表达式是
27.
A)k=n,n=n+1
B)n=n+1,k=n
C)k=++n
D)k+=n+1
以下合法的赋值语句是
【解析】在本题中,
k=n++为后辍运算,根据其运算规则,应先把n的值赋给k,然后n的值
再加上1,选项A的表达式与本题中的表达式等价。
29.若有定义:
"
inta=8,b=5,c;
”,执行语句“c=a/b+0.4”后,c的值为
A)1.4B)1C)2.0D)2
【解析】由于a,b,c都是整型变量,所以每一步计算都要取整,所以选B。
不同类型数据间是可以进行转换和运算的。
整型、字符型、实型数据可以混合运算,如果表达式内的运算量的类型不同,不同类型的
数据要先转换成同一类型,在进行运算。
转换方向由低到高为:
char/short、int、unsigned、Iong、
但变量本身的类型并未发生变化。
float、double。
当然也可以使用强制类型转换符来转变类型,
例如:
(double)n,(int)(a+b)。
30.设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+b)的值是
A)7B)8C)9D)10
31.已定义c为字符型变量,则下列语句中正确的是。
32.已知charch='
A:
且表达式ch=(ch>
='
A'
&
ch<
Z'
)?
(ch+32):
ch的值是。
A)AB)aC)ZD)出错
【解析】考察条件表达式。
见教材102页。
首先执行(ch>
),为1。
接着执行(ch+32)。
因此结果是小写字母a。
33.设有如下程序段:
intx=2,y=3;
%d\n"
(x,y));
则以下叙述中正确的是。
A)输出语句中格式说明符的个数少于输出项的个数,不能正确输出
B)运行时产生出错信息
C)输出值为2
D)输出值为3
34.
)*****
对于循环for(k=16;
k>
k-=3)putchar(‘*'
);
输出是
B)
******C)*******D)无限循环
输出函数)的作用是向终端输出一个字符。
用
putchar()函数可以输出能在屏幕上显示的字
符,也可以输出控制字符,如
putchar('
\n'
)的作用是输出一个换行符,使输出的当前位置
移到下一行的开头。
35.已知inti=1;
执行语句while(i++<
4)后,变量i的值为。
36.
【解析】此数组共
、、4
3列。
应该是
7
卫
2
5
8
3〔
6
9
【解析】i++是先进行其他运算,运算终了后再将i加1
所以循环中过程如下:
i=0
判断i<
4:
成立
i=i+1,于是i=1
继续循环:
i=i+1,于是i=2
i=i+1,于是i=3
i=i+1,于是i=4
不成立
i=i+1,于是i=5
跳出循环,程序结束
,则定义数组时对第一维的长度
在C语言中如果对全部元素都赋初值(即提供全部初始数据)
可以不指定,但第二维的长度不能省。
系统会根据总个数和第二维的长度算出第一维的长度。
本题中一共有10个元素,每行3列,显然可以确定行数为4.见教材138.
37.判断字符串的长度,应该使用的函数是。
A)strcatB)strcmpC)strcpyD)strlen
【解析】
strlen(string)
---字符串长度
strcpy(字符数组1,字符串2)
---STRingCoPY(字符串复制)的简写。
它是“字符串复制函数”,作用是将字符串2复制到
字符数组1中去。
见教材147页。
strcat(字符数组1,字符数组2)
---(字符串连接)其作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,
结果放在字符数组1中,函数调用后得到一个函数值---字符数组1的地址。
strcmp(string,string)
---比较2个字符串,0为相同,>
0前1个大,<
0后1个大
38.初始化多维数组的语句中,可以默认的是。
A)最后一个下标界B)第1个下标界
C)第2个下标界D)以上都不对
39.若有:
inta[10],*p=&
a[0];
,关于数组名a的不正确的说法是。
A
【解析】一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,
它们都有相应的地址。
指针变量即然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中)。
所谓数组元素的指针就是数组元素的地址。
在本题中,定义a为
包含10个整型数据的数组,定义p为指向整型变量的指针变量。
并且把a[0]元素的地址赋给
指针变量p,也就是使p指向a数组的第0号元素。
C语言规定数组名代表数组中首元素的地址。
因此下面两个语句等价:
P=&
p=a;
注意数组名a不代表整个数组,上述"
p=a;
”的作用是"
把a数组的首元素的地址
赋给指针变量p”而不是“把数组a各元素的值赋给p。
40.设有定义inta[]={1,5,7,9,11,13},*p=a+3;
则*(p-2),*(a+4)的值是。
A)511B)19C)59D)有错误
【解析】因为*p=a+3它的作用是将a数组第4个元素a[3]的地址赋给指针变量p(而不是赋给*p),
a代表数组首元素的地址,a+3代表数组中的第4个元素a[3]。
在数组中的对应关系如下图。
a[]=勺57911代
(p-2)p(a4)
按C语言的规定:
如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个
元素,而不是将p的值(地址)简单的加1。
另外,如果p的初值为&
a[0],则p+i和a+i就是a[i]的地址,或者说,它们指向a数组的第i个
元素,这里需要特别注意的是a代表数组首元素的地址。
*(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即a[i]。
在本题中*(a+4)=a[4]=11详见教材230页。
41.C语言中,函数返回值的类型是由。
A)return语句中的表达式类型决定
B)调用函数的主调函数类型决定
C)调用函数时的临时类型决定
D)定义函数时所指定的函数类型决定
42.执行下面程序:
intx=1,y=1,z=1;
x=x+++y+++z++;
printf("
%d,%d,%d"
x,++y,z++);
输出的结果为。
A)4,3,2B)3,3,2C)3,3,3D)3,2,2
此语句又可写为
【解析】语句x=x+++y+++z++;
中++运算符均为后缀,所以是先引用后增值,
x=x+y+z;
x++;
y++;
z++;
这样我们便很容易看出结果为x=4;
y=2;
z=2。
43.以下程序段的输出结果是。
intm=10;
while(m>
7)
m__;
printf(“%d\n”,m);
C)9
D)10
A)9B)10
89
78
(1)计算while一对圆括号中表达式的值。
当值为非零时,执行步骤
(2);
当值为零时,执行
步骤(4)。
(2)执行循环体中语句。
(3)转去执行步骤
(1)。
(4)退出while循环。
由以上while循环的一般过程来看,只有当while后面的括号中表达式的值为零时才停止循环。
本题中,当m=7是循环停止,也就是说最后一个输出的应是7.开始m被赋予10,进入循环体,
由于m--;
所以m自减1为9,所以第一个输出的应是9.
44.若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)
s=a;
for(b=1;
b<
=c;
b++)s=s+1;
则与上述程序段功能等价的赋值语句是。
A)s=a+b;
B)s=a+c;
C)s=s+c;
D)s=b+c;
【解析】掌握两点:
一、a赋给了s;
二、s执行c次自加;
所以最终相当于将a+c赋给了s。
45.以下程序中,while循环的循环次数是。
inti=0;
while(i<
10)
if(i<
1)continue;
if(i==5)break;
i++;
A)1B)10C)6D)死循环,不能确定次数
【解析】在循环中,如果执行continue,将直接开始下一次循环,不继续执行continue下面的
语句。
进入循环时,i=0,当执行到if(i<
1)continue;
—句时,将执行continue命令,直接开始下一次循环,i的值始终没有变,循环条件(i<
10)将一直满足下去。
所以,程序将一直无法退出循环,即死循环。
46.
A)strcat
B)strcmp
C)strcpy
D)strlen
当对两个字符串进行比较时,应该使用的函数是。
47.若有定义“intk,*q;
”则下列各选项中赋值表达式正确的是。
A)q=(&
k+1)B)q=&
kC)q=kD)*q=&
k
(1)本题的定义语句中,在q前面有一个*号说明符,表示q是一个指针变量,而C
语言规定,在指针变量中只能存放存储单元(即变量)的地址。
(2)因为在定义中,q的基类型为int,所以q中只能存放int类型变量的地址。
(3)在C程序中&
号是求地址符,表达式&
k的值是变量k在内存中的地址,而*号的作用是求地址指向单元的值。
(4)现在来看看选项C和D。
C中,是把整型变量直接赋给指针变量q,由于赋值不兼容性,这是错误的。
D中,企图把k的地址赋给一个整型变量(*p在此可代表一整型变量),这也是不允许的,地址值不可能转换为一个整数。
(5)关于A,还得声明一点,地址符&
只能应用于变量和以后将要介绍的数组元素,不可以用
于表达式,常量或者被说明为register的常量。
因此A也不正确。
(6)那答案只能是B,因为此处q中只能存放int类型的地址,而k是int型,&
k又是k的地址,B当然是正确的。
48.若有以下定义:
chars[20]=“programming”,*ps=s;
则不能代表字符g的表达式
A)ps+3B)s[3]C)ps[3]D)ps+=3,*ps
1、C语言对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来存放该字符串常量。
2、指向数组的指针变量也可以带下标,如p[i]与*(p+i)等价。
详见教材231页。
49.以下能正确定义数组并正确赋初值的语句是。
A)intN=5,b[N][N];
B)inta[1][2]={{1},{3}};
C)intc[2][]={{1,2},{3,4}};
D)intd[3][2]={{1,2},{34}};
【解析】如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第一维的长度可
以不指定,但第二维的长度不能省!
详见教材p138
50.假设已定义charc[8]="
test"
;
inti;
则下面的输出函数调用中错误的是。
A)printf("
%s"
c);
B)for(i=0;
i<
8;
i++)printf("
%c"
c[i]);
C)puts(c)D)for(i=0;
i++)puts(c[i]);
【解析】首先A、B两个选项是没有问题的,puts函数一般形式为puts(字符数组),其作用是
输出字符串,所以D选项是错误的。
51.下程序段:
chars[20]="
xyz"
*sp=s;
strcat(sp,"
12345"
puts(sp);
的输出结果是。
A)xyz12345B)12345xyzC)12345D)xyz
【解析】strcat(字符数组1,字符数组2)---(字符串连接)其作用是连接两个字符数组中的字符
串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值---
字符数组1的地址。
52.在执行inta[][3]={{1,2},{3,4}};
语句后a[1][2]的值是。
A.3
B.4
C.0
D.2
【解析】考查知识点:
二维数组的初始化inta[][3]={{1,2},{3,4}};
初始化的数组元素如下:
°
'
I
4
【解析】此数组共3列。
「°
在C语言中如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。
本题中一共有1°
个元素,每行3列,显然可以确定行数为4.见教材138.
54.设有定义语句:
charstr[][2°
]={"
Hello"
"
Beijing"
},*p=str;
则printf("
strlen(p+2°
));
输出结果是。
A)°
B)5C)7D)2°
【解析】数组charstr[][2°
]实际上是一个2行2°
列的字符数组。
*p正好指向H,—个英文字母占一个字节,这样p+2°
就指向第二行的第一列,也就是"
Beijing"
的B,所以输出结果是7。
注意:
虽然第一行,第二行都没有排满,但Hello其后是°
而不是空格。
55.用数组名作为函数调用时的实参,则实际传