C语言全部考试系统题库含答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录
第一章 C语言基础知识
(C语言概述、算法、数据类型运算符表达式、位运算)
一、判断题(正确的填A,错误的填B)
R1.在C语言中,逗号运算符的优先级最低。

(A)
2.在C语言可执行程序的开始执行点是程序中第一个函数。

(B)
3.“5ch”是合法的变量名。

(B)
4.C语言程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。

(A)
5.当输入数据时,必须指明变量的地址,如scanf("%f",&f) (A)
N6.表达式i++与++i在任何场合功能完全相同。

(B)
7.在赋值表达式中,赋值号左边的变量和右边的表达式之值的数据类型可以不相同。

(A)
R8.C语言程序中,语句以逗号结尾。

( B )
9.在 C 程序中,APH 和aph 代表不同的变量。

( A )
10. a-=7等价于a=a-7。

( A )
N11. printf函数中用到格式符%5s ,其中数字5表示输出的字符串占用5列。

如果字符串长度大于5,则输出按原字符长从左向右全部输出。

(A )
12.如果x>y为真或a<b为真,表达式(x>y)&&(a<b)就为真。

( B )
13.C语言程序的变量必须先定义再使用。

( A )
14.若a和b是同类型变量,在执行了赋值语句a=b;后b中的值将放入a中,b 中的值将丢失。

( B )
15.程序的执行总是从main函数开始,在程序的最后一个函数中结束。

(B )
16.变量的三个属性是指变量的名字、变量的值和变量在内存中的地址。

(A)
17. 运算符优先顺序:赋值运算符<逻辑运算符<关系运算符<算术运算符(B)
18.对应float类型的变量,也可以用等号“==”进行数值的判断。

(B)
19.表达式:1 && 3.14 和 1 & 3 的值一样大。

(B)
20. 为了正确计算表达式既要考虑运算符的优先级,也要考虑其结合性。

(A)
21、任何C程序都是从main函数开始和结束;(A)
22. 在C程序中,使用分号“;”表示语句的结束。

(A )
23. C程序中的必须要有至少一个main的函数,可以有多个。

( B )
24. 在C程序中,无论是整数还是实数,都能准确无误的表示。

( B )
25. 在C程序中,赋值运算符的优先级最低。

(B )
26. 当输入数值数据时,对于整型变量只能输入整型值;对于实型变量只能输入实型值。

( B )
27. 在C程序中,变量可以一边定义一边使用。

( B )
28. C程序中的注释部分可有可无,可以省略。

( A)
29.字符型变量可以存放多个字符。

( B )
30.在对一个C程序进行编译的过程中,可发现注释中的拼写错误。

( B )
5.在C程序中,无论是整数还是实数,都能被准确无误地表示。

(B )
1.一个C程序的执行是从本程序的main函数开始,到main函数结束。

(A)
3.()
4.运算符优先顺序:赋值运算符<逻辑运算符<关系运算符<算术运算符(B)
二、单项选择题
R1、以下标识符中,不能作为合法的C用户定义标识符的是:( )
A .a3_b3 B.void C._123 D.abc
R2、C语言规定:在一个源程序中,main函数的位置()。

A.必须在最后
B.必须在系统调用的库函数的后面。

C.必须在最开始。

D.可以任意
R3、下列说法中正确的是()。

A. C程序书写时,不区分大小写字母
B. C程序书写时,一行只能写一个语句
C. C程序书写时,一个语句可分成几行书写
D. C程序书写时每行必须有行号
4、?已知ch是字符型变量,下面不正确的赋值语句是()。

A.ch = 5 + 9 ;
B.ch= ' a + b ';
C. ch = ' \ 0 ';
D. ch= '7' + '6' ;
5、?若有定义:int a = 7; float x = 2.5 , y = 4.7 ; 则表达式
x + a % 3 * (int) (x + y) % 2/4 的值是()。

A. 2.750000
B. 0.00000
C. 3.500000
D. 2.500000 6.已知ch是字符型变量,下面正确的赋值语句是()。

A.ch = '123' ;
B. ch=' \08 ';
C. ch =' \xff ';
D.ch =" \ ";
1. 以下标识符中,不能作为合法的C用户定义标识符的是:____________。

A)a3_b3 B)void C)_123 D)abc
2.C语言中,运算对象必须是整型的运算符是__________。

A) % B) / C) %和/ D) *
7. 在 C 程序中,用___________表示逻辑值“真”。

A)1 B)非 0 的数 C)非 1 的数 D) 大于 0 的数
N8.设int c=5和int a; a=2+(c+=c,c+8,++c), 则a=__________
A) 15 B) 14 C) 13 D) 16
9.C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符
________。

A)必须为字母或下划线。

B)必须为下划线。

C)必须为字母 D)可以是字母、数字和下划线中的任一种字符。

10. 若变量已正确定义并赋值,表达式____________不符合C语言语法。

A)a*b/c; B)3.14%2 C)2, b D)a/b/c
11. 下列说法中正确的是___________。

A) C程序书写时,不区分大表达式小写字母
B) C程序书写时,一行只能写一个语句
C) C程序书写时,一个语句可分成几行书写
D) C程序书写时每行必须有行号
12.为表示数学关系x≥y≥z,正确的C语言表达式是__________。

A) (x>=y)&&(y>=z) B) (x>=y)AND(y>=z)
C) (x>=y>=z) D) (x>=y)&(y>=z)
13.不合法的八进制数是________
A) 0 B) 028 C) 077 D)01
14、以下不能定义为用户标识符是
A Main
B _0
C _int
D sizeof
15.若x=5,y=4 则y*=x+5; y的值为()。

