c语言程序设计习题答案

更新时间:2024-03-30 06:10:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一部分 习题篇 第一章 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)必须在系统调用的库函数的后面 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)经过编译即可执行 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)不能写系统软件,只能用来写应用软件 D)既不能写系统软件,也不能写应用软件 二.填空题

1.C语言用 函数 作为程序的模块单位,便于实现程序的模块化。 2.C语言允许直接访问物理地址,能进行 位 操作。

3.用C语言编写的程序,每一个语句和数据定义的结尾必须要有一个 分号 。 4.每个C程序中必须有一个 main() 函数。 5.C程序中的函数体由 { } 括起来。

6.C程序中的“\\n” 表示在程序运行中 换行 。 7.C程序中,“/*??*/”表示 注释 部分。

8.C程序中,一个函数由 函数首部 和 函数体 组成。

9.一个C程序总是从 main() 函数开始执行的,不论该函数在整个程序中的位置如何。 10.在纸上编好一个C源程序后,要经过 编辑 、 编译 、 连接 、 运行 这几个步骤进行上机运行。 三.判断题

1.C语言不具有低级语言的特性。 ( 错 ) 2.C语言之所以也被称为中级语言,是因为它比高级语言的功能要少,而比低级语言的功能多。 ( 错 ) 3.C语言与其他高级语言一样具有结构化的控制语句。 ( 对 ) 4.C语言允许直接访问物理地址。 ( 对 ) 5.每一个C程序必须有一个main函数。 ( 对 ) 6.C程序的语句最后应有一个分号。 ( 对 ) 7.C程序中的main函数必须放在整个程序的最前头。 ( 错 ) 8.计算机高级语言对源程序进行翻译有两种方式:编译和解释。 ( 对 ) 四.编程题

1.编写一个C程序,输出以下信息:

* * * * * * * * * * * *

I am a student.

* * * * * * * * * * * *

#include /*包含头文件,为了使用printf和scanf语句,注意句末无分号*/ void main()

{

printf(“* * * * * * * * * * * \\n”); /*\\n的作用相当于回车*/

printf(“ I am a student.\\n”); printf(“* * * * * * * * * * * \\n”); }

2.编写一个C程序,输入a、b两个数,输出其中大的数。(只用一个主函数) #include

void main() { int a,b;

printf(“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 void main()

{

int a,b,c,max;

printf(“Please input a,b,c:\\n”); scanf(“%d,%d,%d”,&a,&b,&c);

max=a;

if(a

/*注意输入两个数之间用逗号分隔*/

第二章 数据与运算

一.单选题

1.C语言中最简单的数据类型包括( B )。

A)整型、实型、逻辑型 B)整型、实型、字符型 C)整型、字符型、逻辑型 D)字符型、实型、逻辑型 2.C语言中运算对象必须是整型的运算符是( D )。 A) * B) / C) = D) % 3.在C程序中,以下不正确的叙述是( D )。 A)逗号运算符的优先级最低

B)ABC和abc是两个不同的变量

C)若a和b类型相同,在执行了赋值表达式a=b后,b中的值将放入a中,而b的值不变 D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数据

4.设有int x=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 )。

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.已知各变量的类型说明如下: int k,a,b;

long w=8; float x=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( \

A)字符串要用\表示 B)'123'只能赋值给字符数组

C)c2是字符变量,不能用%d格式输出 D)c2是字符变量,只能赋以字符常量

12. 若定义 float a;,现要从键盘输入a数据,其整数位为3位,小数位为2位,则选用( A )。

A)scanf( \ C)scanf( \.2f\ A)1.0

B)scanf( \.2f\ D)scanf( \

13.若定义double t;,则表达式 t=1, t+5, ++t的值为( B )。

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) D)a += a -= ( b=4*(a=3) ) 15. 以下程序段的运行结果是( C )。

int a=0, b=0, c=0; if ( a && ++b ) c++; printf(\

A)1,1 二.填空题

B)1,0 C)0,0 D)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( ) {

int x=17, y=26;

printf (“%d ”,y/=(x%=6)); int c1=1, c2=2, c3; c3=1.0/c2*c1; char a; int b; float c; double d;

}

4.执行下面程序段后,c3中的值是 0 。

5.进行下列变量定义后,表达式a*b+d-c的类型是 double 。

6.下面程序的输出结果是 8,10 。

main( ) {

int x=010, y=10; }

printf (“%d, %d\\n”, x, y);

7.下面程序的输出结果是 12 。

main( ) {

int x=3, 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.下面程序的输出结果是 48 。

main( ) {

int x=0110; }

printf (“%x\\n”, x);

12.下面程序的输出结果是 20 200.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\\t c%c\\tabc\\n”,c1,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

void main() { int i=5, j=9; float x=2.3, y=4.5;

printf(\ }

三.判断题 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语言中,不要求对程序中所用到的变量进行强制定义。 (错 ) 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)(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+a a=a/(a+a)=12/24=0 注意a是整型 5)a%=(n%=2) 已知:n=5 a=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 void main()

{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(“password is %c%c%c%c%c\\n”,c1,c2,c3,c4,c5); }

运行结果:password is Glmre 也可以用循环和数组: #include void main() {

char c[]={“China”}; printf(“password is “); for(int i=0;i<=4,i++)

printf(“%c”,c[i]+=4); printf(“\\n”); }

