tushu您的位置:网站首页>>配套资料>>正文

C语言程序设计习题及答案

来源:浙江考试院 作者:专升本 2018-01-29 03:06:15

 1  C语言概述

一、选择题:
1、一个C语言程序是由     C      组成。
A.主程序         B.子程序           C.函数               D.过程
2、一个C语言程序总是从      C      开始执行。
A.主程序        B.子程序           C.主函数             D.函数
3、以下叙述正确的是     D      
A.     在C程序中,main函数必须位于子程序的最前面
B.      C程序的每一行中只能写一条语句
C.      在对一个C程序进行编译的过程中,可发现注释中的拼写错误
D.     C语言本身没有输入输出语句
5、下面标识符中,不合法的用户标识符为     D      
A. Pad          B. a_10           C. _124         D. a#b
15、下列关于c语言用户标识符的叙述中正确的是   B   
A.     用户标识符中可以出现下划线和中划线(减号)
B.      用户标识符中不可以出现中划线,但可以出现下划线
C.      用户标识符中可以出现下划线,但不可以放在用户标识符的开头
D.     用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头
1、下列选项中,可以作为C语言标识符的是(   )
  A、3stu             B、#stu             C、stu3            D、stu.3
2、下列选项中,不可以作为C语言标识符的是(   )
  A、 num              B、turbo_c          C、printf          D、student3