A. 40
B. 20 C B. 15 D. 30
16、组成C语言程序的基本单位是()。

A) 过程? ? B) 子程序
C) 函数? D) 主程序和子程序
17.下列哪个标识符是C语言合法的标识符()。

A) a*b B) -xyz
C) ba2 D) 5i
N18.若有定义:int a=7; float x=2.5, y=4.7; 则表达式
x+a%3*(int)(x+y)/4的值是()。

A) 2.75 ? B) 3.5?
C) 2.5? ? D) 0
19.设int m=1,n=2;则++m= =n的结果是()
A、0
B、1
C、2
D、3
N20. 若变量已定义并赋值,下列符合C语法的表达式是:()
A、a:=b+1
B、a=b=c+2
C、int 18.5%3
D、a=a+7=c+b
R(3)在C程序中,设一表达式中包含有int,long, unsigned和char类型的变量和数据,则表达式最后的运算结果类型是( )
A.int
B.char
C.unsigned
D.long
R21.C语言中基本的数据类型包括__________。

A) 整型、实型、逻辑型 B) 整型、实型、字符型
C) 整型、字符型、逻辑型 D) 整型、实型、逻辑型、字符型
N22. 若定义x和y为double类型,则表达式:x=2,y=x+5/2的值是__________ A) 4 B) 4.5 C) 4.0 D) 3.0
23. 在以下运算符中,优先级最高的运算符是__________
A) ? : B) ++ C) && D) +=
24.C语言中基本的数据类型不包括__________。

A) 整型B)字符串型
C)字符型 D)实型
25. 若定义int x=7,y=5,z;则表达式:z=x+5/2*y的值是__________
A) 7 B) 7.5 C) 17 D) 19.5
6.以下说法中正确的是()
A、C语言程序总是从第一个定义的函数开始执行
B、在C语言程序中,要调用的函数必须在main()函数中定义
C、C语言程序总是从main()函数开始执行
D、C语言程序中的main()函数必须放在程序的开始部分
(1)设int a=2,b;则执行b=a&&1;语句后,b的结果是( )
A.0
B.1
C.2
D.3
N(2)逗号表达式(a=3*5,a*4),a+15的值是( )
A.15
B.60
C.30
D.75
7. 若已经定义了一个字符型变量为a,下面哪个表达式的含义跟其余表达式不同:
A) a!=0 B) a!=’\0’ C) a D) !a
8. 在以下运算符中,优先级最高的运算符是__________
A) , B) [ ] C) && D) +=
9. 在C语言中,逻辑值“真”用__________表示。

A) true B) 大于0的数C) 非0的整数D) 非0的数
10. 表达式__________是满足:当c的值为1、3、5三个数中任意一个时值为“真”,否则值为“假”的表达式
A) (c=1)||(c=3)||(c=5) B) (c!=1)&&(c!=3)&&(c!=5)
C) (c==1)&&(c==3)&&(c=5) D) (c==1)||(c==3)||(c==5)
1.C语言中,int类型数据占2个字节,则long类型数据占()
A、1个字节
B、2 个字节
C、3个字节
D、4个字节
1.下列字符串是合法的标识符的是( )。

A、_HJ
B、9_student
C、 long
D、LINE 1
2.下列说法中正确的是( )。

A、 C程序书写时,不区分大小写字母
B、 C程序书写时,一行只能写一个语句
C、 C 程序书写时,一个语句可分成几行书写
D、 C程序书写时每行必须有行号
3.在C语言中,要求参加运算的数必须是整数的运算符是( )。

A、/
B、!
C、%
D、= =
4.C语言中,逻辑“真“等价于( )。

A、大于零的数
B、大于零的整数
C、非零的数
D、非零的整数
6.假设在程序中a,b,c均被定义为整型,并且已赋大于1的值,则下列能正确表
示代数式1/abc的表达式是( )。

A、1/a*b*c
B、1/(a*b*c)
C、1/a/b/(float) c
D、1.0/a/b/c
1.下列合法的字符常量是()。

A、'\084'
B、'\x43'
C、'ab'
D、"\0"
2.在C语言提供的合法的关键字是()
A、switch
B、cher
C、Case
D、sturct
3.若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是
A、 2
B、 1
C、 2.0
D、2.5
三、程序填空题
1以下程序不用第三个变量实现两个数对调的操作。

#includ “stdio.h”
main()
{
int a,b;
scanf("%d,%d",&a,&b);
a=<a+b>;(三个字符)
b=<a-b>;(三个字符)
a= a-b;
printf("%d,%d",a,b);
}
2、选择程序的运行结果。

main ( )
{ int x=1, y=2, z, a, b, c, d;
z = ++x||++y;
printf("x=%d\n", x);
printf("y=%d\n", y); /*输出结果<y=2>(三个字符) */
a=-1; b=-2; c=++a&&b++;
printf("b=%d\n", b); /*输出结果<b=-2> (三个字符)*/ }
3以下程序的结果为_______
main()
{
unsigned int a=3, b=10;
printf("%d\n",a<<2|b>>1); /*输出结果<14> */
printf("%d\n",a<<2&b>>1); /*输出结果<0> */
}
4 若x=3,y=z=4,则下列表达式的值是。

(1)?????? (z>=y>=x)? 1:0
/*值为<0> */
(2)?????? z>=y&&y>=x
/*值为<1> */
5已知float x=4.3,int y;执行语句y=(int)x后,x为<int>型(填写小写英文字母),且y=<4>(填写阿拉伯数字);
6表达式’c’&&’d’的值为<1>(填写阿拉伯数字),’c’&&’d’||!(3+4)的值为<1>(填写阿拉伯数字)。

