C语言程序设计试题及答案完整版

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

C语⾔程序设计试题及答案完整版
C语⾔复习资料5元
必须清楚的:
1)程序结构是三种: 顺序结构, 循环结构(三个循环结构), 选择结构(if 和switch)
2)读程序都要从main()⼊⼝, 然后从最上⾯顺序往下读(碰到循环做循环,碰到选择做选择)。

3)计算机的数据在电脑中保存是以⼆进制的形式. 数据存放的位置就是他的地址.
4)bit是位是指为0 或者1。

byte 是指字节, ⼀个字节= ⼋个位.
5)⼀定要记住⼆进制如何划成⼗进制。

概念常考到的:
1、编译预处理不是C语⾔的⼀部分,不再运⾏时间。

C语⾔编译的程序称为源程序,它以ASCII数值存放在⽂本⽂件中。

2、每个C语⾔程序中main函数是有且只有⼀个。

3、在函数中不可以再定义函数。

4、算法的是⼀定要有输出的,他可以没有输⼊。

5、break可⽤于循环结构和switch语句。

6、逗号运算符的级别最低。

第⼀章
1)合法的⽤户标识符考查:
合法的要求是由字母,数字,下划线组成。

有其它元素就错了。

并且第⼀个必须为字母或则是下划线。

第⼀个为数字就错了。

关键字不可以作为⽤户标识符号。

main define scanf printf 都不是关键字。

迷惑你的地⽅If是可以做为⽤户标识符。

因为If中的第⼀个字母⼤写了,所以不是关键字。

2)实型数据的合法形式:
2.333e-1 就是合法的,且数据是2.333×10-1。

考试⼝诀:e前e后必有数,e后必为整数。

.
3)字符数据的合法形式::
'1' 是字符占⼀个字节,"1"是字符串占两个字节(含有⼀个结束符号)。

'0' 的ASCII数值表⽰为48,'a' 的ASCII数值是97,'A'的ASCII数值是65。

4)整型⼀般是两个字节, 字符型是⼀个字节,双精度⼀般是4个字节:
考试时候⼀般会说,在16位编译系统,或者是32位系统。

碰到这种情况,不要去管,⼀样做题。

掌握整型⼀般是两个字节, 字符型是⼀个字节,双精度⼀般是4个字节就可以了。

5)转义字符的考查:
在程序中int a = 0x6d,是把⼀个⼗六进制的数给变量a 注意这⾥的0x必须存在。

在程序中int a = 06d, 是⼀个⼋进制的形式。

在转义字符中,?\x6d? 才是合法的,0不能写,并且x是⼩写。

…\141? 是合法的,0是不能写的。

…\108?是⾮法的,因为不可以出现8。

6)算术运算符号的优先级别:
同级别的有的是从左到右,有的是从右到左。

7)强制类型转换:
⼀定是(int)a 不是 int(a),注意类型上⼀定有括号的。

注意(int)(a+b)和(int)a+b 的区别。

前是把a+b转型,后是把a转型再加b。

8)表达式的考查:
是表达式就⼀定有数值。

赋值表达式:表达式数值是最左边的数值,a=b=5;该表达式为5,常量不可以赋值。

⾃加、⾃减表达式:假设a=5,++a(是为6),a++(为5);
运⾏的机理:++a 是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再⽤这
个++a表达式的数值为6,⽽a++是先⽤该表达式的数值为5,然后再把a的数值加上1为6,
再放到变量a中。

进⾏了++a和a++后在下⾯的程序中再⽤到a的话都是变量a中的6了。

考试⼝诀:++在前先加后⽤,++在后先⽤后加。

逗号表达式:优先级别最低;表达式的数值逗号最右边的那个表达式的数值。

(2,3,4)的表达式的数值就是4。

9)位运算的考查:
会有⼀到⼆题考试题⽬。

总的处理⽅法:⼏乎所有的位运算的题⽬都要按这个流程来处理(先把⼗进制变成⼆进制再变成⼗进制)。

例1:char a = 6, b;
b = a<<2; 这种题⽬的计算是先要把a的⼗进制6化成⼆进制,再做位运算。

例2:⼀定要记住,
例3:在没有舍去数据的时候,<<左移⼀位表⽰乘以2;>>右移⼀位表⽰除以2。

10)018的数值是⾮法的,⼋进制是没有8的,逢8进1。

11)%符号两边要求是整数。

不是整数就错了。