3、请选出可用作C语言用户标识符的一组标识符(   )
A、void, define, WORD       B、a3_b3,_123,IF_A
C、FOR,——abc, Case        D、2a,Do,Sizeof
4、以下叙述正确的是    。
A.在C程序中,main函数必须位于子程序的最前面
B.C程序的每一行中只能写一条语句
C.在对一个C程序进行编译的过程中,可发现注释中的拼写错误
D.C语言本身没有输入输出语句
【答案】D
【解析】每一个C源程序都必须有、且只能有一个主函数(main函数),但是不必位于最前面,编译之后,运行是会自动搜寻到main函数并开始执行,A项错误;书写程序时,为了清晰,便于阅读和理解,一般是一个说明或一个语句占一行,但这不是必须的,B项错误;编译过程中不对注释进行编译,所以发现不了编译中的拼写错误,C项错误;C语言本身没有输入输出语句,scanf函数和printf函数是标准输入输出库函数,其头文件为stdio.h,D项为答案。
5、下面标识符中,不合法的用户标识符为    。
A. Pad          B. a_10           C. _124         D. a#b
【答案】D
【解析】C语言中规定,标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。D包含‘#’,是不合法的;
6、    是C语言提供的合法的数据类型关键字。
A. Float          B. signed             C. integer          D. Char
【答案】B
【解析】在C语言中,关键字都是小写的,所以A和D项错误;integer是Vb的关键字,不是C语言的关键字。
7、不正确的字符串常量是    。
A. ‘abc’            B. “12’12”           C.”0”                D.”  “
【答案】A
【解析】字符串常量是由一对双引号括起的字符序列。A项用的单引号,显然错误;B项,表示的字符序列是:12’12 ;C项表示的字符序列是0;D项表示的字符序列是一个空格。
8、设有以下定义:
#define d 2
int a=0;double b=1.25;char c=’A’;
则下面语句中错误的是    。
A.a++;           B.b++;              C.c++;           D.d++;
【答案】D
【解析】因为用define定义的d是常量,其值是不能改变的,D项错误;而a,b,c都是变量,尽管它们都有初赋值,但它们的值允许改变。
9、C语言程序的执行,总是起始于【 】。
A) 程序中的第一条可执行语句  B) 程序中的第一个函数
C) main函数                  D) 包含文件中的第一个函数
分析:在一个C语言源程序中,无论main函数书写在程序的前部,还是后部,程序的执行总是从main函数开始,并且在main函数中结束。本题正确答案为C。
10、下列说法中正确的是【 】。
A) C程序书写时,不区分大小写字母
B) C程序书写时,一行只能写一个语句
C) C程序书写时,一个语句可分成几行书写
D) C程序书写时每行必须有行号
分析:C语言严格区分大小写字母,如"A1"和"a1"被认为是两个不同的标识符,C程序的书写非常灵活,既可以一行多句,又可以一句多行,且每行不加行号。本题正确答案为C。
11、下面对C语言特点,不正确描述的是【 】。
A) C语言兼有高级语言和低级语言的双重特点,执行效率高
B) C语言既可以用来编写应用程序,又可以用来编写系统软件
C) C语言的可移植性较差
D) C语言是一种结构式模块化程序设计语言
分析:C语言是介于汇编语言和高级语言之间的一种语言,由于它可以直接访问物理地址,对硬件操作,所以C语言既可以编写应用程序,又可以开发系统软件,而且C程序可移植性好于汇编语言,程序清晰具有模块化的特点。本题正确答案为C。
12、C语言源程序的最小单位是【 】。
A) 程序行   B) 语句    C) 函数    D) 字符
分析:程序行、语句、函数都是由字符构成的,字符是C语言的最小单位。本题正确答案为D。
13、以下四项中属于C语言关键字的是【 】。
A) CHAR    B) define    C) unsigned     D) return
分析:C语言有32个关键字(或称保留字),它们都有特定的含意,并且由小写字母组成,所以选项A是错的,选项B不是保留字,选项D是return的错误拼写。本题正确答案为C。
32.下列字符串不符合标识符规定的是【 】。
A) SUM    B) sum     C) 3cd    D) end
分析:标识符规定只能由26个英文字母(大小写均可),数字0~9和下划线组成,且不能以数字开头,题中的3cd不符合规定。
本题正确答案为C。
二、填空题:
1、一个C语言的语句至少应包含一个   分号   
2、C源程序的基本单位是  函数    
3、函数是具有相对独立功能的  程序段    
4、C语言中的标识符可以由3种字符组成,它们是:      英文字母、下划线、数字                      ,并且第一个字符必须是字母或   下划线   
 

 
第3章  数据类型、运算符与表达式
一、选择题:
4、C语言中,最简单的数据类型是     B      
A.整形、实型、逻辑型              B.整型、实型、字符型
C.整型、字符型、逻辑型            D.整型、实型、逻辑型、字符型
6、    B      是C语言提供的合法的数据类型关键字。
A. Float          B. signed                   C. integer          D. Char
7、不正确的字符串常量是     A      
A. ‘abc’            B. “12’12”           C.”0”                D.”  “
8、若定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是     B      
A.7          B.2.50000             C.3.500000        D.0.00000
9、已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2=’A’+’6’-’3’;后,c2中的值为      A       
A.D         B.68           C.C           D.不确定的值
11、执行下面程序段的输出结果为       B      
       int x=13,y=5;
       cout< A.3         B.2            C.1           D.0
12、对于int型变量k1,k2,k3,k4,若用以下语句:
cin>>k1>>k2;
cin>>k3>>k4;
将10赋给k1,k3,将20赋给k2,k4,则应按     B       格式输入数据。
A.1020           B.10 20          C.10,20         D.10 20
  1020             10 20            10,20           10,20
13、设有以下定义:
#define d  2
int a=0;double b=1.25;char c=’A’;
则下面语句中错误的是    D     
A.a++;           B.b++;              C.c++;           D.d++;
14、有定义语句:int x,y;,若要通过cin>>x>>y;语句使变量x得到数值11,变量y得到数值12,下面4组输入形式中,正确的是  C      
A. 1112                          B.12,11
C.11 12                          D.11,
                                        12
16、有以下程序段:
int m=0,n=0;char c=’a’;
cin>>m>>c>>n;
cout< 若从键盘上输入:10A10,则输出结果是  A    
A.10,A,10          B.10,a,10           C.10,a,0          D.10,A,0
1.       、下列选项中,可以作为C语言常量的是(        )
     A)13.8e    B)1/2         C)‘M’       D)”abc”