2.请编程,要求用赋初值的方法使c1.c2这两个变量的值分别为97和98,然后分别按整型和字符型输出。 #include void main() {

char c1=97,c2=98;

printf(“%d, %d\\n”,c1,c2); printf(“%c,%c\\n”,c1,c2);

}

222

3.编写程序,从键盘输入三个单精度数a、b、c,计算总和、平均值、x=a+b+c的值,并计算x平方根的值。所有运行数据保留三位小数,第四位四舍五入。

#include

#include

void main()

{ double a, b, c, total, average, square, squareroot; printf(\请输入三个单精度实数:\ scanf(\ 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, squareroot); }

运行结果:

请输入三个单精度实数:1.23 4.56 7.89

三个数的和=13.680 ,三个数的平均值=4.560 三个数的平方和x=84.559,x的平方根=9.196

4.输入三角形的三个边长,计算并输出三角形的面积。

#include #include void main()

{ float a, b, c, k, area;

printf(\请输入三角形三条边的边长:\ scanf(\

if ((a+b <= c) || (a+c <= b) || (b+c <= a)) printf(\您输入的三条边无法构成三角形。\\n\ else {

k = (a+b+c)/2;

area = sqrt( k*(k-a)*(k-b)*(k-c) ); /* 函数sqrt(x)是求 x 的平方根 */ printf(\该三角形的面积是%6.2f\\n\

} }

5.输入两个长整型数,输出它们(整数除的)商和余数。 #include void main()

{ long a1, a2, a3, a4; printf(\请输入两个整数:\ scanf(\

a3 = a1/a2; a4 = a1¢;

printf(\两数进行整数除的商是%ld, 余数是%ld\\n\ }

运行结果:

请输入两个整数: 654321 789

两数进行整数除的商是829, 余数是240

6.输入两个整数,输出它们(实数除)的商,并输出商的第二位小数位(例如:15/8.0=1.875, 1.875的第二位小数位是7)。 #include

void main()

{ int a, b, c; float f;

printf(\请输入两个整数:\ scanf(\ f = 1.0*a/b ;

c = (int)(f*100);

printf(\两数进行实数除,商是%f, 商的第二位小数位是%d\\n\ }

运行结果:

请输入两个整数: 15 8

两数进行实数除,商是1.875000, 商的第二位小数位是7

7.输入一个(unsigned类型)无符号整数,分别输出它的低四位和高四位。

#include

void main()

{ unsigned u, high4, low4;

printf(\请输入一个无符号整数:\ scanf(\

low4 = (u & 0xf); /* u的低四位保留原值,其余位置0 */

high4 = (u & 0xf000)>>12; /* u的高四位保留原值,其余位置0,并右移12位 */

printf(\的十六进制是%x\\n\

printf(\十六进制表示%u的低四位是%x,高四位是%x\\n\ }

运行结果:

请输入一个无符号整数:54332 54332 的十六进制是d43c

十六进制表示54332的低四位是c,高四位是d

{int year, leap; scanf(“%d”,&year); if (year%4==0) {if (year0==0) {if (year@0!=0)

leap=1; else leap=0; } else leap=1; }

else leap=0; if (leap)

printf(“%d is ”,year); else

printf(“%d is not ”,year); printf(“a leap year.\\n”); }

错误语句:if (year@0!=0) 正确语句:if (year@0= =0)

2.下面的功能是输出一个4位整数的后两位数值,例如输入1234,输出34。

#include void main() { int x,y;

printf(“\\ninput a integer<1000--9999>:”); scanf(“%d”,x); y=x0; printf(“%d\\n”,y); }

错误语句:scanf(“%d”,x); 正确语句:scanf(“%d”,&x);

3.输入三个整数,输出其中最大的数。

#include void main() {int a,b,c,temp,max;

scanf(“%d,%d,%d”,&a,&b,&c); temp=(a>b)?a:b ;

max=(temp

printf(“max=%d\\n”, max); }

错误语句:max=(tempc)?temp:c ;

4.下面程序判断输入的一个整数是否能被5和7同时整除,若能整除,输出“YES”,否则,输出“NO”。

#include void main() {int x;

scanf(“%d”,&x); if( x%5= =0||x%7= =0 ) printf(“YES”); else

printf(“NO”); }

错误语句:if( x%5= =0||x%7= =0 )

正确语句:if( x%5= =0&&x%7= =0 )

5、求10到100之间能被3整除的数的个数。

#include void main( ) { int i,num; for(i=10;i<100;i++)

if(i%3= =0) num++;

printf(\ }

错误语句:int i,num; 正确语句:int i,num=0;

6、用π/4≈1-1/3+1/5-1/7+…公式求π的近似值,直到某一项的绝对值小于10为止。

#include #include void main() { int s;

float n,t,pi; t=1;

pi=0; n=1.0; s=1;

while (fabs(t)>10-6) {pi=pi+t;

n=n+2;

s=-s; t=s/n;

-6

} pi=pi*4;

printf(\\n\,pi);

}

错误语句:while (fabs(t)>10-6)

正确语句:while (fabs(t)>1e-6)

7、求Fibonacci数列前40个数。 这个数列有如下特点:第1,2两个数为1,1。从

第3个数开始,该数是其前面两个数之和。 #include void main() {int f1,f2; int i;

f1=1;f2=1;

for(i=1; i<=40; i++)

{ printf(\,f1,f2); if(i%2= =0) printf(\\n\ f1=f1+f2; f2=f2+f1;

}

}

错误语句:for(i=1; i<=40; i++) 正确语句:for(i=1; i<=20; i++)

四.编程题

1.从键盘输入一个圆的半径,输出圆的面积。输出时要有文字说明,取小数点后2位。 #include void main() { float r,s; scanf(“%f”,&r); s=3.14*r*r; printf(“s=%.2f”,s);}

2.输入一个整数,判断是奇数还是偶数。 #include void main() {int i;

scanf (“%d”,&i);

if (i%2= =0)

printf(“%d 是一个偶数”,i); else

printf(“%d 是一个奇数 ”,i); }

3.从键盘输入一个三角形的边长,输出三角形面积,取2位小数。当三角形不成立时输出“它不是一个三角形”。 #include #include void main() { float a,b,c,s,area;

scanf (“%f,%f,%f”,&a,&b,&c); if (a+b>c && b+c>a && c+a>b) {s=1.0/2*(a+b+c);

area=sqrt(s*(s-a)*(s-b)*(s-c)); printf(“area=%.2f\\n”,area);} else

printf(“它不是一个三角形”);

}

4.从键盘输入一个字符,判断其是否是大写字母,如果是大写字母,则转换为小写字母,否则不转换。 #include void main()

{ char c;

c=getchar( ); if ( c>=?A?&&c<=?Z?) c=c+32; printf(“%c”,c);

}

5.从键盘输入一个百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。其中‘A’对应的是90分(含90分)以上的成绩,‘B’对应的是80~89分的成绩,‘C’对应的是70~79的成绩分,‘D’对应的是60~69分的成绩,‘E’对应的是小于60分的成绩。如果输入的数值小于0或大于100要有“输入成绩错误”的信息显示。 #include void main()

{ int score,c;

scanf (“%d”,&score); c=score/10; switch (c) { case 0: case 1: case 2: case 3: case 4:

case 5: printf(“E”);break; case 6: printf(“D”); break; case 7: printf(“C”); break; case 8: printf(“B”); break; case 9:

case 10: printf(“A”); break; default: printf(“error”); }

}

6、编写程序,求1+2+3+?+200。 #include void main( ) {

int i, s; i=1;

s=1;

for(i=1;i<=200;i++)

s=s+i;

printf(\+?+200=%d\\n\

}

运行结果:20101

7、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13,…求出这个数列的前20项之和。 #include void main() {int i,temp;

float f2=2,f1=1,sum=0; for(i=1;i<=20;i++) {sum=sum+f2/f1; temp=f2;

f2=f2+f1;

f1=temp; }

printf(\}

运行结果:32.660259 8、求1!+2!+3!+4!+…+20! #include void main() {int i;

float sum=0,f=1; for(i=1;i<=20;i++) {f= f*i;

sum= sum+f; }

printf(\}

运行结果:2.561327e+018

9、用牛顿迭代法求方程4x-8x+6x-12=0在1.5附近的根。 #include #include void main()

{float x=1.5,x0,y,f1; do

{x0=x;

y=((4*x0-8)*x0+6)*x0-12;

f1=(12*x0-16)*x0+6; (f1是导数) x=x0-y/f1; }

while(fabs(x-x0)>=1e-6);

printf(\ } 运行结果:x= 2.00

10、编写程序,打印出以下图案。

* *** ***** ******* ***** ***

*

3

2

#include

void main( ) {int i,j,k;

for(i=1;i<=4;i++) /* 输出上面四行*号 */ {for(j=1;j<=4-i;j++) /* 输出*号前面的空格 */ printf(\

for(k=1;k<=2*i-1;k++)

printf(\ /* 输出每行*号 */

printf(\ /*输出每行*号后换行 */ }

for(i=1;i<=3;i++) /* 输出下面三行*号 */ {for(j=1;j<=i;j++)

printf(\ /* 输出*号前面的空格 */ for(k=1;k<=5-2*(i-1);k++)

printf(\ /* 输出每行*号 */ printf(\ /* 输出每行*号后换行 */ } }

第四章 数 组

一.选择题

1.以下能正确定义一维数组的选项是(B )。

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]=\

2.已有定义 int x[3][2];以下能正确引用数组元素的选项是( C )。

A) x[2][2] B) x[1][2] C) x[2][1] D) x[0][2]

3.有以下语句:int x;char c[10];,则正确的输入语句是( D )。 A) scanf(\

B) scanf(\

C) scanf(\ D) scanf(\4.以下叙述中错误的是( C )。

A) 对于double类型数组,不可以直接用数组名对数组进行整体输入或输出

B) 数组名代表的是数组所占存储区的首地址,其值不可改变

C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出\下标越界\的出错信息 (VC:可以运行但会显示:遇到问题需要关闭)

D)可以通过赋初值的方式确定数组元素的个数

5.已有定义:char a[ ]=\,以下叙述中正确的是( C )。

A)数组a和b的长度相同 B)a数组长度小于b数组长度 C)a数组长度大于b数组长度 D)上述说法都不对 6.以下能正确定义一维数组的选项是( B )。

A)int num[]; C)int num[0..100]; 7.有以下程序

#include void main()

B) #define N 100 int num[N]; D) int N=100; int num[N];

{char a[ ]={'a','b','c','d','e','f','g','h','\\0'}; int i,j;

i=sizeof(a); j=strlen(a); printf(\ }

程序运行后的输出结果是( D )。 A) 9,9 B) 8,9 C) 1,8 D) 9,8 8.下面程序的运行结果是( B )。