7若x为int类型,则与逻辑表达式“x”等价的表达式是<x!=0>, 与逻辑表达式“!x”等价的表达式是<x==0>。

8 表示“整数x的值大于5”时逻辑值为“真”的表达式是<x>5>,逻辑值为“假”的表达式是<x<=5>
9已知字母A的ASCII码为十进制数65,且设ch为字符型变量,则表达式ch=‘A’-‘4’+‘9’的值为<’F’>(一个字符常量);若定义:char c=‘\72’;则变量c中包含的字符个数为<1>(数字)。

10、C语言所提供的基本数据类型的整型类型包括:<短整型>、整型、<长整型>。

(按每种类型所占字节数,从小到大排列)
第二章 C语言程序结构
(顺序程序设计、选择结构程序设计、循环控制)
一、判断题(正确的填A,错误的填B)
1. do-while语句中的条件为非0时,就结束该循环。

(B)
2.在switch-case语句中,不是每个case后都要使用break语句。

( A )
3.Break语句只能用于循环结构中。

(B? )
48. 未给变量赋初值,只是运行结果不正确,不会有其他不良影响。

(B)
5、switch语句中,可以不使用break语句;(A)
6、for语句中,三个表达式都可以省略;(A)
7(7)在for循环中使用break语句的目的是使流程跳出循环体,终止当前循环(A)
8. continue语句只能用于循环语句中。

( A )
9. while语句中的条件为0时,就结束该循环。

(A)
10.在循环体内使用break语句或continue语句的作用相同。

(B)
在C语言中,逻辑值“真”用表示。

11) 1 12) 大于0的数13) 非0的整数14) 非0的数
在循环语句的循环体中,continue语句的作用是()。

15) 立即终止整个循环 16) 继续执行continue语句之后的循环体
17) 结束本次循环 18) 结束本次循环并跳出循环
语句while(!e);中,条件!e等价于( )
19.e==0 20 .e!=0 21.e!=1 22.e==1 设int c=5和int a; a=2+(c+=c++,c+8,++c), 则a=__________
23) 15 24) 14 25) 13 26) 16
若要表示if( a不等于0 )这一关系式,则能正确表示这一关系的表达式为if ( ) 27) a<>0 28) !a 29) a=0 30) a
二、单项选择题
N1、以下不是死循环的语句是_______。

for( ; ; x+i );
while (1) {x++;}
for( i=10; ; i- -) sum+= i ;
for( ; (c=getchar()) != ‘\n’ ; ) printf(“%c” , c) ;
2.设有程序段
int k = 10 ;
while ( k = 0 ) k = k - 1 ;
以下描述正确的是()。

A. 循环体语句一次也不执行。

B. 循环是无限循环。

C. while 循环语句执行十次。

D. 循环体语句执行一次。

3.对下述程序,正确的判断是()。

main( )
{ int a,b;
scanf ("%d,%d",&a,&b);
if(a>b)a=b; b=a;
else a++; b++;
printf("%d,%d",a,b);
}
A. 有语法错误不能通过编译
B. 若输入4,5则输出5,6
C. 若输入5,4则输出4,5
D. 若输入5,4则输出5,5
R4.以下程序
main()
{
int i=010,j=10,k=0x10;
printf("%d,%d,%d\n",i,j,k);
}有语法错误不能通过编译
输出结果是( )
A.8,10,16
B.8,10,10
C.10,10,10
D.10,10,16
R5. 若变量已正确说明为int类型,要给a,b,c输入数据,以下语句正确的是__________
A) read(a,b,c); B) scanf(“%d%d%d”,a,b,c);
C) scanf(“%D%D%D”,&a,%b,%c); D) scanf(“%d%d%d”,&a,&b,&c);
R6.已知在ASCII字符集中,数字0的序号为48,下面程序的输出结果为__________。

main()
{
char x,y;
x=’0’;y=’9’;
pirntf(“%d,%d\n”,x,y);
}
A)因输出格式不合法,输出错误信息 B)48,57
C)0,9 D)48,58
7. 语句 for(k=0;k<5;++k)
{
if(k= = 3) continue;
printf(“%d”,k);
}的输出结果为_________。

A)012 B) 0124 C) 01234 D) 没有输出结果
8.为表示关系x>=y>=z,应使用C语言表达式___________。

A)(y<=x)&&(y>=z) B)(x>=y)AND(y>=z)
C)(x>=y>=z) D)(x>=y)&(y>=z)
6. 若变量已正确定义,语句“if(a>b) k=0; else k=1;”和___________等
价。

A、k=(a>b)?1:0;
B、k=a>b;
C、k=a<=b;
D、a<=b ? 0 : 1;
9.以下程序的输出结果是__________
void main()
{
int a = 2,b = 5;
printf(“a=%%%d,b=%%%d”,a,b);
}
A) a=%2,b=%5 B) a=2,b=5
C) a=%%d,b=%%d D) a=%d,b=%d
N10.以下程序的输出结果是__________
void main()
{ int x=10,y=10;
printf(“%d %d\n”,x--,--y);
}
A) 10 10 B) 9 9 C) 9 10 D) 10 9
11.若要表示if( a不等于0 )这一关系式,则能正确表示这一关系的表达式为 if (__________)
A) a<>0 B) !a C) a=0 D) a
R12对于循环语句while(1);下面()是正确的
A、死循环
B、循环一次
C、不进入循环体
D、编译有错
13.下面程序的输出是(假设 int 数据是 2 个字节)
void main()
{ int a = 32768;
printf(“a=%d\n”,a);
}
A) a=32768 B) a=32767 C) a=-32768 D) a=-1
14.表达式__________是满足:当c的值为1、3、5三个数中任意一个时值为“真”,否则值为“假”的表达式
A) (c=1)||(c=3)||(c=5) B) (c!=1)&&(c!=3)&&(c!=5)
C) (c==1)&&(c==3)&&(c=5) D) (c==1)||(c==3)||(c==5)
N15. 以下程序段的输出结果是_____
int x=3;
do
{ printf("%3d",x-=2;}
while (!(--x));
A) 1 B) 3 0
C) 1 -2 D) 死循环
16、数字字符0的ASCII值为48,若有以下程序
main()
{
char a='1',b='2';
printf("%c,",b++);
printf("%d\n",b-a);
}
程序运行后的输出结果是
A 3,2
B 50,2
C 2,2
D 2,50
17、有以下程序
main()
{
int a,b,d=25;
a = d/10 & (-1);
b = a && (-1);
printf("%d,%d\n",a,b);
}
程序运行后的输出结果是
A 6,1
B 2,1
C 6,0
D 2,0
18.若定义float a;现要从键盘输入a的数据,其整数位为3位,小数位为2位,则选用()。

