C语言全部考试系统题库含答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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语言程序中,以下描述正确的是()。