12)三种取整丢⼩数的情况:
1、int a =1.6;
2、(int)a;
3、
第⼆章
1)printf函数的格式考查:
%d对应整型;%c对应字符;%f对应单精度等等。

宽度的,左对齐等修饰。

%ld对应long int;%lf 对应double。

2)scanf函数的格式考察:
注意该函数的第⼆个部分是&a 这样的地址,不是a;
Scanf(“%d%d%*d%d”,&a,&b,&c); 跳过输⼊的第三个数据。

3)putchar ,getchar 函数的考查:
char a = getchar() 是没有参数的,从键盘得到你输⼊的⼀个字符给变量a。

putchar(…y?)把字符y输出到屏幕中。

4)如何实现两个变量x ,y中数值的互换(要求背下来)
不可以把x=y ,y=x; 要⽤中间变量t=x;x=y;y=t。

5)如何实现保留三位⼩数,第四位四舍五⼊的程序,(要求背下来)
这个有推⼴的意义,注意x = (int)x 这样是把⼩数部分去掉。

第三章
特别要注意:c语⾔中是⽤⾮0表⽰逻辑真的,⽤0表⽰逻辑假的。

1)关系表达式:
表达式的数值只能为1(表⽰为真),或0(表⽰假)
当关系的表达是为真的时候得到1。

如9>8这个是真的,所以表达式的数值就是1;
2)逻辑表达式:
只能为1(表⽰为真),或0(表⽰假)
a) 共有&& || !三种逻辑运算符号。

b) !>&&>|| 优先的级别。

c) 注意短路现象。

考试⽐较喜欢考到。

d) 要表⽰x 是⽐0⼤,⽐10⼩的⽅法。

0
else 是与最接近的if且没有else的相组合的。

4)条件表达式:
表达式1 ?表达式2 :表达式3
注意是当⾮0时候是表达式2的数值,当为0是就是表达式2的数值。

考试⼝诀:真前假后。

5)switch语句:
a)⼀定要注意有break 和没有break的差别,书上(34页)的两个例⼦,没有break时候,只要有⼀个case 匹配了,剩下的都要执⾏,有break则是直接跳出了swiche语句。

b)switch只可以和break⼀起⽤,不可以和continue⽤。

第四章
1)三种循环结构:
a)for();while(); do- while()三种。

b)for循环当中必须是两个分号,千万不要忘记。

c)写程序的时候⼀定要注意,循环⼀定要有结束的条件,否则成了死循环。

d) do-while()循环的最后⼀个while();的分号⼀定不能够丢。

(当⼼上机改错)
2) break 和 continue的差别
记忆⽅法:
break:是打破的意思,(破了整个循环)所以看见break就退出真个⼀层循环。

continue:是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执⾏,跳到循环开始,然后判断循环条件,进⾏新⼀轮的循环。

3)嵌套循环
就是有循环⾥⾯还有循环,这种⽐较复杂,要⼀层⼀层⼀步⼀步耐⼼的计算,⼀般记住两层是处理⼆维数组的。

4) while((c=getchar())!=?\n?)和while(c=getchar() !=?\n?)的差别
先看a = 3 != 2 和(a=3)!=2 的区别:
(!=号的级别⾼于=号所以第⼀个先计算3!=2)第⼀个a的数值是得到的1;第⼆个a的数值是3。

考试注意点:括号在这⾥的重要性。

第五章
函数:是具有⼀定功能的⼀个程序块;
1) 函数的参数,返回数值(⽰意图):
main()
{
int a = 5,b=6,c;
c = add(a,b);
printf(“%d”,c);
}
调⽤函数
a,b是实参
整个函数得到⼀个数值就是
Add函数的返回数值。

int add ( int x, int y)
{
int z;
z=x+y;
return z;
}
被调⽤函数
x,y是形式参数
函数返回数值是整型
z就是这个add函数计算后得到的结果,就是函数返回给主程序的返回数值。

程序是在从上往下顺序执⾏,当碰到了函数add后,把a,b的数值穿给调⽤函数,程序暂时中断等待返回数值。

当得到了返回数值后,再顺序的往下执⾏
2)⼀定要注意参数之间的传递
实参和形参之间传数值,和传地址的差别。

(考试的重点)
传数值的话,形参的变化不会改变实参的变化。

传地址的话,形参的变化就会有可能改变实参的变化。

3)函数声明的考查:
⼀定要有:函数名,函数的返回类型,函数的参数类型。

不⼀定要有:形参的名称。