A)scanf("%f",&a); ? B) scanf("%5.2f",a);
C) scanf("%6.2f",&a); ? D) scanf("%f",a);
19.若定义int i; 则以下循环语句的循环执行次数是()。

for(i=2; i==0;)
printf("%d", i--);
A) 无限次 B) 0次
C) 1次D) 2次
20.下面程序段___
x=3;
do
{
y=x--;
if(!y){printf("x");continue;}
printf("#");
}
while(1<=x<=2);
A) 将输出## B) 将输出##*
C) 是死循环 D) 含有不合法的控制表达式
21.以下程序中,while循环的循环次数是( )。

#include “stdio.h”
main( )
{int i=0;
while(i<10)
{if(i<1)continue;
if(i= =5)break;
i++;
}
}
A、1
B、10
C、6
D、死循环,不能确定次数N 22.有以下程序:
#include “stdio.h”
int a=3;
main( )
{
int s=0;
{
int a=5;
s+=a++;
}
s+=a++;printf("%d\n",s);
}
程序运行后的输出结果是( )。

A、8
B、10
C、7
D、11
23(4)下面程序段的运行结果是( )
main ( )
{int a=11,b=10,c=0;
a/=b+(b&&c);
printf(″%d\n″a);}
A.0
B.1
C.1.1
D.11
24(5)两次运行下面程序,如果从键盘上分别输入6和4,则程序的输出结果是( )
main ( )
{int x;
scanf(″%d″,&x);
if(x++>5) printf(″%d″,x);
else printf(″%d\n″,x-1);}
A.7和5
B.6和3
C.7和4
D.6和4
(6)语句while(!e);中,条件!e等价于( )
A.e=0
B.e!=0
C.e!=1
D.e==0
R25下面程序的输出是______
main()
{
int k=11;
printf("k=%d,k=%o,k=%x\n",k,k,k);
}
A) k=11,k=12,k=13 B) k=11,k=13,k=13
C) k=11,k=013,k=oXb D) k=11,k=13,k=b
26(7)下面程序的运行结果是( )
main( )
{int i=1,sum=0;
lop:sum=sum+i ;
i=i+2;
if(i<6)goto lop;
printf (″sum=%d\n″,sum);}
A.sum=4
B.sum=9
C.sum=16
D.sum=25
27. 以下程序的输出结果是__________
void main(){
int a = 2,b = 5;
printf(“a=%%%d,b=%%%d”,a,b);
}
A) a=%2,b=%5 B) a=2,b=5
C) a=%%d,b=%%d D) a=%d,b=%d
28执行下面的程序后,a的值为_____
main()
{ int a,b;
for (a=1,b=1;a<100;a++)
{
if (b>=20) break;
if (b%3==1)
{ b+=3; continue; }
b-=5;
}
}
A) 7 B) 8
C) 9 D) 10
29
30.下面的程序会()
main()
{ int x=3,y=0,z=0;
if(x=y+z) printf(“****”);
else printf(“####”);
}
A、有语法错误不能通过编译
B、输出****
C、可以通过编译,但不能通过连接,因而不能运行
D、输出####
4.以下程序的输出结果是()
main()
{ int x=10,y=10,i;
for(i=0;x>8;y=++i)
printf(“%d %d”,x--,y);
}
A、10 1 9 2
B、9 8 7 6
C、10 9 9 0
D、10 10 9 1
1.下面程序的输出是______
main()
{
int k=11;
printf("k=%d,k=%o,k=%x\n",k,k,k);
}
A) k=11,k=12,k=13 B) k=11,k=13,k=13
C) k=11,k=013,k=oXb D) k=11,k=13,k=b
2.两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是____
main()
{
int x;
scanf("%d",&x");
if (x++>5) printf("%d",x)
else printf("%d\n",x--);
}
A) 7和5 B) 6和3
C) 7和4 D) 6和4
3.读程序
#include”stdio.h”
main()
{ int a; float b,c;
scanf("%2d%3f%4f",&a,&b,&c);
printf("\na=%d,b=%f,c=%f\n",a,b,c);
}
A) a=98,b=765,c=4321
B) a=1,b=432,c=8765
C) a=98,b=765.000000,c=4321.000000
D) a=98,b=765.0,c=4321.0
5.下面程序的输出是____
main()
{int x=3,y=6,a=0;
while (x++!=(y-=1))
{
a+=1;
if (y<x) break;
}
printf("x=%d,y=%d,a=%d\n",x,y,a);
}
A) x=4,y=4,a=1 B) x=5,y=5,a=1
C) x=5,y=4,a=3 D) x=5,y=4,a=1
6.
7.
8.
8.
三、程序填空题
F1. 以下程序可判断输入的一个整数是否能被3或7整除,若能整除,输出“yes”,否则输出“no”。