#include void main()

{ char ch[7]={ \int i,s =0;

for(i=0;ch[i]>= '0'&&ch[i]< '9';i++) s=10*s+ch[i]- '0'; printf(\ }

A) 12ba56 B) 65 C) 6 9.有以下程序

#include void main() {

D) 62

int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,s=0;

for(i=0;i<4;i++) s+=aa[i][1]; /*求每行第1列的数的和*/ printf(\}

程序运行后的输出结果是( B )。

A) 11 B) 19 C) 13 D) 20 10.以下不能正确定义二维数组的选项是( A )。. A)int a[2][]={{1,2},{3,4}}; B)int a[][2]={1,2,3,4}; C)int a[2][2]={{1},{2}}; D)int a[2][2]={{1},2,3}; 二.填空题

1.C语言规定数组名代表数组的 首地址 。

2.C语言中二维数组中元素排列的顺序是: 按行存放 。 3.字符数组中的一个元素存放 一个字符 。

4.C语言规定了“字符串结束标志”,以字 ?\\0? 来表示。

5.用\格式符输出字符串时,printf函数中的输出项是 字符数组名 ,而不是数组元素名。

6. 若有以下定义:

float a[10];

则a数组元素下标的上限是 9 ,下限是 0 。 7.下列程序运行结果是 6 。

