c语言程序设计习题答案
更新时间:2024-03-30 06:10:02 阅读量: 综合文库 文档下载
- c语言程序设计考试题推荐度:
- 相关推荐
第一部分 习题篇 第一章 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(“* * * * * * * * * * * \\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
{
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
{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
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
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
{ 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
{ 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
printf(“\\ninput a integer<1000--9999>:”); scanf(“%d”,x); y=x0; printf(“%d\\n”,y); }
错误语句:scanf(“%d”,x); 正确语句:scanf(“%d”,&x);
3.输入三个整数,输出其中最大的数。
#include
scanf(“%d,%d,%d”,&a,&b,&c); temp=(a>b)?a:b ;
max=(temp printf(“max=%d\\n”, max); } 错误语句:max=(temp 4.下面程序判断输入的一个整数是否能被5和7同时整除,若能整除,输出“YES”,否则,输出“NO”。 #include 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 if(i%3= =0) num++; printf(\ } 错误语句:int i,num; 正确语句:int i,num=0; 6、用π/4≈1-1/3+1/5-1/7+…公式求π的近似值,直到某一项的绝对值小于10为止。 #include 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 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 2.输入一个整数,判断是奇数还是偶数。 #include scanf (“%d”,&i); if (i%2= =0) printf(“%d 是一个偶数”,i); else printf(“%d 是一个奇数 ”,i); } 3.从键盘输入一个三角形的边长,输出三角形面积,取2位小数。当三角形不成立时输出“它不是一个三角形”。 #include 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 { 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 { 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 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 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 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 {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 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 { 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 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 { char str[12]={'s','t','r','i','n','g'}; printf(\ } 8.以下程序的功能是:使一个字符串按逆序存放,请填空。 #include { 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 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 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 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 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 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 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 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 {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 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 {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 {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 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 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 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 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;i 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 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 { 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 { 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 {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 printf (\ } 程序执行后的输出结果是( C )。 A)2,4,6 B)2,6,4 C)6,2,4 10.有以下程序。 #include {char a[ ]=\ char *ch_pointer=&a[9]; while (--ch_pointer>=&a[0]) )80 )6,4,2 D
正在阅读:
c语言程序设计习题答案03-30
我和老妈那些事儿作文600字06-19
护理伦理学复习题05-31
C语言第1章至第七章05-08
幼儿园12月份传染病工作总结03-12
钢结构安全文明图集01-19
abaqus6.10安装方法06-22
行政不作为起诉状范本2018最新整理版10-14
TU1800S紫外可见分光光度计操作规程11-25
包公断案的小故事11-20
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 习题
- 程序设计
- 答案
- 语言
- 罗斯福新政对我国借鉴意义
- 1.外汇与汇率(1-2节)
- 食堂防中毒投毒及食物中毒应急处置预案
- 新员工入职登记表,入职须知模板
- 2014-2019年中国地震专用仪市场竞争及投资策略研究报告
- 柏林中学三板桥小学2014年秋季学期五年级
- 双杆切割磁感线模型
- 实验1金属线膨胀系数测量 - 图文
- 机械原理习题(附答案)汇总
- IE浏览器设置方法
- 北语201509考试批次《消费者心理与行为》结课作业
- 毛概课程教学大纲
- SAMCEF Field 安装说明
- 海尔集团的外部环境分析
- 第七章 建筑工程造价 - 图文
- 秦朝中央集权制度的形成 教案 - 图文
- 第十章 流动负债(作业答案)
- 遗嘱库可行性方案
- 培优题各类型分数应用题
- 最新人教版小学语文三年级上册第七单元学案