2.       下列选项中,不可以作为C语言常量的是(        )
     A).88      B)35.6e3      C)4e-2     D)3/5
3.       下列选项中,正确的一组程序是(        )
A)char a;   B)char b;        C)char c;   D)char d
  A=’M’;    b=’55’;        c=”M”;    d=”55”
4.       已知字母’b’的ASCII码值为98,如ch为字符型变量,则表达式ch=’b’+’5’-‘2’的值为(     )
A)e       B)d        C)102          D)100
5.       下列程序的运行结果是(        )
main( )
{
char c1=’6’,c2=’0’;
printf(“%c,%c,%d\n”,c1,c2,c1-c2);
}
A)       因程序格式不合法,提示出错信息。
B)       6,0,6
C)       6,0,7
D)       6,0,5
6.以下程序的输出结果是(       )
     main( )
     {
int x=010,y=10,z=0x10;
printf(“%d,%d,%d\n”,x,y,z);
}
A)       8,10,16
B)       8,10,10
C)       10,10,10
D)       10,10,16
7.已知各变量的类型定义如下:
    int i=8,k,a,b;
    unsigned long w=5;
    double x=1.42,y=5.2;
则以下两组表达式中不符合C语言语法的表达式分别是:
⑴ A)k=i++    B)(int)x+0.4    C)y+=x++    D)a=2*a=3
⑵ A)x%(-3)    B)w+=-2    C)k=(a=2,b=3,a+b)    D)a+=a-=(b=4)*(a=3)
11.在C语言中,合法的字符常量是   
A) ‘\084'            B) ‘\x43'                C) ‘ab'          D) “\0”
【答案】B
【解析】字符常量是用单引号括起来的一个字符,据此定义,选项C和D显然错误。A和B是转义字符。转义字符是一种特殊的字符常量,以反斜线"\"开头,后跟一个或几个字符,它有两种写作形式,\ddd和\xhh,其中ddd和hh分别为八进制和十六进制的ASCII代码。A选项’\084’,反斜线’\’之后是三位数字,是采用的\ddd形式,不过084作为八进制显然是错误的;B项’\x43’,采用的\xhh形式,43作为两位十六进制数,对应ASCII代码67,对应的是字符’c’。
12.设有如下的变量定义:
      int   i=8, k, a, b;
      unsigned long  w=5;
      double x=1, 42, y=5.2;
则以下符合C语言语法的表达式是   
A) a+=a-=(b=4)*(a=3)                            B) x%(-3);
C) a=a*3=2                                    D) y=float(i)
【答案】A
【解析】A项是赋值表达式和算术表达式的结合,符合C语言语法;B项中,’%’是模运算符,要求运算符两侧均为整数,x为double,显然错误;C项是赋值表达式,要求赋值运算符的左侧是变量,3=2部分显然错误;D项,强制类型转换运算符使用错误,应为y=(float)i
13.以下程序运行后,输出结果是     
A) cde    B) 字符c的ASCII码值         C) 字符c的地址       D) 出错
          main()
          {   char   *s="abcde";
             s+=2;
             printf("%ld\n",s);
          }
【答案】C
【解析】char *s ="abcde",声明s是一个字符串指针,并且将字符数组"abcde"的首地址赋值给了s,s+=2,即是在原来的s地址上向前推进两个字节,又因为数组是在连续空间上存储的一组数据,且一个字符占一个字节,那么也就等价于由数组的第一个字节地址推进到第三个字符的地址,即字符c的地址。答案为c
16.当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是   
   A) c=b=a;         B) (a=c) ‖(b=c) ;
   C) (a=c) &&(b=c);  C) a=c=b;