#include #include void main()

{ char str[12]={'s','t','r','i','n','g'}; printf(\ }

8.以下程序的功能是:使一个字符串按逆序存放,请填空。

#include #include void main()

{ char m;char str[]=\?\\ for(i=0,j=strlen(str);i< j-1 ; i++,j--) { m=str[i];

str[i]= str[ j-1] ; /* str[i]与str[j-1]交换数据*/ str[j-1]=m; }

printf(\ }

9.写出下面程序的运行结果 62 。

#include void main( ) {

int a[2][3]={40,25,-8,6,62,39}; int i,j,max; max=a[0][0]; for(i=0;i<2;i++) for(j=0;j<3;j++) if(a[i][j]>max) max=a[i][j]; printf(\}

10.下面程序的功能是,将字符数组S2中的全部字符拷贝到字符数组S1中。不用strcpy函数。请填空

#include #include void main( ) {

char s1[80],s2[80]; int i;

scanf(\

for(i=0;i<=strlen(s2);i++) s1[i]=s2[i] ; printf(\复制字符串为:%s\\n\); }

三.改错题

1.下面程序求矩阵a的主对角线元素之和,请改错。

#include void main( ) {

int a[3][ ]={2,4,6,8,10,12,14,16,18}; int sum=0,i,j; for(i=0;i<3; i++ ) for(j=0; j<3 ;j++)

if(i==j) sum=sum+a[i][j] ; printf(\ }

错误语句:int a[3][ ]={2,4,6,8,10,12,14,16,18}; 正确语句:int a[ ][3 ]={2,4,6,8,10,12,14,16,18}; 2.有3个字符串,要求找出其中最大者,请改错。

#include #include void main ( ) {

char string[20]; char str[3][20]; int i;

for (i=0;i<3;i++) gets (str[i]);

if (strcmp(str[0],str[1])>0) strcpy(string,str[0]); else strcpy(string,str[1]); if (str[2]>string) string=str[2];

printf(\ }

错误语句:if (str[2]>string) string=str[2];

正确语句:if(strcmp(str[2],string)>0) strcpy(string,str[2]); 3.以下程序输出一个字符串:China,请改错。

#include void main() {

char c[5]={'C','h ','i','n','a '}; int i;

for(i=0;i<=5;i++) printf(\ printf(\ }

错误语句:for(i=0;i<=5;i++) 正确语句:for(i=0;i<5;i++)

4.下面程序为数组输入数据并输出结果;判断下面程序的正误,请改错。

#include void main ( ) { int a[3]={3*0} ; int i;

for (i=0; i<4; i++) scanf(“%d”,&a[i]); for (i=0; i<4; i++) printf(“%d”,a[i]);

}

错误语句:int a[3]={3*0} ; 正确语句:int a[4] ;

5.下面程序为数组输入数据并输出结果,判断下面程序的正误,请改错。

#include void main ( ) { int a[3]={1,2,3} , i; scanf(“%d%d%d”,&a);

for (i=0; i<3; i++) printf(“%d”,a[i]); }

错误语句: scanf(“%d%d%d”,&a);

正确语句: scanf(“%d%d%d”,&a[0],&a[1],&a[2]);

或者for(i=0;i<3;i++) scanf(“%d”,&a[i]);

四.编程题

1.用数组来处理,求解Fibonacci数列前40项:1,1,2,3,5,8,13,21?。 #include

void main() { int i;

int t[40]={1,1}; for(i=2;i<40;i++)

t[i]=t[i-2]+t[i-1]; for(i=0;i<40;i++) {

if(i%5==0) printf(\ printf(\ } }

2.用选择法对20个整数排序。 #include void main()

{int i,j,min,t,x[20]; for(i=0;i<20;i++) scanf(\ for(i=0;i<19;i++) {min=i;

for(j=i+1;j<20;j++) if(x[min]>x[j])min=j; t=x[i];

x[i]=x[min]; x[min]=t; }

for(i=0;i<20;i++) printf(\}

3.有一个3×5的矩阵,要求编程序求出其中值最小的那个元素的值,以及其所在的行号和列号。

#include void main() {

int i,j,s=0,t=0,min; int a[3][5];

for (i=0;i<3;i++)

for (j=0;j<5;j++)

scanf(\ min=a[0][0]; for (i=0;i<3;i++) for (j=0;j<5;j++)

if (a[i][j]

s=i; t=j; }

printf(\}

4.编一程序,将两个字符串连接起来,不要用strcat函数。 #include void main()

{char str1[80],str2[20]; int i=0,j=0; scanf(\

scanf(\

printf(\printf(\

while(str1[i]!='\\0')

i++; /* 循环后i为最后一个字符之后 */ while(str2[j]!='\\0')

{str1[i]=str2[j]; i++; j++;}

str1[i]='\\0'; printf(\}

5.求一个5×5矩阵对角线元素之和(左上至右下之对角线)。 #include void main( )

{float a[5][5],sum=0; int i,j;

for(i=0;i<5;i++)

for(j=0;j<5;j++)

scanf(\ for(i=0;i<5;i++) sum=sum+a[i][i]; printf(\}

6.编一程序,求数列的前10项:1,5,14,30?,即

f[1]=1;?;f[i]=f[i-1]+i*i。

#include

void main() {

int i;

int f[10]={0}; for(i=1;i<10;i++)

f[i]=f[i-1]+i*i; for(i=1;i<10;i++) {

if(i%5==0) printf(\ printf(\ } }

第五章 函 数

一、选择题

1. 阅读下面程序段,则执行后输出的结果是( C #include “stdio.h” main( )

{ char fun (char,int); char a=?A?; int b=13; a=fun(a,b); putchar(a); }

char fun(char a,int b) { char k; k=a+b; return k; }

A)A B)M C)N D)L 2. 阅读下面程序段,则执行后的结果是( C )。#include “stdio.h” main( )

{ int m=4,n=2,k; k=fun(m,n);

printf(“%d\\n”,k); } fun(int m,int n)

。 )

{return(m*m*m-n*n*n);}

A)64 B)8 C)56 D)0 3.阅读下面程序段,则执行后的结果是( A )。

#include “stdio.h” long fun (int n) { if(n>2)

return(fun(n-1)+fun(n-2)); else return(2);} main()

{printf(“%ld﹨n”,fun(5));}

A)10 B)15 C)20 D)以上3个答案都不正确 4. 阅读下面程序段,则执行后的结果是( D )。

#include “stdio.h” fun( )

{ static int x=5; /*只赋一次*/ x++;

return x; } main( ) { int i,x; for(i=0;i<3;i++) x=fun();

printf(“%d\\n”,x); }

A)5 B)6 C)7 D)8 5. 阅读下面程序段,则执行后的结果是( D )。