第六章
指针变量的本质是⽤来放地址,⽽⼀般的变量是放数值的。

int *p 中*p和p的差别:
*p可以当做变量来⽤;*的作⽤是取后⾯地址p⾥⾯的数值
p是当作地址来使⽤。

*p++ 和(*p)++的之间的差别:改错题⽬中很重要
*p++是地址会变化。

(*p)++ 是数值会要变化。

三名主义:(考试的重点)
数组名:表⽰第⼀个元素的地址。

数组名不可以⾃加,他是地址常量名。

(考了很多次)
函数名:表⽰该函数的⼊⼝地址。

字符串常量名:表⽰第⼀个字符的地址。

第七章
1⼀维数组的重要概念:
对a[10]这个数组的讨论。

1、a表⽰数组名,是第⼀个元素的地址,也就是元素a[10]的地址。

2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。

3、a是⼀维数组名,所以它是列指针,也就是说a+1是跳⼀列。

对a[3][3]的讨论。

1、a表⽰数组名,是第⼀个元素的地址,也就是元素a[10]的地址。

2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。

3、a是⼆维数组名,所以它是⾏指针,也就是说a+1是跳⼀⾏。

4、a[0]、a[1]、a[2]也都是地址常量,不可以对它进⾏赋值操作,同时它们都是列指针,a[0]+1,a[1]+1,a[2]+1都是跳⼀列。

5、注意a和a[0] 、a[1]、a[2]是不同的,它们的基类型是不同的。

前者是⼀⾏元素,后三者是⼀列元素。

⼆维数组做题⽬的技巧:
如果有a[3][3]={1,2,3,4,5,6,7,8,9}这样的题⽬。

步骤⼀:把他们写成:第⼀列第⼆列第三列
a[0]à 1 2 3 ->第⼀⾏
a[1]à 4 5 6—>第⼆⾏
a[2]à7 8 9->第三⾏
步骤⼆:这样作题⽬间很简单:
*(a[0]+1)我们就知道是第⼀⾏的第⼀个元素往后⾯跳⼀列,那么这⾥就是a[0][1]元素,所以是1。

*(a[1]+2)我们就知道是第⼆⾏的第⼀个元素往后⾯跳⼆列。

那么这⾥就是a[1][2]元素,所以是6。

⼀定记住:只要是⼆维数组的题⽬,⼀定是写成如上的格式,再去做题⽬,这样会⽐较简单。

数组的初始化,⼀维和⼆维的,⼀维可以不写,⼆维第⼆个⼀定要写
int a[]={1,2} 合法。

int a[][4]={2,3,4}合法。

但int a[4][]={2,3,4}⾮法。

⼆维数组中的⾏指针
int a[1][2];
其中a现在就是⼀个⾏指针,a+1跳⼀⾏数组元素。

搭配(*)p[2]指针
a[0],a[1]现在就是⼀个列指针。

a[0]+1 跳⼀个数组元素。

搭配*p[2]指针数组使⽤
还有记住脱⾐服法则:
a[2] 变成*(a+2)a[2][3]变成*(a+2)[3]再可以变成*(*(a+2)+3)
这个思想很重要!
第⼀部分:基础知识(20项,共40分)】
1.⼀个C语⾔程序是由()组成的。

A.主程序B.⼦程序C.函数D.过程
2.转换说明符%x的输出形式是()。

A.⼗进制B.⼋进制C.⼗六进制D.⼆进制
3.若a、b均为int型变量,且a=100,则关于循环语句for(b=100;a!=b;++a,++b) printf ( “------------“) ;的正确说法是()。

A.循环体只执⾏⼀次B.死循环
C.循环体⼀次也不执⾏D.输出-----------
4.若x、y、z均为int 型变量,则执⾏下列语句后的z值为()。