【答案】C
【解析】赋值运算符是自右向左运算的。A项是将a的值赋给了b,又将b的值赋给了a,与题意不符;B项和C项都是逻辑运算,且都自左向右运算,它们的区别是:或运算是先计算左边表达式的值,若为真,则结束运算,若为假,继续计算右边表达式,所以,如果a=c为真(只需要a>0),那么b=c语句不会执行,即不能完成c给b的赋值;与运算则是两边的表达式都要计算,所以,a=c和b=c都能得到执行,C为正确答案;D项是将b的值赋给了c和a
17.设有如下定义:int  x=l,y=-1;,则语句:printf("%d\n",(x--&++y));的输出结果是   
   A) 1      B) 0       C) -1       D) 2
【答案】B
【解析】表达式x--&++y中,逻辑运算符‘&’的优先级最低,应该先计算它两边的表达式。x-- :x参与逻辑运算后,x的值再自减1,那么x—参与逻辑表达式的值为1;++y:y自增1后再参与逻辑运算,那么++y参与逻辑表达式的值为-1+1=0。x--&++y即为1&0,值为0,答案为B。
18.若定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是    。
A.7          B.2.50000             C.3.500000        D.0.00000
【答案】B
【解析】这是一个算术表达式,根据运算符的优先级,应该先计算(x+y),得到值7.2,之后对其进行强制数据类型转换(int),得到值7,取模运算和乘、除运算在同一优先级上,自左向右依次计算,则先进行取模运算,a%3即7%3=1,之后1*7=7,7%2=1,1/4=0,即a%3*(int)(x+y)%2/4的值为0,那么表达式的值即是x的值,为2.50000。
19.已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2=’A’+’6’-’3’;后,c2中的值为    。
A.D         B.68           C.C           D.不确定的值
【答案】A
【解析】字符是以ASCII码的形式存储的,表达式’A’+’6’-’3’的运算实际就是对应ASCII码的算数运算,加减运算是同一优先级的,所以’A’+’6’-’3’=65+54-51=68,即D的ASCII的值。此处定义c2是字符型,所以,c2的值是D;如果c2定义为整型,则c2的值是68。
20.下面叙述不正确的是【 】。
A) C语句末尾必须有分号
B) C语言中无论是整数还是实数都能准确的表示
C) 运算符“%”只能用于整数运算
D) 乘除运算符优先级高于加减运算符
21.以下叙述正确的是【 】。
A) C语句前面必须有行号
B) C程序中每行只能写一条语句
C) C语言本身没有输入输出语句
D) 注释必须跟在一行语句的后面
22.复合语句应用【 】括起来。
A) 小括号〖〗B) 方括号〖〗C) 大括号〖〗D) 尖括号
23.C语言语句一行写不下时,可以【 】。
A) 用逗号换行〖〗B) 用分号换行〖〗C) 用回车换行〖〗D) 在任意一空格处换行
24.下面程序的输出是【 】。(“□”表示一个空格)
int a=3366;
printf("|%-08d|",a);
A) |-0003366|        〖〗B) |00003366|〖〗                       
C) |3366□□□□|〖〗D) 输出格式非法
25.若有说明语句:int a; float b;,以下输入语句正确的是【 】。
A) scanf("%f%f",&a,&b);
B) scanf("%f%d",&a,&b);
C) scanf("%d,%f",&a,&b);
D) scanf("%6.2f%6.2f",&a,&b);
26.以下程序的输出结果是【 】。
main( )
{ int x=11,y=11;
printf("%d%d\\n",x--,--y);
}
A) 11,11〖〗B) 10,10〖〗C) 10,11〖〗D) 11,10
27.执行下面程序段,给x、y赋值时,不能作为数据分隔符的是【 】。
int x,y;
scanf("%d%d",&x,&y);
A) 空格〖〗B) Tab键〖〗C) 回车〖〗D) 逗号
 
28.下面合法的语句是【 】。
A) int a=8,b;
b=++a++;
printf("%d,%d",a,b++);
 B) int a;