#include “stdio.h” int fun(int x) {printf(“%d\\n”,++x);} main( ) {fun(12+5);}

A)12 B)13 C)17 D)18

6. 阅读下面程序段,则执行后的结果是( A )。

#include “stdio.h” int aa(int x,int y); main( )

{ int a=24,b=16,c; c=aa(a,b); printf(“%d\\n”,c); }

int aa(int x,int y) { int w;

while(y) { w=x%y; x=y; y=w;} return x;}

A)8 B)7 C)6 D)5

7. 阅读下面程序段,则执行后的结果是( C )。

#include “stdio.h” fun (int a) { int x=5; x+=a++; print(“%d”,x); } main( ) { int a=3,x=1; fun(a); x+=a++; printf(“%d\\n”,x); }

A)82 B)83 C)84 D)85 8. 阅读下面程序段,则执行后的结果是( D )。

#include “stdio.h” int x=1; main( ) { int md=4; fun(md);

printf(“%d,%d\\n”,md,x);} fun(int k) { k+=x; x+=k; { char x=?B?;

printf(“%d,”,x-?A?); } printf(“%d,%d,”,k,x); }

A)1,6,5,4,6 B)1,5,4,6,4 C)1,4,6,5,4 D)1,5,6,4,6 9. 阅读下面程序段,则执行后的结果是( C )。

#include “stdio.h” main( )

{ fun3(fun1( ),fun2( ));} fun2( ) { int a=15;

return a;}

