1、 第一部分习题篇 第一章C语言概述 一.单选题 1.以下说法中正确的是(C)。 A)C语言程序总是从第一个函数开始执行 B)在C语言程序中,要调用函数必须在main()函数中定义 C)C语言程序总是从main()函数开始执行 D)C语言中的main()函数必须放在程序的开始部分 2.一个C语言程序是由(B)。 A)一个主程序和若干子程序组成 B)函数组成 C)若干过程组成 D)若干子程序组成 3.C语言规定,在一个源程序中,main函数的位置(C)。 A)必须在最开始 B
2、必须在系统调用的库函数的后面 C)可以任意 D)必须在最后 4.以下叙述不正确的是(D)。 A)一个C源程序可由一个或多个函数组成 B)一个C源程序必须包含一个main函数 C)C程序的基本组成单位是函数 D)在C程序中,注释只能位于一条语句的后面 5.下列关于C语言的说法不正确的是(D)。 A)C语言既有高级语言的功能,也具有低级语言的一些功能 B)C语言中的一条执行语句都必须用分号结束 C)注释可以出现在程序中任意合适的地方 D)include命令行后面必须加分号 6.用C语言编写的代码程序(B)。 A)可以立即执行 B)是一个源程序 C
3、经过编译即可执行 D)经过编译解释才能执行 7.用高级语言(如C语言)编写的程序称为(A) A)源程序 B)目标程序 C)可执行程序 D)编译程序 8.一个函数的组成有(A)。 A)函数首部和函数体 B)函数名和函数的声明部分 C)主函数和子函数 D)声明部分和执行部分 9.在C语言中,用来表示“取地址”的符号是(B)。 A)# B)& C)* D)@ 10.C语言是计算机高级语言,它适合于作为系统描述语言,它(A)。 A)既可用来写系统软件,也可用来写应用软件 B)只能写系统软件,不能用来写应用软件 C)不能写
4、系统软件,只能用来写应用软件 D)既不能写系统软件,也不能写应用软件 二.填空题 1.C语言用函数作为程序的模块单位,便于实现程序的模块化。 2.C语言允许直接访问物理地址,能进行位操作。 3.用C语言编写的程序,每一个语句和数据定义的结尾必须要有一个分号。 4.每个C程序中必须有一个main()函数。 5.C程序中的函数体由{}括起来。 6.C程序中的“\n”表示在程序运行中换行。 7.C程序中,“/*……*/”表示注释部分。 8.C程序中,一个函数由函数首部和函数体组成。 9.一个C程序总是从main()函数开始执行的,不论该函数在整个程序中的位置如何。 10.在纸
5、上编好一个C源程序后,要经过编辑、编译、连接、运行这几个步骤进行上机运行。 三.判断题 1.C语言不具有低级语言的特性。(错) 2.C语言之所以也被称为中级语言,是因为它比高级语言的功能要少,而比低级语言的功能多。(错) 3.C语言与其他高级语言一样具有结构化的控制语句。(对) 4.C语言允许直接访问物理地址。(对) 5.每一个C程序必须有一个main函数。(对) 6.C程序的语句最后应有一个分号。(对) 7.C程序中的main函数必须放在整个程序的最前头。(错) 8.计算机高级语言对源程序进行翻译有两种方式:编译和解释。(对) 四.编程题 1.编写一个C程序,输出以下信
6、息:
************
Iamastudent.
************
#include
7、ntf(“Please input a,b:\n”);
scanf(“%d,%d”,&a,&b); /*注意输入两个数之间用逗号分隔*/
if(a>b)
printf(“%d”,a);
else
printf(“%d”,b);
}
3.编写一个C程序,输入a、b、c三个数,输出其中最大数。(只用一个主函数)
#include 8、 /*max用于保存a,b中比较大的数*/
if(max 9、bc是两个不同的变量
C)若a和b类型一样,在执行了赋值表达式a=b后,b中的值将放入a中,而b的值不变
D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数据
4.设有intx=8,表达式x++*1/3的值是(A)。
A)2 B)3 C)8 D)9
5.若m,x,y,z都是整型变量,则计算表达式m=(x=5,y=10,z=25)执行后,m的值为(C)。
A)5 B)10 C)25 D)40
6.设变量i是int类型,f是float型,d是double 型,执行表达式5+’i’-f*d,其结果的数据类型为(B) 10、
A)int型 B)double 型 C)float型 D)非法表达式
7.设变量i是int类型,执行语句i=’A’+2.5后,正确的叙述是(C)。
A)i的值是字符D B)i的值是字符A的ASCII值加上2.5
C)i的值是字符A的ASCII值加上2 D)非法表达式
8.下列是用户自定义标识符的是(B)。
A)int B)_xy C)2xy D)3-xy
9.下面与x=y++完全等价的表达式是(A)。
A)x=y,y=y+1 B)x=x+1,y=x C)x=++y D)x+=y+1
10.已知各变量的类型说明如下:
11、int k,a,b;
long w=8;
floatx=2.56;
以下不符合C语言语法的表达式是(A)。
A)x%5 B)w-=5 C)k=(a=8,b=6,a-b) D)a+=a-=(b=2)*(a=5)
11.运行以下程序段时编译出错,其原因是(D)。
char c1='a',c2='123';
printf("%c,%d\n",c1,c2);
A)字符串要用"123"表示 B)'123'只能赋值给字符数组
C)c2是字符变量,不能用%d格式输出 D)c2是字符变量,只能赋以字符常量
12.若定义float a;,现要从键盘输入a数据,其整数位为3位 12、小数位为2位,则选用(A)。
A)scanf("%6f",&a); B)scanf("%5.2f",a);
C)scanf("%6.2f",&a); D)scanf("%f",a);
13.若定义double t;,则表达式t=1,t+5,++t的值为(B)。
A)1.0 B)2.0 C)6.0 D)7.0
14.已知各变量的类型说明如下,则C语言中错误的表达式是(A)。
int k,a,b;
unsigned long w=5;
double x=1.42;
A)x%(-3) B)w+=2
C)k=(a=2,b=3,a+b) 13、 D)a+=a-=(b=4*(a=3))
15.以下程序段的运行结果是(C)。
int a=0,b=0,c=0;
if(a&&++b)c++;
printf("%d,%d\n",b,c);
A)1,1 B)1,0C)0,0D)0,1
二.填空题
1.在C语言中,一个float 型数据在在中所占的字节数为4,一个double 型数据在在中所占的字节数是8。
2.下面程序的输出结果是28。
main()
{
int a=2,b=3,c=4;
a*=16+(b++)-(++c);
printf(“%d”,a);
}
3.下面程序的输出结果是5。
main( 14、)
{
int x=17,y=26;
printf(“%d”,y/=(x%=6));
}
4.执行下面程序段后,c3中的值是0。
int c1=1,c2=2,c3;
c3=1.0/c2*c1;
5.进行下列变量定义后,表达式a*b+d-c的类型是double 。
char a;
int b;
float c;
double d;
6.下面程序的输出结果是8,10。
main()
{
int x=010,y=10;
printf(“%d,%d\n”,x,y);
}
7.下面程序的输出结果是12。
main()
{
int x=3, 15、y=5;
printf(“%d\n”,x=(x--)*(--y));
}
8.已知字母A的ASCII码是十进制数65,设c为字符型变量,则表达式c=’A’+’5’-’2’的值为D或68。
9.下面程序的输出结果是52。
main()
{
int x=065;
printf(“%d\n”,--x); /
}
10.下面程序的输出结果是25,21,37。
main()
{
int a,b,c;
a=25;
b=025;
c=0x25
printf(“%d,%d,%d\n”,a,b,c);
}
11.下面程序的输出结果 16、是48。
main()
{
int x=0110;
printf(“%x\n”,x);
}
12.下面程序的输出结果是20200.000000。
main()
{
char c;
int n=100;
float f=10;
double x;
x=f*=n/=(c=5);
printf(“%d%f\n”,n,x);
}
13.写出下面程序的运行结果。(请用∪表示空格)
main()
{
char c1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’;
printf(“a%c∪b%c\tc%c\tabc\n”,c1, 17、c2,c3);
printf(“\t\b%c∪%c\n”,c4,c5);
}
程序的运行结果是:aa∪bb∪∪∪cc∪∪∪∪∪∪abc
A∪N
14.下面程序的运行结果是9,11,9,10。
main()
{
int i,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf(“%d,%d,%d,%d\n”,i,j,m,n);
}
15.以下程序的运行结果是11.50。
#include 18、\n",i%(int )(x+y)*j/2/3+y);
}
三.判断题
1.C语言中,字符常量可以用单引号或双引号括起来。(错)
2.C语言中,字符常量只能包含一个常量(字符)。(对)
3.在C语言中,字符串常量隐含处理成以‘\0’结尾。(对)
4.下面程序段的输出结果是9。(错)
int a=9;
printf(“%o\n”,a);(注意:%o中的o是字母o,不是数字0)
5.C语言中,用户所定义的标识符允许使用关键字。(错)
6.C语言中,用户所定义的标识符中,大、小字母代表不同标识。(对)
7.C语言中,符号常量的值在程序运行过程中可以改变。(错)
8.C语言中, 19、不要求对程序中所用到的变量进行强制定义。(错)
9.C语言中,一个整数如果其值在-323768~32767围,认为它是int 型,只能赋值给int 型变量。(错)
10.设一个C系统的float 型有效数字是7位,则超过7位数的运算是不准确的。(对)
四.计算题
1.求下面表达式的值。
1)x+a%3*(int )(x+y)%2/4设x=2.5,a=7,y=4.7
第1步:(int )(x+y)=(int )(7.2)=7
第2步:a%3*7%2/4=7%3*7%2/4=1*7%2/4=1/4=0
第3步:x+0=x=2.5(计算机显示为2.500000)
2)(float 20、)(a+b)/2+(int )x%(int )y设a=2,b=3,x=3.5,y=2.5
第1步:(float )(a+b)/2=(float )(2+3)/2=(float )(5)/2=5.0/2=2.5
第2步:(int )x%(int )y=(int )(3.5)%(int )(2.5)=3%2=1
第3步:2.5+1=3.5(计算机显示为3.500000)
2.写出下面赋值表达式运算后a的值,设原来a=12,n=5。
1)a+=a a=a+a=12+12=24
2)a-=2 a=a-2=12-2=10
3)a*=2+3 a=a*(2+3)=12*5=60
4)a/=a 21、a a=a/(a+a)=12/24=0注意a是整型
5)a%=(n%=2)已知:n=5a=0
6)a+=a-=a*=a从右向左解:a=a*a=144;a=a-a=0;a=a+a=0
五.编程题
1.要将“China”译成密码,规律是:用原来的字母后面第4个字母代替原来的字母。例如,“A”用字母“E”来替代。因此,“China”应译为“Glmre”。编程:用赋初值的方法使c1.c2.c3.c4.c5这五个变量的值分别为‘C’、‘h’、‘i’、‘n’、‘a’,经过运算,这五个变量分别变为‘G’、‘l’、‘m’、‘r’、‘e’,并输出。
#include 22、ain()
{
char c1=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’;
c1=c1+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;
printf(“passwordis%c%c%c%c%c\n”,c1,c2,c3,c4,c5);
}
运行结果:passwordisGlmre
也可以用循环和数组:
#include 23、4);
printf(“\n”);
}
2.请编程,要求用赋初值的方法使c1.c2这两个变量的值分别为97和98,然后分别按整型和字符型输出。
#include 24、>
void main()
{
double a,b,c,total,average,square,squareroot;
printf("请输入三个单精度实数:");
scanf("%f%f%f",&a,&b,&c);
total=a+b+c;
average=total/3.0;
square=a*a+b*b+c*c;
squareroot=sqrt(square);
printf("三个数的和=%-15.3f,三个数的平均值=%-15.3f\n",total,average);
printf("三个数的平方和x=%.3f,x的平方根=%.3f\n",square,s 25、quareroot);
}
运行结果:
请输入三个单精度实数:1.234.567.89
三个数的和=13.680,三个数的平均值=4.560
三个数的平方和x=84.559,x的平方根=9.196
4.输入三角形的三个边长,计算并输出三角形的面积。
#include 26、f("您输入的三条边无法构成三角形。\n");
else
{
k=(a+b+c)/2;
area=sqrt(k*(k-a)*(k-b)*(k-c)); /*函数sqrt(x)是求x的平方根*/
printf("该三角形的面积是%6.2f\n",area);
}
}
5.输入两个长整型数,输出它们(整数除的)商和余数。
#include 27、"两数进行整数除的商是%ld,余数是%ld\n",a3,a4);
}
运行结果:
请输入两个整数:654321789
两数进行整数除的商是829,余数是240
6.输入两个整数,输出它们(实数除)的商,并输出商的第二位小数位(例如:15/8.0=1.875,1.875的第二位小数位是7)。
#include 28、实数除,商是%f,商的第二位小数位是%d\n",f,c);
}
运行结果:
请输入两个整数:158
两数进行实数除,商是1.875000,商的第二位小数位是7
7.输入一个(unsigned 类型)无符号整数,分别输出它的低四位和高四位。
#include 29、右移12位*/
printf("%u的十六进制是%x\n",u,u);
printf("十六进制表示%u的低四位是%x,高四位是%x\n",u,low4,high4);
}
运行结果:
请输入一个无符号整数:54332
54332的十六进制是d43c
十六进制表示54332的低四位是c,高四位是d
8.输入两个小写字母分别赋值给字符变量ch1与ch2,将它们转换成大写字母,并交换ch1与ch2的值,最后输出ch1与ch2的值。
#include 30、");
c1=getchar ();
c2=getchar ();
c1-=32;
c2-='a'-'A';/*与32等价*/
t=c1;
c1=c2;
c2=t;
printf("%c%c\n",c1,c2);
}
运行结果:
请输入两个半角的小写英文字母:db
BD
9.输入秒数,将它转换,用小时、分钟、秒来表示。例如输入7278秒,则输出:2小时1分18秒。
#include 31、);
hour=k/3600;
k%=3600;
minute=k/60;
second=k%60;
printf("%d小时%d分钟%d秒。\n",hour,minute,second);
}
运行结果:
请输入秒数:7278
2小时1分钟18秒。
10.输入两个复数的实部和虚部,输出这两个复数积的实部和虚部。两复数的积按下面的公式计算:(a+bi)·(c+di)=(ac-bd)+(ad+bc)i。
#include 32、);
scanf("%f%f",&a,&b);
printf("请输入第二个数的实部和虚部:");
scanf("%f%f",&c,&d);
real=a*c-b*d;
imag=a*d+b*c;
printf("两个复数积的实部和虚部分别是%f,%f\n",real,imag);
}
运行结果:
请输入第一个数的实部和虚部:1.12.2
请输入第二个数的实部和虚部:3.34.4
两个复数积的实部和虚部分别是-6.050000,12.100000
第三章C程序的基本控制结构
一.单选题
1.若变量已经正确定义为float 型,要通过语句scanf(“%f%f%f”, 33、a,&b,&c)。
给a输入10.0,n输入20.0,c输入30.0,下列不正确的输入形式是(B)。
A)10<回车>20<回车>30<回车> B)10.0,20.0,30.0<回车>
C)10.0<回车>20.030.0<回车> D)1020<回车>30<回车>
2.若有说明语句:char c=’65’;则变量c(D)。
A)包含1个字符 B)包含2个字符
C)包含3个字符 D)说明不合法,c的值不确定
3.若w=1,x=2,y=3,z=4,则条件表达式w 34、定义为int 型变量,若从键盘给它们输入数据,正确的输入语句是(B)。
A)inputx,y,z;B)scanf(“%d%d%d”,&x,&y,&z);
C)scanf(“%d%d%d”,x,y,z);D)read(“%d%d%d”,&x,&y,&z);
5.有以下程序。
#include 35、
6.以下程序的输出结果是(A)。
#include 36、dio.h>
void main()
{
int a=55,b=50,c=60,d;
d=a>20?b:c;
switch(D)
{
case40:printf(“%d,”,a);
case50:printf(“%d,”,b);
case60:printf(“%d,”,c);
default:printf(“$\n”);
}
}
A)50,60B)50,$C)60,$ D)50,60,$
9.如果从键盘输入数据666,下面程序输出的结果是(C)。
#include 37、x);
if(x>300)printf(“%d”,x);
if(x>200)printf(“%d”,x);
if(x>100)printf(“%d”,x);
}
A)666 B)666666C)666666666 D)以上都不对
10.有如下程序。
#include 38、 B)a=6,b=7 C)a=7,b=7 D)a=7,b=8
11、下面的程序中:
int i=9;
while(i=0)i=i-1;
则下列描述正确的是(C)
A)while循环执行9次 B)循环体语句执行一次
C)循环体语句一次也不执行 D)循环是无限循环
(注意:i=0是赋值语句,不是对i中值和0进行比较,因此程序执行后i的值是0而不是9)
12、下面的程序中:
int i=-1;
do
{i=i*i;}while(!i);
则下列描述正确的是(B)
A)循环体一次也不执行 B)循环体执行一次
C)循环体执行两次 D 39、是无限循环
13、下面的程序中:
int i=0;
while(i=1)
{…}
则下列描述正确的是(C)
A)循环控制表达式不合法 B)循环控制表达式为0
C)循环控制表达式为1 D)以上都不对
14、下面的程序中:
int x=0,total=0;
while(!x!=0)total+=++x;
printf(“%d”,total);
则下列描述正确的是(D)
A)程序段的控制表达式是非法 B)程序段是无限循环
C)运行程序段后输出0 D)运行程序段后输出1
15、若变量已正确定义,要求以下程序段完成6!的运算,不能完成的程 40、序段是(D)。
A) B)
i=1; i=1;
x=1; x=1;
while(i﹤=6) do
{x=x*i; {x=x*i;
i++;} i++;}
while(i﹤=6);
C) D)
for(x=1,i=1;i﹤=6;i++) for(i=1;i﹤=6;i++)
x=x*i; {x=1;x=x*i;}
16、设n为整型变量,则for(n=10;n>=0;n--)循环次数为(C)
A)9 B)10 41、 C)11 D)12
17、对表达式for(表达式1;;表达式3)可以理解为(B)
A)for(表达式1;0;表达式3) B)for(表达式1;1;表达式3)
C)for(表达式1;表达式1;表达式3) D)for(表达式1;表达式3;表达式3)
18、下面的程序运行结果是(B)
#include 42、填空。
#include 43、
printf(“%c,%c,%c,%c\n”,a,b,c,d);
}
若从键盘上输入5,6,65,66<回车>。则输出结果是5,6,A,B。
4.已知字母A的ASCII值是65,运行下面程序时输入B35<回车>,输出结果是1F。
#include 44、22;
printf(“%d”,y/=(x%=6));
}
6.下列程序的功能是把从键盘上输入的整数取绝对值后输出。
#include 45、份。
#include 46、ntf(“May\n”);break;
case6:printf(“June\n”);break;
case7:printf(“July\n”);break;
case8:printf(“August\n”);break;
case9:printf(“September\n”);break;
case10:printf(“October\n”);break;
case11:printf(“November\n”);break;
case12:printf(“December\n”);break;
default:printf(“inputdataerror\n” 47、);
}
getchar ();
printf(“\ncontinue?(Y/N):");
ch=getchar ();
if(ch!='y'&&ch!='Y')break;
}
}
9.下面程序的输出结果是!!!。
#include 48、}
}
10.下面程序的输出结果是27。
#include 49、f((j++||k++)&&i++)
printf(“%d,%d,%d\n”,i,j,k);
}
12.若从键盘输入15,则下面程序输出的结果是151515。
#include 50、)
t=t*i;
printf("%d\n",t);
}
14、下面程序的输出结果是D。
#include