请填空。

#include “stdio.h”
void main()
{
int k;
printf(“Enter a int number:”);
scanf(“%d”,<&k>);
if(<k%3==0||k%7==0>)
printf(“yes\n”);
else
printf(“no\n”);
}
N2.下面程序的功能是计算1-3+5-7+?……?-99+101的值。

main()
{
?int?i,t=1,s=0;
for(i=1;i<=101;i+=2)
{?
?t=<t*i>;
s=s+t;
t=<-t>;
}
printf("%d\n",s);
}
F3.下面程序的功能是从键盘上输入若干学生的学习成绩,统计并输出最高成绩和最低成绩,当输入为负数时结束输入。

main()
{?float?x,amax,amin;
scanf("%f",&x);
amax=x;
amin=x;
while(<x>=0>)
{?if(x>amax)?amax=x;?
if(<x<amin>)?amin=x;
scanf("%f",&x);
}
printf("\namax=%f\namin=%f\n",amax,amin);
}
F4.下面程序的功能是计算100至1000之间有多少个数其各位数字之和是5。

#include “stdio.h”
void main()
{
int i,s,k,count=0;
for(i=100;i<=1000;i++)
{
s=0;
k=i;
while(k)
{
s=s+k%10;
k=<k/10>;
}
if(<s==5>)count++;
}
printf(“%d”,count);
}
F5下列程序功能是求数组中主对角线元素之和,请补充完成
main()
{ int a[3][3],i,j,s=0;
for( i=0;i<3;i++ )
for( j=0;j<3;j++)
scanf("%d",<&a[i][j]>);
for(i=0;i<3;i++)
for( j=0;j<3;j++)
if(<i==j>)
s+=a[i][j];
printf("s=%d\n",s);
}
R6. 下面程序的功能是:输入一个字符,如果它是一个大写字母,则把它变成小写字母,如果它是一个小写字母,则把它变成大写字母,其它字符不变,请将程序补充完整:
main()
{ char ch;
scanf(“%c”,&ch);
if (ch>=’A’ && ch <=’Z’) ch=ch+32;
else if (<ch>=’a’ && ch <=’z’>)
< ch=ch-32>;
printf(“%c”,ch);
}
R7. 请将用户输入的x,y,z三个整数按照从小到大的顺序排列
main()
{
int x,y,z,t;
scanf("%d,%d,%d",&x,&y,&z);
if(x>y)
{ t=y;y=x;x=t;}
if(<x>z>)
{t=z;z=x;x=t;}
if(<y>z>)
{t=y;y=z;z=t;}
printf("small to big: %d,%d,%d\n",x,y,z);
}
F8. 以下程序从读入的整数数据中,统计大于零的整数个数和小于零的整数个数。

用输入零来结束输入,程序中用i统计大于零的个数,用变量j统计小于零的整数。

请填空。

void main()
{ int n,i,j;
i=0;j=0;
printf(“Enter INT numbers,with 0 to end\n”);
scanf(“%d”,&n);
while(<n!=0>)
{ if (n>0) i=i++;
if (n<0) j=j++;
<scanf(“%d”,&n)>;
}
printf(“i=%4d j=%4d\n”,i,j);
}
F9. 以下程序用“辗转相除法”来求出两个正整数的最大公约数。

请填空。

若两个数分别放在m和n中,求最大公约数的算法如下:
(1) 将两数中最大的那个放在m中,小的放在n中。

(2) 求出m被n除后的余数r。

(3) 若余数为0则执行步骤(7);否则执行步骤(4)。

(4) 把除数作为新的被除数;把余数作为新的除数。

(5) 求出新的余数r。

(6) 重复步骤(3)到(5)。

(7) 输出n,n即为最大公约数。

void main()
{ int r,m,n;
printf(“Enter m,n:”);
scanf(“%d%d”,<&m,&n>);
printf(“m=%d n=%d\n”,m,n);
if (m<n)
{r=m;m=n;n=r;}
r=<m/n>;
while(r!=0)
{m=n,n=r,r=m;}
printf(“
}
R10. 以下程序可判断输入的一个字符是否为小写字母,如果是,则转换为对应的大写字母并输出;否则,就原样输出。

请填空。

#include “stdio.h”
void main()
{ char k;
printf(“Enter a character here:”);
scanf(“%c”,<&k>);
if(<k>=’a’ && k <=’z’>)
printf(“%c\n”,k-32);
else
printf(“%c\n”,k);
}
1.程序打印如下形式的图形
*
* *
* * *
* * * *
main()
{ for(int i=1;i<=4;i++)
{ for(int j=1; ①j<=i ;j++)
printf( ②”*” );
printf( ③“\n” );
}
}
2.充下列程序,找出100—200之间的全部素数
# include “math.h”
main()
{ int m,k,i,n=0;
for (m=101;m<=200;m=m+2)
{
k=sqrt(m);
for ( i=2; (6)_i<=k___ ; i++ )
if ( (7)__m%i==0 __ ___ ) break;
if ( (8)__i>k________ )
{ printf(“%d”,m);
n=n+1; }
if (n%10==0) printf(“\n”);
}
printf(“\n”);
}
3.
第三章数组(正确的填A,错误的填B)
一、判断题
1.字符串“girl”大于字符串“good”。

(B)
2.C语言中有字符串变量,与字符数组等价。

( B )
R3.同一数组可以存储不同类型的值。

(?B )
N4.若有:int a[2][3]; 则 a+1 和 a[1] 的值以及类型都一样。

(B)
R5.字符 '\0' 的值就是 0 。

(A)
6.C语言中是用字符串变量来存放字符串。

( B)
7. 表达式sizeof("abc")的值是 4 。

(B)A
N8. 同数组的名字一样,函数的名字也是一种指针。

(A)
9、C语言中在定义数组时,一个数组的数组元素的数据类型可以不相同;(B)
10、char a[10];a[10]=9;上述语句编译不会出错;(A) B
R11.数组元素的下标是从1开始标号的。

( B )
N12.若a为一维数组名,则*(a+i)与a[i]等价。

( A )
13.循环语句中的continue语句的作用是结束整个循环。

( B )
14.字符串"That"小于字符串"the"。

( A )
15.字符个数多的字符串比字符个数少的字符串大。

( B )
有以下语句:int b;char c[10];,则正确的输入语句是
16) scanf("%d%s",&b,&c); 17) scanf("%d%s",&b,c);
18) scanf("%d%s",b,c); 19) scanf("%d%s",b,&c);
已有定义:char a[]="xyz",b[]={'x','y','z'};,以下叙述中正确的是
20 数组a和b的长度相同21 a数组长度小于b数组长度
22 a数组长度大于b数组长度
设有数组定义:char array[]="China";则数组array所占的存贮空间为个字节.
23 4 24 5 25 6 26 7
若定义int x[10];则Turbo C编译系统为该数组分配个字节存储单元。