fun1( ) { int k=20; return k;} fun3(int a,int b) { int k; k=(a-b)*(a+b); printf(“%d\\n”,k);}

A)0 B)184 C)175 D)编译不通过 10.阅读下面程序段,则执行后的结果是( D )。

#include “stdio.h” main( )

{ int a=4,b=6,c=7; double d,fun(int,int,int); d=fun(a,b,c); printf(“%lf\\n”,d);} double fun(int a,int b,int c) { double s; s=a%b*c; return s;}

A)27 B)27.000000 C)28 D)28.000000

11.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( D a) 函数调用可以作为独立的语句存在

b) 函数调用可以作为一个函数的实参 c) 函数调用可以出现在表达式中 d) 函数调用可以作为一个函数的形参

12.以下不正确的说法是( D )。

a)在不同的函数中可以使用相同名字的变量 b)函数中的形参是局部变量

c)在一个函数内定义的变量只在本函数范围内有效

d)在一个函数内的复合语句中定义的变量只在本函数范围内有效

13.以下正确的说法是( C )。

a) 定义函数时,形参的类型说明可以放在函数体内

b) return后面的值不能为表达式

c) 如果函数值的类型与返回值类型不一致,以函数值类型为准 d) 如果形参与实参的类型不一致,以实参类型为准

14.以下正确的说法是( D )。

a) 函数可以嵌套定义但不能嵌套调用

。 )

b) 函数既可以嵌套调用也可以嵌套定义

c) 函数既可以不嵌套调用也不可以嵌套定义 d) 函数可以嵌套调用但不可以嵌套定义

15.C语言规定,函数返回值的类型是由( D )。

a)return语句中的表达式类型所决定的

b)调用该函数时的主调函数类型所决定 c)调用该函数时系统临时决定

d)在定义该函数时所指定的函数类型所决定

16.以下不正确的说法是( C,D )。

a)c程序中,函数可以直接或间接的调用自己

b)函数调用时,函数名必须与所调用的函数名一致

c)函数说明语句中的类型必须与函数返回值的类型一致 d)实参个数可以与形参个数不一致

17.以下不正确的说法是( C )。

a)C语言规定,不能在一个函数的内部再定义函数

b)在没有声明函数返回值类型的情况下,默认的函数返回值类型为int型 c)函数的类型可以是整型,实型,字符型,但不能是指针型 d)函数可以没有形参,但函数名后的一对括号不能省略

18.在函数调用过程中,如果如果funA调用了函数funB,函数funB又调用了函数funA,则( B )。

a)称为函数的直接递归调用 b)称为函数的间接递归调用

c)称为函数的循环调用

d)C语言中不允许这样的递归调用

19.言中规定,若对函数类型未加显式说明, 函数的隐含类型为( C )。

(A)void (B)double (C)int (D)char

20.以下叙述正确的是( C )。

a)在c程序中,main函数位于程序的最前面

b)c程序的每一行只能写一个语句

c)c语言本身没有输入输出语句

d)在对c程序进行编译的过程中,可以发现注释中的错误

二.填空题

1.一个源程序文件由 一个或多个 函数以及其他有关内容(如命令行、数据定义等)组成。一个 源程序 是一个编译单位,在程序编译时是以源程序文件为单位进行编译的,而不是以 函数 为单位进行编译的。

2.所有函数都是平行的,即在定义函数时是分别进行的,是互相 独立 的。一个函数

并不从属于另一函数,即函数不能 嵌套 定义。函数间可以互相调用,但不能调用 main() 函数。main()函数是系统调用的。

3.从用户使用的角度看,函数有两种: 标准函数 、 用户定义的函数 用以解决用户的专门需要。

4.从函数的形式看,函数分两类: 无参函数 、 有参函数 。 5.在C语言中,实参向形参的数据传递是 值传递 ,单向传递,只由 实参 传给 形参 ,而不能由 形参 传回来给 实参 。在内存中,实参单元与形参单元 是 不同 单元。

6.如果实参表列包含多个实参,则各参数间用逗号隔开。实参与 形参 的个数应相等, 类型 应匹配。实参与形参按顺序对应,一一传递数据。

7.声明的作用是把 函数名 、函数参数的 类型 和参数 个数 等信息通知编译系统,以便在遇到函数调用时,编译系统能正确识别函数并检查调用是否合法。

8.在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的 递归 。 9.在一个函数内部定义的变量是 内部变量 ,它只在 本函数 范围内有效,也就是说只有在 本函数 内才能使用它们,在此函数以外是不能使用这些变量的。这称为 局部变量 。

10.形式参数也是 局部 变量。 11.求两个数中较大的一个数。

#include void main() {

int max(int x, int y); int a,b,c;

scanf(“%d,%d”,&a,&b); c=max(a,b);

printf(“max is %d”,c); }

int max (int x, int y) { int z; z=x>y? x:y; return(z) ; }

12.求两个数中较小的一个数。

#include void main() {

int min(int x, int y); int a,b,c;

scanf(“%d,%d”,&a,&b); c= min(a,b) ; printf(“min is %d”,c); }