x=1; y=2; z=3; z=(x>y)?z :y ; z = (z
A.1 B.4 C.2 D.3
5.下⾯标识符中,合法的⽤户标识符为()。

A.P#Ad B.12a C.char D._int
6.‘A’+ 3 的结果是()。

A.’A’B.’D’的ASCⅡ码C.65 D.3
7.语句char str[20];说明str是⼀个字符串,最多能表⽰()。

A.20个字符B.19个字符C.18个字符D.21个字符
8.将int 型变量n转换成float型变量的⽅法是()。

A.float n B.(float)n C.float(n) D.21个字符
9.以下不正确的描述是()。

A.使⽤while和do-while循环时,循环变量初始化的操作应在循环语句之前完成B.while循环是先判断表达式后执⾏循环体语句
C.do-while和for循环均是先执⾏循环体语句,后判断表达式
D.for、while、do-while循环中的循环体均可以由空语句构成
10.在循环中使⽤break 语句的功能是()。

A.使程序的执⾏跳出break所在的那⼀重循环
B.使程序执⾏结束
C.跳出包含此break语句的所有循环
D.终⽌本次循环,继续下次循环
11.下⾯是⼀个初始化指针的语句:int *px = &a其中指针变量的名字应该是()。

A.*pz B.a C.px D.&a
12.若指针px为空指针,则()。

A.px指向不定B.px的值为零
C.px的⽬标为零D.px的地址为零
13.对于语句int *px[10],以下说法正确的是()。

A. px是⼀个指针,指向⼀个数组,数组的元素是整数型。

B. px是⼀个数组,其数组的每⼀个元素是指向整数的指针。

C. A和B均错,但它是C语⾔的正确语句。

D. C语⾔不允许这样的语句。

14.具有相同基类型的指针变量P和数组变量Y,下列写法中不合法的是()。

A.P = Y B.*P = Y[i]
C.P + &Y[i] D.P = &Y
15.已知static int a[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p,则表达式*(p[0]+1)+**(q+2)的值是()。

A.5 B.4 C.6 D.7
16.已知for(;n>=1;n--),下列语句实现将S2所指字符数组中前n个字符复制到S1所指字符数组中,其中代码不正确的是()。

A.*S1++=*S2++ B.S1[n-1]=S2[n-1]
C.*(S1+n-1)=*(S2+n-1) D.*(++S1)=*(++S2)
17.调⽤函数的实参与被调⽤函数的形参应该有如下关系()。

A.只要求实参和形参个数相等B.只要求形参和实参顺序相同
C.只要求实参和形参数据类型相同D.上述三点均需具备
18.联合体成员的数据类型()。

A.相同B.可以不同也可以相同
C.长度⼀样D.是结构体变量
19.由系统分配和控制的标准输出⽂件为()。

A.键盘B.磁盘C.打印机D.显⽰器
20.C语⾔标准库函数fread(fd,buffer,n)的功能是()。

A.从⽂件fd中读取长度不超过n个字节的数据送⼊buffer指向的内存区域
B.从⽂件fd中读取长度不超过n-1个字节的数据送⼊buffer指向的内存区域
C.从⽂件fd中读取长度不超过n个字符送⼊buffer指向的内存区域
D.从⽂件fd中读取长度不超过n-1个字符送⼊buffer指向的内存区域第⼆部分:简单程序(12项,共30分)
21.下列程序
main()
{ int x,y,z;
x=y=2;z=3;
y=z++-1;
printf(“%d\t%d\t”,x,y);
y=++x-1;
printf(“%d \t%d\n”,x,y);
y=z---1;
printf(“%d\t%d\t”,z,y);
y=--z-1;
printf(“%d\t%d\n”,z,y);
}
运⾏后输出的数据为_______。

A. 3 1 4 2
B. 3 1 3 3
C. 2 2 3 2
D. 2 1 3 2
2 4 1
3 2
4 2 2 3 3 2 1 1 3 1 2
22.下列程序
main()
{ int i,j;char *a,c;
a=”computer”;
printf(“%s”,a);
for(i=0,j=7;i
{ c=a[i];
*(a+i)=*(a+j);
a[j]=c;
}
printf(“->%s\n”,a);
c=a[j-1,i=2+j];
printf(“a[%d]=%c\n”,i,c);
}
运⾏后输出的数据为___ .
A. computer->computer
B. computer->retupmoc
a[3]=u a[5]=m
C. computer->retupmoc
D. computer->retupmoc
a[4]=p a[2]=t
23.下列程序
int sum(int n)
{ int p=1,s=0,i;
for(i=1;i<=n;i++) s+=(p*=i); return s;
}
main()
{ printf(“sum(5)=%d\n”,sum(5)); }
运⾏后输出的数据为_ ___
A.sum(5)=151
B.sum(5)=152
C.sum(5)=153 Dsum(5)=155
24.下列程序
main()
{ static int a[]={5,6,7,3,2,9};
int s1,s2,i,*ptr;
s1=s2=0;
ptr=&a[0];
for(i=0;i<5;i+2=2)
{ s1+=*(ptr+i);
s2+=*(ptr+i+1);
}
printf(“s1=%d,s2=%d\n”,s1,s2); }
运⾏后输出的数据为_____
A.s1=18,s2=14
B.s1=14,s2=32
C.s1=14,s2=18
D.s1=15,s2=19
25.下列程序
int c=1;
main()
{static int a=5;int b=6;
printf(“a=%d b=%d c=%d\n”,a,b,c);
func();
prin tf(“a=%d,b=%d,c=%d\n”,a,b,c);
func();
}
func()
{ static int a=4;int b=10;
a+=2;
c+=10;
b+=c;
printf((“a=%d,b=%d,c=%d\n”,a,b,c);
}
运⾏后输出的数据为_ ___.
A. a=5 b=6 c=1
B. a=5 b=6 c=1 a=6 b=21 c=11 a=7 b=17 c=11 a=5 b=6 c=11 a=5 b=6 c=11 a=8 b=31 c=21 a=9 b=17 c=21
C. a=5 b=6 c=1
D. a=5 b=6 c=1 a=6 b=21 c=11 a=7 b=17 c=11 a=6 b=21 c=11 a=7 b=17 c=11 a=8 b=31 c=21 a=9 b=38 c=21 26.已知struct student
{char ﹡name;
int student_n;
char grade;
};
struct student temp,*p=&temp
/doc/4117413708.html
=”chou”;
则下⾯不正确的是_______。

表达式值
A.p→name chou
B.(*p)→name+2 h
C.*p→name+2 e
D.*(p→name+2) o
27.下列程序
#define MAX 10
main()
{ int i,sum,a[ ]={1,2,3,4,5,6,7,8,9,10}; sum=1;
for(i=0;i
sum-=a[i];
printf(“SUM=%d”,sum);
}
程序运⾏结果是:
A.SUM=55
B.SUM=-54
C.SUM=-55
D.SUM=54
28.下列程序
void inv(int*x,int n)
{int *p,t,*i,*j,m=(n-1)/2;
i=x;
j=x+n-1;
p=x+m;
for(;i
{ t=*i;
*i=*j;
*j=t;
}
return;
}
main( )
{ static int i,a[10]={3,7,9,11,0,6,7,5,4,2}; inv(a,10);
for(i=0;i<10;i++)
printf(“%d,”,a[i]);
}
程序运⾏结果:
A.0,2,3,4,5,6,7,7,9,11
B.11,9,7,7,6,5,4,3,2,0
C.3,7,9,11,0,6,7,5,4,2
D.2,4,5,7,6,0,11,9,7,3
29.下列程序
main()
{ int a[10],b[10],*pa,*pb,i;
pa=a;pb=b;
for(i=0;i<3;i++,pa++,pb++) {*pa=i;*pb=2*i;
printf(“%d\t%d\n”,*pa,*pb);
}
printf(“\n”);
pa=&a[0];
pb=&b[0];
for(i=0;i<3;i++)
{*pa=*pa+i;
*pb=*pb*i;
printf(“%d\t%d\n”,*pa++,*pb++); }
}
运⾏后输出的数据为______。

A. 0 0
B.0 0
C. 0 0
D. 0 0
1 2 1 2 1 2 2 2
2 4 2 4 2 4 2 4
0 0 0 0 0 0 0 0
2 2 2 2 1 2 1 2
4 8 2 4 2 4 4 8
30.下列程序
copy_string(from,to)
char *from,*to;
{ while(*from) *to++=*from++; *to=?\0?;
}
main()
{ static char s1[ ]=”c_program.”; static char s2[80];
copy_string(s1,s2);
printf(“%s\n”,s2);
copy_string(“123”,s2);
printf(“%s\n”,s2);
}
运⾏后输出的数据为()。

A. c_program 123
B.123
C. c_program123
D. c_program
123
31.下列程序:
#include
main()
{ char a[40],b[40];
int i,j;
printf(“Enter the string:”); scanf(“%s”,a);
i=j=0;
while(a[i]!=?\0?)
{ if(!(a[i]>=?\0?&&a[i]<=?9?)) { b[j]=a[i]; j++;
}
++i;
}
b[j]=?\0?;
printf(“%s”,b);
}
运⾏后输出的结果是()。

A. 把键盘输⼊的字符串显⽰在屏幕上
B. 把键盘输⼊的字符串中的数字字符删掉,然后显⽰该字符串
C. 把键盘输⼊的字符串中的字符0和9删掉,然后显⽰该字符串
D. 只保留由键盘输⼊的字符串中的字母数字,然后显⽰该字符串
32.下列程序
#include
main()
{ char a[80];
int i,j;
printf(“Enter the string:”);
scanf(“%s”,a);
i=0;
while(a[i]!=?\0?)
{ if(a[i]>=?A?&&a[i]<=?Z?)
a[i]=a[i]-…A?+?a?;
}
printf(“%s”,a);
}
运⾏后输出的结果是()。

A. 把键盘输⼊的字符串中的⼤写字母变换成⼩写字母,然后显⽰变换后的字符串。

B. 把键盘输⼊的字符串中的数字字符删除掉,然后显⽰该字符串。

C. 把键盘输⼊的字符串中的⼩写字母变换成⼤写字母,然后显⽰变换后的字符串。

D. 把键盘输⼊的字符串原封不动地显⽰在屏幕上。

第⼆卷
说明:(1)第⼆卷含⼆⼤题,均属填空题,每题各有5个空栏,在阅读和理解原题程序的基础上,在空栏处填⼊适当的字符、语句,以构成⼀个正确的C语⾔程序。

(2)每空栏填对得3分,两⼤题共10个空栏,全填对得30分。

试题⼀
⼀个整数称为完全平⽅数,是指它的值是另⼀个整数的平⽅。

如81是个完全平⽅数,因为它是9的平⽅。

下列程序是在三位的正整数中寻找符合下列条件的整数:它既是完全平⽅数,且三位数字中⼜有两位数字相同:例如144(12*12)、
676(26*26)等,从程序中找出并输出所有满⾜上述条件的三位数。

程序如下:
main()
{ int n,k,a,b,c;
for(k=1; ;k++)
{______①______
if(n<100) _____②_____
if(n<999) _____③_____
a=n/100;
b=_____④_____
c=n%10,
if(flag(a,b,c))
printf(“n=%d=%d*%d\n”,n,k,k);
}
}
flag_____⑤_____
{ return(!(x-y)*(x-z)*(y-z));
}
试题⼆
以下程序所列函数replace(char *s1,char *s2,char str1,char *str2)的功能是将已知字符串s1中的所有与字符串str1相同的⼦串替换成字符串str2,并将替换后所⽣成的新的字符串存于字符数组s2中。

说明:⽣成字符串s2的过程是⼀个循环,顺序访问字符串s1的每个字符;当从某个字符开始不能构成与str1相同的⼦字符时,就把该字符拷贝到数组s2,当从某个字符开始能构成⼀个与str1相同的⼦字符串时,就将字符串str2的各字符拷贝到字符数组s2,并继续访问字符串s1中那个⼦串之后的字符,直⾄字符串s1被访问完毕,字符复制即告结束。

下列程序运⾏的结果是输出:
ABCXYZdefg abABCXYZd abab
程序如下:
replace(char *s1,char *s2,char *str1,char *str2)
{ char *t0,*t1,*t2;
while( ⑥)
{ for(t0=s1,t1=str1;*t1!=’\0’&& ⑦;t0++,t1++);
if(*t1!=?\0?)
*s2++= ⑧;
else { for(t1=str2;*t1!=?\0?;)
*s2++= ⑨;
⑩;}
}
*s2=?\0?;
}
main()
{ char s1[]=”abcdefg ababcd abab.”;
char s2[80];
repla ce(s1,s2,”abc”,”ABCXYZ”);
printf(“%s\n”,s2);
}
参考答案
第⼀卷
⼀.基础知识(20项,共40分)
1.C
2.C
3.C
4.A
5.D
6.B
7.B
8.B
9.C 10.A 11.C 12.B 13.B 14.D 15.A 16.D 17.D 18.B 19.D 20.A ⼆.简单程序
21.C 22.B 23.C 24.C 25.A 26.B 27.B 28.D 29.A 30.D 31.B 32.A
第⼆卷试题⼀:①n=k*k ②continue③break④n%100/10或(n-100*a)/10或n/10-(n/100)*10⑤int x,int y,int z
试题⼆:
⑥*s1或s1!=’\0’⑦*t0==*t1或*t1==*t0 ⑧*s1++
⑨*t1++ ⑩s1=t0或s1=s1+strlen(str1)
C语⾔程序设计
第⼀部分:基础知识(20题,共40分)
1、⼀个C语⾔的源程序中,()。

(A)必须有⼀个主函数(B)可以有多个主函数
(C)必须有主函数和其他函数(D)可以没有主函数
2、下列数据中,为字符串常量的是()。

(A)‘A’(B)“house”(C)How do you do.(D)’$abc’
3、若有定义:int a=8,b=5,c;,执⾏语句c=a/b⼗0.4;后,c的值为()。

(A)1.4 (B)1 (C)2.0 (D)2
4、设有int x=11;则表达式(x++*l/3)的值为()。

(A)3 (B)4 (C)11 (D)12
5、执⾏x=5>1+2&&2||2*4<4-!0后,x的值为()。

(A)-l (B)O (C)1 (D)5
6、以下变量x、y、z均为double类型且已正确赋值,不能正确表⽰数学式⼦:(x)/(y×z)的c语⾔表达式是()。

(A)x/y*z (B)x*(1/(y*z)) (C) x/y*1/z (D)x/y/z
7、设有以下说明语句
struct ex
{int x;float y; char z;}example;
则下⾯的叙述不正确的是()。

(A)struct是结构体类型的关键字(B)example是结构体类型名
(C)x,y,z都是结构体成员名(D)struct ex是结构体类型
8、假定w、x、y、z、m均为int型变量;有如下程序段:
w=1;x=2;y=3;z=4;
m=(w
则该程序段执⾏后,m的值是()。

(A)4 (B)3 (C)2 (D) 1
9、在调⽤函数时,如果实参是简单变量,它与对应形参之间的数据传递⽅式是()。

(A) 地址传递(B) 单向值传递
(C) 由实参传给形参,再由形参传回实参(D) 传递⽅式由⽤户指定
10、以下定义语句中,错误的是()。

(A)int a[]={1,2};(B) char *a[3];
(C)char s[10]="text";(D) int n=5,a[n];
11、下列程厅执⾏后的输出结果是()。

main()
{ char arr[2][4];strcpy(arr,"you");strcpy(arr[1],"me");
arr[0][3]='&';
printf("%s\n",arr);
}
(A)you&me (B)you (C) me (D)err
12、标有/* */的语句的执⾏次数是()。

int y,i;
for(i=O;i<20;i++)
{ if(i%2==0)
continue;
y+=i; /* */
}
(A) 20 (B) 19 (C) 10 (D) 9
13、若⽤数组名作为函数调⽤的实参,传递给形参的是()。

(A) 数组的⾸地址(B) 数组第⼀个元素的值
(C) 数组中全部元素的值(D) 数组元素的个数
14、下列语句执⾏后的结果是()。

y=5;p=&y;x=*p++;
(A) x=5,y=5 (B) x=5,y=6 (C) x=6,y=5 (D) x=6,y=6
15、执⾏下⾯的语句后,表达式*(p[0]+1)+**(q+2)的值为()。

int a[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p;
(A) 8 (B) 7 (C) 6 (D) 5
16、经过下⾯的语句后
int i,a[10],*p;
定义后,下列语句中合法的是()。

(A) p=100:(B) p=a[5];(C) p=a+2;(D) p=&(i+2);
17、若有以下说明和语句,则对pup中sex域的正确引⽤⽅式是()。

struct pupil
{char name[20];
int sex;
}pup,*p;
p=&pup;
(A)p.pup.sex (B)p->pup.sex (C)(*p).pup.sex (D)(*p).sex
18、若已定义了如下的共⽤体类型变量x,则x所占⽤的内存字节数为()。

union data
{ int i;
char ch;
double f;
}x;
(A) 7 (B) 11 (C)8 (D) 10
19、若有下⾯的说明和定义:
struct test
{ int m1;char m2;float m3;
union uu{ char u1[5];int u2[2];}ua;
} myaa;
则sizeof(struct test)的值是()。

(A) 12 (B) 16 (C) 14 (D)9
20、若要打开:A盘上user⼦⽬录下名为abc.txt的⽂本⽂件进⾏读、写操作,下⾯符合此要求的函数调⽤是()。

(A)fopen("A:\\user\\abc.txt","r") (B) fopen("A:\\user\\abc.txt","r+")
(C)fopen("A:\\user\\abc.txt","rb") (D) fopen("A:\\userl\\abc.txt","w")
第⼆部分:简单程序(12题,共30分)
21、以下程序的运⾏情况是()。

main()
{int i=1,sum=0;
while(i<10)
sum=sum+1;
i++;
printf("i=%d,sum=%d",i,sum);
}
(A) i=10,sum=9 (B) i=9,sum=9 (C) i=2,sum=l (D) 运⾏出现错误
22、若输⼊B,以下程序的运⾏结果为()。

main()
{ char grade;scanf("%c",&grade);
switch(grade)
{case 'A':printf(">=85");
case 'B':
case 'C':printf(">=60");
case 'D':printf("<60");
default:printf("error");}
}
(A)>=85 (B)>=60 (C)>=60<60error (D) error
23.有如下程序main()
{ int x=23;
do
{ printf("%d",x--);}while(!x);
}
该程序的执⾏结果是()。

(A)321 (B)23 (C)不输出任何内容(D)陷⼊死循环
24.有如下程序
int func(int a,int b)
{ return (a+b);}
main()
{int x=2,y=5,z=8,r;
r=func(func(x,y),z);printf("%d\n",r);
}
该程序的输出结果是()。

(A) 12 (B) 13 (C)14 (D)15
25.以下程序的输出结果是()。

main()
{ int a,b;
for(a=1,b=1;a<=100;a++)
{ if(b>=10) break;
if(b%3==1)
{ b+=3;continue;}
}
printf("%d\n",a);
}
(A)101 (B) 6 (C)5 (D)4
26.以下程序的输出结果是()。

int a,b;
void fun()
{ a=100;b=200;}
main()
{ int a=5,b=7;
fun();
printf("%d%d\n",a,b);
}
(A) 100200 (B)57 (C)200100 (D)75
27.下⾯的程序执⾏后,⽂件test.t中的内容是()。

#include
void fun(char *fname,char *st)
{ FILE *myf; int i;
myf=fopen(fname,"w");
for(i=0;i
fclose(myf);
}
main()
{ fun("test.t","new world");fun("test.t","hello,");}
(A) hello,(B)new,worldhello (C) new,world (D)hello,rld
28.以下程序的运⾏结果是()。

#include
main(){
static char s[30]="abcdefg";
static char t[]="abcd";
int i,j;
i=0;
while(s[i]!='\0')
i++;
j=0;
whi1e(t[j]!='\0')
{ s[i+j]=t[j];
j++;}
s[i+j]='\0';
printf("%s\n",s);
}
(A) abcdabcdefg (B)abcdefg (C)abcd (D)abcdefgabcd 29.有如下程序
main()
{ char ch[2][5]={"6937","8254"},*p[2];
int i, j, s=0;
for(i=0;i<2;i++) p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>'\0';j+=2)
s=10*s+p[i][j]-'0';
printf("%d\n",s);
}
该程序的输出结果是()。

(A)69825 (B)63825 (C)6385 (D)693825
30.若已建⽴如下图所⽰的单向链表结构
在该链表中,指针p,s分别指向图中所⽰结点,则不能将s所指的结点插⼊到链表末尾仍构成单向链表的语句组是()。

(A) p=p->next;s->next=p;p->next=s;
(B) p=p->next;s->next=p->next;p->next=s;
(C) s->next=NULL;p=p->next;p->next=s
(D) p=(*p).next;(*s).next=(*p).next; (*p).next =s;
31.请选择正确的运⾏结果填⼊()中。

include
int x,y;
num()
{
int a=15,b=10;
int x,y;
y=a-b;
y=a+b;
return;
}
main()
{ int a=7,b=5;
x=a+b;
y=a-b;
num();printf("%d,%d\n",x,y);
}
(A) 12,2 (B) 5,25 (C)2,12 (D)不确定
32.以下程序的输出结果是()。

#define M(x,y,z) x*y+z
main()
{ int a=1,b=2,c=3;
printf("%d\n",M(a+b,b+c,c+a));}
(A)19 (B)17 (C)15 (D)12
第⼆卷
说明:(1)第⼆卷含两⼤题,均属填空题,每题各有5个空栏,在阅读和理解原题程序的基础上,在空栏处填⼊适当的字符、语句,以构成⼀个正确的C语⾔程序。

(2)每空栏填对得3分,两⼤题共10个空栏,全对得30分。

试题⼀:
有⼀函数,实参传来⼀个字符串,统计此字符串中字母、数字、空各和其他字符的个数,在主函数中输⼊字符串以及输出上述的结果。

int letter,digit,space,others;/*是全局变量*/
main()
{int count(char _____(1)_____);
char text[80];
printf("\nlnput string:\n");
____(2)___;
printf("string:");
puts(text);
letter=O;
digit=O;
space=O;
others=O;
_____(3)_____;
printf("letter:%d,digit:%d,space:%d,other:%d\n",letter,digit,。

相关文档
最新文档