27 .10 28 .11 29 .20 30 .21
二、单项选择题
R1、对两个数组a和b进行如下初始化
char a[]="ABCDEF";
char b[]={’A’,’B’,’C’,’D’,’E’,’F’};
则以下叙述正确的是()
A) a与b数组完全相同 B) a与b长度相同?
C) a和b中都存放字符串 D) a数组比b数组长度长
R2.若有说明:int a[3][4];则对a数组元素的正确引用是()
A.a[2][4]
B.a[1,3]
C.a[1+1][0]
D.a(2)(1)
R3.合法的数组定义是 ( )
A、int a[]="string";
B、int a[5]={0,1,2,3,4,5};
C、vhst s="string";
D、char a[]={0,1,2,3,4,5};
4.以下正确的声明是()。

A. int a[1][4]={1,2,3,4,5};
B. float x[3][]={{1},{2},{3}};
C. long b[2][3]={{1},{1,2},{1,2,3}};
D. double y[][3]={0};
5下列语句的执行结果是( )。

static char str[10]={“china”};
printf(“%d”,strlen(str));
A.10
B.6
C.5
D.0
R6、以下能正确定义一维数组的选项是
A int a[5]={0,1,2,3,4,5};
B char a[]={0,1,2,3,4,5};
C char a={'A','B','C'};
D int a[5]="0123";
7.下面程序段的运行结果是( )。

char a[7]=”abcdef”;
char b[4]=”ABC”;
strcpy(a,b);
printf(“%c”,a[5]);
A.空格
B.\0
C.e
D.f
8定义如下变量和数组,则输出结果是( )。

int i;
int x[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++) printf("%d",x[i][2-i]);
A.1 5 9
B.1 4 7
C.3 5 7
D.3 6 9
9.下列对一维数组a的正确说明语句为()。

A) int a(10); B) int n=10, a[n];
C) int n; scanf("%d",&n);int a[n];
D) #define SIZE 10 int a[SIZE];
10.下列二维数组的说明中,不正确的是()
A、float a[3*8][7-3]
B、float a[][3]={0,1,8};
C、#define L 3 float a[L][3]
D、int a[6],[7]
11. 执行以下程序段后,s的值是
int a[]={5,3,7,2,1,5,4,10};
int s=0,k;
for(k=0;k<8;k+=2) s+=*(a+k);
A、17
B、27
C、13
D、无定值
12. 若有定义:char c[10];从键盘输入“LiFang”,则正确的函数引用是
( )
A.scanf(“%c”,&c[10]);
B.gets(c);
C.scanf(“%s”,&c);
D.gets(c[10]);
N13. 以下程序的输出结果是_________。

main()
{ char s1[20]=“China”,s2[20]=“for”,s[10];
if(strcmp(s1,s2))
printf(“%s\n”, strcat(s2,s1));
else
printf(“%d\n”,strlen(s1));
}
A) Chinafor B) 5 C) forChina D) 3
14选择下面程序运行的结果:
#include “stdio.h”
int m[3][3]={{1},{2},{3}};
int n[3][3]={1,2,3};
main()
{
printf("%d\n",m[1][0]+n[0][0]);
printf("%d\n",m[0][1]+n[1][0]);
}
第1条printf语句行输出的结果为()
A、0
B、1
C、3
D、2
R15(9)以下对一维数组a中的所有元素进行正确初始化的是( )
A.int a[10]==(0,0,0,0);
B.int a[10]={ };
C.int a[]={0};
D.int a[10]={10*2};
16(10)
(8)若定义int x[10];则Turbo C编译系统为该数组分配( )个字节存储
单元。

A.10
B.11
C.20
D.21
N18.有如下程序
main()
{ int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
for(i=1;i<3;i++)
for(j=0;j<=i;j++) s+=a[i][j];
printf(“%d”,s);
}
该程序的输出结果是
A、18
B、19
C、20
D、21
N19.执行下列程序时输入123<空格>456<空格>789<回车>,输出结果是( )。