int min (int x, int y) { int z; z=x

13.求两个数的最大公约数。

#include “stdio.h” int aa(int x,int y); main( )

{ int a=24,b=16,c; c=aa(a,b);

printf(“%d\\n”, c ); }

int aa(int x,int y) { int w; while(y) { w=x%y; x=y; y=w;} return( x); }

14. 求两个数的最大公约数。

#include “stdio.h” int aa(int x,int y); main( )

{ int a=24,b=16,c; c=aa(a,b); printf(“%d\\n”,c); }

int aa(int x,int y) { int w; while(y) { w=x%y;

x=y ; y=w;} return( x); }

三.改错题

1.下面程序输出1到10的阶乘。改正下面程序中的错误。

#include “stdio.h” void main( ) {

float fac(int n);

int i;

for(i=1;i<=10;i++)

printf(“%d!=%d\\n”,i,fac(i)); } int fac(int n) { int f=1; f=f*n;

return(f); }

错误语句:float fac(int n); int f=1; f=f*n;

正确语句: int fac(int n); int i, f=1; for(i=1;i<=n;i++)f=f*i;

2.#include “stdio.h” int func(int a,int b) {

return(a+b); } main()

{int x=2,y=5,z=8,r; r=func(func(x,),z); printf(“%d\\n”,r); }

错误语句:r=func(func(x,),z); 正确语句:r=func(func(x,y),z);

3. #include “stdio.h”

void (int k) {

if(k>0)fun(k-1); else return(2)

printf(“%d”,k); } main() { int w=5; fun(w); printf(“\\n”); }

错误语句:void (int k) else return(2) 正确语句:void fun (int k) else return(2);

4.#include “stdio.h”

void fun( i, j) { int x=7;

printf(“i=%d;j=%d;x=%d\\n”,i,j,x); } main() {

int i=2,x=5,j=7; fun(j,6);

printf(“i=%d;j=%d;x=%d\\n”,i,j,x); }

错误语句:void fun( i, j) 运行结果:i=7;j=6;x=7 正确语句:void fun(int i, int j) i=2;j=7;x=5 5.#include “stdio.h”

int a,b; void fun() { int a,b; a=100;b=200;} main() {

int a=5,b=7; fun(a,b);

printf(“%d%d\\n”,a,b); }

错误语句:inta,b; fun(a,b); 运行结果:57

正确语句:int a,b; fun( );

6.#include “stdio.h”

main( )

{ int m=4,n=2,k;

k=fun(m,n,k);

printf(“%d\\n”,k); }

fun(int m,int n)

{return(m*m*m-n*n*n);}

错误语句:k=fun(m,n,k); 正确语句:k=fun(m,n);

7.#include “stdio.h”

main( ) { char a=A; int b=13; a=fun(a,b); putchar(a); }

char fun(char a,int b) { char k; k=a+b; return( k); }

错误语句:char a=A; 正确语句:char a=?A?;

8.#include “stdio.h” fun( )

{ static int x=5; x++; (x); } main( ) { int i,x;

for(i=0;i<3;i++) x=fun(); printf(“%d\\n”,x); }

运行结果:56 运行结果:N 错误语句: (x); 运行结果:8 正确语句:return(x); 9.#include “stdio.h”

fun (int a) { int x=5; x+=a++; printf(“%d”,x); } main( ) { int a=3,x=1; f(a); x+=a++; printf(“%d\\n”,x); }

错误语句: f(a); 运行结果:84 正确语句: fun(a);

四.编程题

1.写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息。 #include void main() {

int prime(int); int n;

printf(“请输入一个整数:”);

scanf(“%d”,&n);

if(prime(n)) printf(“\\n %d是一个素数。\\n”,n); else printf(“\\n %d不是一个素数。\\n”,n); }

int prime(int n)