printf("\\"%d\\"",scanf("%d",&a));
C) char a;
scanf("%c",&a);
char b=scanf("b=%c",&b);
D) char c=getchar( );
 putchar((int)c);
29.执行下面程序时,欲将25和2.5分别赋给a和b,正确的输入方法是【 】。
int a;
float b;
scanf("a=%d,b=%f",&a,&b);
A) 25□2.5
B) 25,2.5
C) a=25,b=5.5
D) a=25□b=2.5
30.与数学公式a·b〖〗x·y不等价的语句是【 】。
A) a*b/x*y
B) a*b/x/y
C) a*b/(x*y)
D) a/(x*y)*b
31.下面不属于C语言的数据类型是【      】。
A)整型     B)实型    C) 逻辑型       D) 双精度实型
分析:和其它高级语言相比,C语言中没有逻辑型数据,也没有逻辑型变量。
本题正确答案为C。
33.下面四个选项中,均是合法实数的选项是【 】。
A)2e-4.2  B)33e-4   C)0.2e-.5    D)-e5 
分析:实数有两种表示形式:小数形式和指数形式,小数形式必须有小数点,指数形式中,字母e之前必须有数字,e之后必须是整数。选项A)中的"2e-4.2",选项C)中的"0.2e-.5",选项D)中的"-e5"均是不合法的。本题正确答案为B。
34.下列正确的字符型常量是【 】。
A) "a"〖〗B) ′\\\\′〖〗C) "\\r"〖〗D) 277
分析:字符常量的定义是用单引号括起来的一个字符,A和C的定界符不对,D超过了char型数据的表示范围,′\\\\′是转义字符。本题正确答案为B。
35.若有说明语句char ch1=′\\x41′;则ch1【 】。
A) 包含4个字符   B) 包含3个字符    C) 包含2个字符    D) 包含1个字符
分析:"\\x41"中的"41"是十六进制数,即十进制的65,题中ch1存放的65是字母"A"的ASCII码。本题正确答案为D。
36.下列程序段输出的字符串长度为【 】。
printf("\\\\aaa\\′ccc\\bddd\\"");
A) 11   B) 12    C) 13   D) 17
分析:\\\\、\\′、\\b和\\"为转义字符,程序输出结果为:\\aaa′ccddd"。本题正确答案为A。
37.下列运算符中,要求运算对象必须是整数的是【 】。
A) /   B) *    C) %    D) !
分析:题目中"/"、"*"、"!"的运算对象既可以整数,也可以是实数,只有取余数运算符"%"要求运算对象必须是整数。本题正确答案为C。
38.下面合法的赋值语句是【 】。
A) x+y=2002;    B) ch="green";   C) x=(a+b)++;    D) x=y=0316;
分析:赋值号左端不能为表达式,选项A)是错的;赋值号不能将字符串赋给某个变量,选项B)也是错的;增量运算符“++”不能用于表达式,选项C)也是错的。本题正确答案为D。
39.已知a为int型,b为double型,c为float型,d为char型,则表达式a+b*c-d/a结果的类型为【 】。
A) int 型   B) float型   C) double型    D) char型
分析:不同类型数据混合运算的转换规律是:运算前float型数据会自动转换为double型,char型数据会自动转换为int型。运算时int型数据和double型数据要先化为相同类型,即double型,运算结果也为double型。本题正确答案为C。
40.下面的程序运行后输出为【 】。
#include
#include
main( )
{ int a,b;
float c;
b=5;c=6;c=b+7;b=c+1;
a=sqrt((double)b+c);    / *sqrt是开平方库函数,定义代码在math.h中*/
printf("%d,%f,%d",a+6,c,b);
}
A) 11.000000,12.000000,13.000000
B) 11.000000,12.000000,13
C) 11.0000000,12,13
D) 11,12.000000,13
分析:C语言允许将一种类型的数据赋给另一种类型的变量,但是变量的类型并不会因为赋值而发生改变,如本题中将b+7,即12赋给float型变量c,c值应为12.000000而不是整数12,同样a=sqrt((double)b+c),赋值号右边是双精度数,但由于a是整形变量,故a的值为5。本题正确答案为D。
二、填空题:
1、有以下语句段:
int n1=10,n2=20;
cout<<  n1<;
要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空。
n1=10
n2=20
6、以下程序运行后的输出结果是  b   
void main()
{char m; m='B'+32; cout< 7、设a=3,b=4,c=5,求下列表达式的值。
(1)a+b>c&&b==c                 (2)a||b+c&&b-c
(3)!(a>b)&&!c||1                    (4)!(x=a)&&(y=b)&&0
8、执行下面的程序段后,a的值为          20         
{     int a,b;
       a=300;
       b=20;
       a=a+b;
       b=a-b;
       a=a-b;
       cout< }
41.下面程序段的输出结果是        。
int k=10;
float a=3.5,b=6.7,c;
c=a+k%3*(int)(a+b)%2/4;
分析:本题考查运算符的优先级概念,式中要先算(a+b)的值,再算强制类型变换,*、/、%是同级的要从左到右计算,最后算加法和赋值。
本题正确答案为:3.500000
42.若想通过以下输入语句使a中存放字符串1234,b中存放字符5,则输入数据的形式应该是        。
     :
            .
     char  a[10],b;
     scanf("a=%s b=%c",a,&b);
            :
            .
【答案】a=1234 b=5
【解析】scanf函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。scanf("a=%s b=%c",a,&b)要求输入设备(键盘)输入数据的形式是a=%s b=%c(注意中间要求是空格),这里scanf的意义即是:从键盘顺序读取一串字符,以空格为分隔符,分别赋值给变量a,b;a可以接受一串字符,而b只能接受一个字符,多余的字符将被舍弃,scanf函数结束。所以,键盘上的输入应该是a=1234  b=5
43.执行下列程序的输出结果是【         】。
main( )
{
float a=1,b;
b=++a*++a;
printf("%f\\n",b);
}
44.执行下列程序的输出结果是【        】。
main( )
{
int x=5,y;
y=++x*++x;
printf("y=%d\\n",y);
}
45.下面程序段的执行结果是x=【3】,y=【4】。
inta=3,b=5,x,y;
x=a+1,b+6;
y=(a+1,b+6);
printf("x=%d,y=%d",x,y);
分析:此题考查逗号表达式的概念,因逗号运算符的优先级比赋值号还低,所以执行x=a+1,b+6时,x得到的是a+1的值。
本题正确答案为 【3】 4, 【4】 11。
46.已知:int a=5;则执行a+=a-=a*a;语句后,a的值为【6】。
分析:a+=a-=a*a的运算顺序是从右向左,相当于求a+=(a-=a*a),其中小括号内的运算得a=5-5*5即a=-20,下一步再求a+=a,即a=a+a,将-20代入得a=-40。
本题正确答案为 【6】 -40。
47.下面程序的运行结果是x=【7】,y=【8】。
main( )
{ float x=4.9;int y;
y=(int)x;
printf("x=%f,y=%d",x,y); }
分析:强制类型变换并不改变x的原值,x仍为4.9,而变换得到的是中间结果,此题将中间结果赋给了y,另外注意是舍弃小数部分,而不是四舍五入。
本题正确答案为 【7】 4.900000 【8】 4。

 
tushu 精品图书
  • 大学语文
  • 高等数学
  • 英语
pic
咨询电话(08:30-17:30) 400-871-9993
本部地址:浙江省杭州市下沙6号大街260号中自科技园19幢A层  版权所有:杭州文亮思睿教育科技集团有限公司
Copyright©2009-2025|All Rights Reserved|浙ICP备09111115号|浙公网安备33011802001617号|律师声明书