#include “stdio.h”
main( )
{char s[100]; int c, i;
scanf("%c",&c); scanf("%d",&i); scanf("%s",s);
printf("%c,%d,%s\n",c,i,s);
}
A、123,456,789
B、1,456,789
C、1,23,456,789
D、1,23,456
20.以下程序的输出结果是_____
main()
{char str[12]={'s','t','r','i','n','g'};
printf("%d\n",strlen(str));(strlen不算\0,sizeof算\0)
}
A) 6 B) 7
C) 11 D) 12
21.合法的数组定义是 ( )
A、int a[]="string";
B、int a[5]={0,1,2,3,4,5};
C、vhst s="string";
D、char a[]={0,1,2,3,4,5};
22.以下正确的声明是______。

A. int a[1][4]={1,2,3,4,5};
B. float
x[3][]={{1},{2},{3}};
C. long b[2][3]={{1},{1,2},{1,2,3}};
D. double y[][3]={0}; N23.阅读下面程序,回答问题。

#include “stdio.h"
void main()
{
int i,j row,column,m;
static int array[3][3] = {{100,200,300},{28,72,-30},{-850,2,6}}; m = array[0][0];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(array[i][j]<m)
{
m = array[i][j];
row = i;
column = j;
}
printf(“%d,%d,%d”
}
该程序的功能是()。

A、计算二维数组的元素和
B、求二维数组的最小值及其下标
C、对二维数组进行排序
D、求二维数组的最大值及其下标
24. 若有以下程序段:
int a[]={4,0,2,3,1},k,j,t;
for(j=1;j<5;j++)
{
t=a[j];
k=j-1;
while(k>=0&&t>a[k])
{a[k+1]=a[k];k--;}
a[k+1]=t;
}
则该程序段的功能是___(8)____
A) 对数组a进行插入排序(升序)。

B) 对数组a进行插入排序(降序)。

C) 对数组a进行选择排序(升序)。

D) 对数组a进行选择排序(降序)。

N25. 执行如下程序段,当输入为I am<CR>时,输出的结果是_________。

char str[80];
scanf(“%s”,str);
strcat(str,” sad!”);
printf(“%s”,str);
A)I am sad! B)Isad! C)I sad! D)sad!
3. main()
{ int a[10]={1,2,3,-4,5,6,7,-8,9,10},s=0;
for(int i=0;i<10;i++)
{ if (a[i]<0)
break;
s+=a[i];
}
printf("%d",s);//s=6
}
(3)下面程序的输出是
# include “stdio.h”
# include “stdlib.h”
main()
{ char str1[20],str2[20];
scanf(“%s”,str1); //从键盘输入hello world
printf("%s",str1);//输出结果1
fflush(stdin);
gets(str2); //从键盘输入crazy english
printf("%s",str2);//输出结果2 输出crazy english
}
输出结果1是:
(A)Hello(B)World (C)Hello World (D)World Hello 输出结果2是:
(A)Hello (B)World (C)Hello World (D)World Hello 7.
1. 选择下面程序运行的结果:
#include “stdio.h”
int m[3][3]={{1},{2},{3}};
int n[3][3]={1,2,3};
main()
{
printf("%d\n",m[1][0]+n[0][0]);
printf("%d\n",m[0][1]+n[1][0]);
}
第1条printf语句行输出的结果为()
A、0
B、1
C、3
D、2
2. 还是刚才1题那个程序,第2条printf语句行输出的结果为()
A、2
B、4
C、6
D、0
5.函数调用:strcat( strcpy( str1,str2 ),str3 )的功能是()
A、将串str1复制到串str2中后再连接到串str3之后;
B、将串str1连接到串str2之后再复制到串str3之后;
C、将串str2复制到串str1中后再将串str3连接到串str1之后;
C、将串str1复制到串str2中后再将串str3连接到串str2之后;
三、程序填空题
F1整型数组求和
int a[10]={0,1,2,3,4,5,6,7,8,9},sum=0,*pa;
pa=a;
for(pa=a;(<(pa-a)<10>); (<pa++>))
sum=sum+*pa;
F2.下面函数的功能是将一个字符串逆序存放,请填空。

#include "stdio.h"
#include “string.h”
void fun(char str[])
{
<int m>;
int i,j;
for(i=0,j=strlen(str);i<j;i++,j--)
{
m = str[i];
str[i] = <str[j-1]>;
str[j-1] = m;
}
printf("%s\n",str);
}
R3. 下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。

请填空。

main()
{ int i,a[20],sum,count;
sum=count=0;
for(i=0;i<20;i++) scanf("%d", <&a[i]>);
{ if(a[i]>0)
{ count++;
sum+=<a[i]>;
}
}
printf("sum=%d,count=%d\n",sum,count);
}
F4. 函数YangHui的功能是把杨辉三角形的数据赋给二维数组的下半三角,形式如下
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
其构成规律是:
第0列元素和主对角线无素均为1
其余元素为其左上方和正上方元素之和
数据的个数每行递增1
请将程序补充完整。

#defint N 6
void YangHui(int *[N][N])
{ int i,j;
x[0][0]=1
for(i=1;i<N;i++)
{ x[i][0]=<x[i][i]>=1;
for(j=1;j<i;j++)
x[i][j]=<x[i-1][j-1]>+x[i-1][j];
}
}
F5、以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。

例如,输入字符串:abc123edf456gh,执行程序后输出:123456。

#include “stdio.h”
#include “string.h”
main()
{ char s[80], d[80]; int i,j;
gets(s);
for(i=j=0;s[i]!='\0';i++)
if(s[i]>=’0’<&&>s[i]<=’9’) { d[j]=s[i]; j++; }
d[j]=<'\0'>;
puts(d);
}
R6. 将60分以下的所有成绩显示到屏幕上
int score[10]={56,76,65,43,98,67,34,89,90,76},i;
for(i=0;(<i<10>);i++)
if(<score[i]<60>)
printf(“score[%d]=%d\n”,i,score[i]);
F7.在n行n列的矩阵中,每行都有最大的数,本程序求这n个最大数中的最小一个。