{int flag=1,i;

for(i=2;i

if(n%i==0) flag=0; return(flag);

2.编一个函数求n!。主函数求6!+7!+8!

#include int fac(int n) {int c,i; c=1;

if(n>=0)

{for(i=1; i<=n; i++) c=c*i; }

return( c);}

void main() {int s;

s=fac (6) + fac (7) + fac (8); printf ( “ %d”, s );} 运行结果:46080

3.编一个函数求n个数中最大值. 主函数求10个数中最大值. #include

int maxm(int a[ ],int n) {

int m,i; m=a[0];

for (i=1;ivoid main() {

int a[10],i,big; for(i=0;i<10;i++) scanf(“%d”,&a[i]); big=maxm(a,10);

printf(“%d”,big);}

4.用递归法将一个整数n转换成字符串,例如输入483,应输出字符串“483”。n的位数不确定,可以是任意位数的整数。 #include void main()

{ void convert(int n);

int number;

printf(“请输入一个整数:”);

scanf(“%d”,&number); printf(“输出:“);

if(number<0){putchar(‘-‘);number=-number;} /*负数时先输出一个‘-’号*/ convert(number); putchar(‘\\n’);

}

void convert(int n) { int i;

if((i=n/10)!=0) convert(i);

putchar(n+’0’); } /* 一个数+‘0’的ASCII码值为该数的ASCII码值*/

/*先输出个位,再通过递归输出十位,以此类推*/

5.编写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果。两个整数由键盘输入。 #include void main()

{ int hcf(int,int); int lcd(int,int,int); int u,v; }

scanf(“%d,%d”,&u,&v);

printf(“最大公约数=%d\\n”,hcf(u,v));

printf(“最小公倍数=%d\\n”,lcd(u,v,hcf(u,v)));

int hcf(int u,int v) { int t,r;

if(v>u) {t=u;u=v;v=t;} /* 让u>v */ while((r=u%v)!=0) {v=r;} return(v); }

/*大数除小数的余数如果不为0,则将余数赋给v,否则如果大数整除小数时,v中是

两个数中小的数。V中的数则为最大公约数。*/ int lcd(int u,int v,int h) {

return(u*v/h);}

6.定义一个函数,根据给定的三角形三条边长,函数返回三角形面积。 #include “stdio.h” #include “math.h”

float ss(int a,int b,int c) {float s, p; p=(a+b+c)/2;

s=sqrt(p*(p-a)*(p-b)*(p-c)); return(s); }

void main() {

float a,b,c,area;

scanf (“%f,%f,%f”,&a,&b,&c); if (a+b>c && b+c>a && c+a>b)

{area=ss(a,b,c);

printf(“area=%.2f\\n”,area);} else

printf(“它不是一个三角形”); }

7.编写一个函数,输入一个4位数字,要求输出这4个数字字符,使每两个数字字符间空一个空格。如输入2008,则应输出“2 0 0 8”。 #include \#include \void main() {char str[80];

void insert(char str[]); printf(\scanf(\insert(str); printf(\}

void insert(char str[]) {int i;

for(i=strlen(str);i>0;i--) {str[2*i]=str[i]; str[2*i-1]=' '; }

}8. 编写一个函数,其功能是判断给定的正整数是否是素数,若是素数则返回函数值1,否则返回函数值0。 #include \#include \sushu(int n) {int k,i,flag;

k=sqrt((double)n); i=2;

flag=0;

while((i<=k)&&(flag==0)) {if(n%i==0)flag=1; i=i+1;}

return(!flag);} void main() {

int a,b;

printf(\请输入一个正整数:\scanf(\b=sushu(a); if(b)

printf(\是一个素数\\n\else

printf(\不是一个素数\\n\

}9.有五个人坐在一起,问第五个人多少岁,他说比第四个人大2岁, 问第四个人多少岁,他说比第三个人大2岁, 问第三个人多少岁,他说比第二个人大2岁, 问第二个人多少岁,他说比第一个人大2岁, 问第一个人多少岁,他说10岁, 问第五个人多少岁? #include \int f(int n) {int a;

if(n==1)a=10; else a=f(n-1)+2; return(a);}

void main ()

{printf(\}

第六章 指针

一.选择题

1.一个变量的指针就是( B )。

A)变量的名称 B)变量的地址 C)变量的类型 D)变量的值 2.两个指针变量不能( B )。

A)相减 B)相加 C)比较 D)指向同一地址 3.在C语言中,对变量的访问方式是( A )。

A)能直接访问,能间接访问 B)能直接访问,不能间接访问 C)不能直接访问,能间接访问 D)不能直接访问,不能间接访问 4.在C语句:int (*pa)[5];中,pa表示的是一个( C )。

A)指针数组的名字 B)指向整型变量的指针 C)指向包含5个整型元素的一维数组的指针 D)指向函数的指针

5.在C语句:int *function( );中,function表示的是一个( A )。 A)返回值为指针的函数名字 B)指向整型变量的指针 C)指向数组的指针 D)指向函数的指针 6.有以下程序(假设从键盘输入数据1,2)。

#include

void swap(int *p1,int p2) { *p1=*p1+p2; p2=p2+*p1; } void main( ) {int a,b,*pointer1; scanf (\ pointer1=&a;

swap (pointer1, b); printf (\

程序执行后的输出结果是( D )。

A)3,5 B)a=3,b=5 C)3,2 7.有以下程序。

#include main( )

{ int array[ ]={1,2,3,4,5,6,7}; int i,j,*pointer1,*pointer2; pointer1=&array[1]; pointer2=&array[5];

D)a=3,b=2

i=*pointer1**pointer2; j=*(pointer1+2)+*(pointer2+1); printf (\

程序执行后的输出结果是( C )。

A)5,9 B)9,5 C)12,11 D)11,12

8.有以下程序。

#include main( )

{static int array[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4] ,i ,j ,sum[3]; p=array; for (i=0;i<3;i++) {sum[i]=0; for (j=0;j<4;j++)

sum[i]=sum[i]+*(*(p+i)+j); printf (\ } }

程序执行后的输出结果是( A )。

A)16,48,80, B)164880 C)144 D 9.有以下程序。

#include void fun(int x,int y, int *z) { *z=x-y; } void main( ) {int a,b,c; fun(11,5, &a); fun(8, a, &b); fun(a, b, &c);

printf (\ }

程序执行后的输出结果是( C )。

A)2,4,6 B)2,6,4 C)6,2,4 10.有以下程序。

#include #include main ( )

{char a[ ]=\ char *ch_pointer=&a[9]; while (--ch_pointer>=&a[0])

)80 )6,4,2 D

本文来源:https://www.bwwdw.com/article/b2qr.html

Top