#include <stdio.h>
#define N 100
int a[N][N]
void main()
{int row,col,max,min,n;
/*输入合法n(<100),和输入n*n个整数到数组a的代码略*/
for(row=0;row<n;row++){
for(max=a[row][0],col=l;col<n;col++)
if(max<a[row][col]) max=a[row][col];
if(<row==0>) min=max;
else if (min>max) <min=max>;
}
printf(“the min of max numbers if %d\n”,min);
}
F9求字符串中字符的个数
char *p=”Hello World”;
int num=0,k=0;
while(*(p+k)!=<’\0’>)
{
num=<num+1>;
k++;
}
printf(“num=%d”,num);
N10(4)统计字符串的单词数量(单词用空格分隔)
char str[30]={“Welcome my friend!”};
int i,num;
for(i=1;str[i]!=<’\0’>;i++)
{
if(str[i]!=’’ && str[i-1]==<’’>)
num++;
}
printf(“num=%d”,num);
5(2)
6(3)求字符串中字符的个数
char *p=”Hello World”;
int num=0,k=0;
while(*(p+k)!=(○1‘\0’ ))
{
(○2 num++ ;)
(○3k++; )
}
printf(“num=%d”,num);
7(4)统计字符串的单词数量(单词用空格分隔)
char str[30]={“Welcome my friend!”};
int i,num;
for(i=1;str[i]!=(○1‘\0’ );i++)
{
if(str[i]!=(○2‘’) && str[i-1]==(○3’’))
num++;
}
printf(“num=%d”,num);
折半查找法:设数组长度为n,则将输入的数m与a[n/2]比较,若m<a[n/2],则将a[0]到a[n/2-1]的数继续折半进行查找;若m=a[n/2],则表示找到该数的位置;若m>a[n/2],则将a[n/2+1]到a[n]的数继续折半进行查找。

8. 程序功能:有10个数按升序放在一个数组中,输入一个数,要求用折半查找该数是数组中的第几个元素,如果该数不在数组中,打印出“NO”。

#include “stdio.h”
void main()
{
int a[10]={12,32,45,62,71,76,80,85,90,95};
int num,bott,top,mid;
scanf("%d",&num);
bott = 0, top = 9;
while(bott小于等于top)
{ mid=(bott+top)/2;
if( num == a[mid])
{printf("%d is the %d number\n",num,mid); break;}
else if( num 小于 a[mid]) <top=mid-1>;
else bott=mid+1; }
if(<bott>大于top)
printf("NO\n");}
第四章函数
一、判断题(正确的填A,错误的填B)
R1.C程序中,函数的定义和函数的调用均可以嵌套。

(B)
R2.C程序中,若对函数类型未加显示说明,则函数的隐含类型为“int”。

(A)3.在调用函数时,只能将实参的值传递给形参,形参的值不能传递给实参。

(A)R4.函数的返回值是通过函数中的return语句获得的。

(A)
5.用数组名作函数参数时传递的是数组的值。

(B)
6.全局变量可以被任何一个函数中的任何一个表达式使用。

(B)
7.一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据。

(A)
8.C函数既可以嵌套定义又可以递归调用.( B )
9. C语言规定,函数的实参应与其对应的形参类型一致。

( A )
10.若全局变量和局部变量同名,则全局变量被遮蔽。

(A)
11.若要在函数 f 中修改变量 a 的值,应该把 a 的地址传递给 f 。

(A)
12. 当数组做为参数传递给函数时,是把数组中的所有元素都传递给了该函数。

(B)
N13. 给局部变量加上static属性后,其生存期和作用域都扩展了。

(B)
14、在某个变量前用extern声明,可以扩展变量的作用域;(B)
15、外部变量采用静态存储,内部变量采用动态存储;(B)
16、静态外部变量只能在本文件使用,其他文件不能使用该变量;(A)
17(1)不同函数内的变量,可以用相同的名字(A)
N18(2)设函数调用表达式为:fun(fun(a,b),c),则函数fun带3个参数。

(B)19(4)C语言中,函数返回值的类型是由定义函数时所指定的函数类型决定的(A)
20(5)在main函数内定义的变量在整个程序范围内有效(B)
21(10)静态外部变量,不允许其它文件中的函数访问(A)
22(1)不同函数内的变量,可以用相同的名字(A)
N23(2)设函数调用表达式为:add(sub(a,b),c),则函数add带3个参数。

(B)
24. 在C程序中return语句最多可以返回一个值。

( A )
25.若函数类型和return语句中表达式类型不一致时,返回类型以函数类型为准。

( A )
26.在C语言中实参和与其对应的形参各占用独立的存储单元。

(A)
27 由一个函数调用另一个函数,被调用的函数又调用其他函数的关系,称为函
数的嵌套调用。

(T)
28 一个函数直接或者间接地自己调用自己的过程成为递归调用。

(T)
29 使用递归方法解决问题,必须要有一个明确的结束递归的条件。

(T)
30 递归调用也称为循环定义,即用其自身来定义自己的过程。

(T)
二、单项选择题
1、?C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是()
A.地址传递
B.单向值传递
C.由实参传给形参,再由形参传回给实参
D.由用户指定传递方式
R2、若调用一个函数,且此函数中没有return语句,则正确的说法是()
该函数
A.没有返回值
B.返回若干个系统默认值
C.能返回一个用户所希望的函数值
D.返回一个不确定的值
R3、C语言允许函数值类型缺省定义,此时该函数值隐含的类型是()
A.float型
B.int型
C.long型
D.double型
R4、在C语言程序中,以下描述正确的是()。

相关文档
最新文档