首页 c语言程序设计习题答案

c语言程序设计习题答案

举报
开通vip

c语言程序设计习题答案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语言程序设计习题答案
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语言中,用来 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示“取地址”的符号是( 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 void main() { int i=5, j=9; float x=2.3, y=4.5; printf("%8.2f\n", i%(int)(x+y)*j/2/3+y ); 三.判断题 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); 2223.编写程序,从键盘输入三个单精度数a、b、c,计算总和、平均值、x=a+b+c的值, 并计算x平方根的值。所有运行数据保留三位小数,第四位四舍五入。 #include #include void main() { double a, b, c, total, average, square, squareroot; printf("请输入三个单精度实数:"); scanf("%f%f%f", &a, &b, &c); 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("%f%f%f", &a, &b, &c); if ((a+b <= c) || (a+c <= b) || (b+c <= a)) printf("您输入的三条边无法构成三角形。\n"); k = (a+b+c)/2; area = sqrt( k*(k-a)*(k-b)*(k-c) ); /* 函数sqrt(x)是求 x 的平方根 */ printf("该三角形的面积是%6.2f\n", area); 5.输入两个长整型数,输出它们(整数除的)商和余数。 #include void main() { long a1, a2, a3, a4; printf("请输入两个整数:"); scanf("%ld%ld", &a1, &a2); 8.输入两个小写字母分别赋值给字符变量ch1与ch2,将它们转换成大写字母,并交换ch1与ch2的值,最后输出ch1与ch2的值。 #include void main() { char c1, c2, t; printf("请输入两个半角的小写英文字母:"); c1=getchar(); c2=getchar(); c1 -= 32; c2 -= 'a'-'A'; /*与32等价*/ t = c1; c1 = c2; c2 = t; printf("%c%c\n", c1, c2); 运行结果: 请输入两个半角的小写英文字母:db 9.输入秒数,将它转换,用小时、分钟、秒来表示。例如输入7278秒,则输出:2小时1分18秒。 #include void main() { int k; int hour, minute, second; printf("请输入秒数:"); scanf("%d", &k); hour = k/3600; k %= 3600; minute = k/60; second = k%60; printf("%d小时%d分钟%d秒。\n", hour, minute, second); 运行结果: 请输入秒数: 7278 2小时1分钟18秒。 10.输入两个复数的实部和虚部,输出这两个复数积的实部和虚部。两复数的积按下面的公式计算:(a+bi)·(c+di)=(ac-bd)+(ad+bc)i。 #include void main() { float a, b, c, d, real, imag; printf("请输入第一个数的实部和虚部:"); scanf("%f%f", &a, &b); printf("请输入第二个数的实部和虚部:"); scanf("%f%f", &c, &d); real = a*c-b*d; imag = a*d+b*c; printf("两个复数积的实部和虚部分别是%f, %f\n", real, imag); } 运行结果: 请输入第一个数的实部和虚部:1.1 2.2 请输入第二个数的实部和虚部:3.3 4.4 两个复数积的实部和虚部分别是-6.050000, 12.100000 第三章 C程序的基本控制结构 一.单选题 1.若变量已经正确定义为float型,要通过语句scanf(“%f %f %f ”, &a,&b,&c)。 给a输入10.0,n输入20.0,c输入30.0,下列不正确的输入形式是( B )。 A) 10<回车>20<回车>30<回车> B) 10.0,20.0,30.0<回车> C) 10.0<回车>20.0 30.0<回车> D) 10 20<回车>30<回车> 2.若有说明语句:char c=?65?; 则变量c( D )。 A) 包含1个字符 B) 包含2个字符 C) 包含3个字符 D) 说明不合法,c的值不确定 3.若w=1,x=2,y=3,z=4,则条件表达式w void main( ) char a1=?A?, a2=?a?; printf(“%c\n”, (a1, a2)); 以下叙述中正确的是( B )。 A) 程序输出大写字母A B) 程序输出小写字母a 。 ) C) 格式说明符不足,编译出错 D) 程序运行时产生出错信息 6.以下程序的输出结果是( A )。 #include void main( ) int a=2,b=3,c=0,d; d=!a&&!b||!c; printf(“%d\n”,d); } A)1 B)0 C)非0的数 D)-1 7.以下程序的输出结果是( B )。 #include void main( ) int a=6,b=5; printf(“%d\n”,--a+b,--b+a); A) 8 B)9 C)10 D)11 8.下面程序输出的结果是( D )。 #include void main( ) {int a=55,b=50,c=60,d; d=a>20?b:c; switch(d) {case 40: printf(“%d,”,a ); case 50: printf(“%d,”,b ); case 60: printf(“%d,”,c ); default: printf(“$\n” );}} A)50,60 B)50,$ C)60,$ #include void main( ) { int x; scanf(“%d”,&x); if(x>300) printf(“%d”,x); if(x>200) printf(“%d”,x); if(x>100) printf(“%d”,x); } D)50,60,$ 9.如果从键盘输入数据666,下面程序输出的结果是( C )。 A)666 B)666666 C)666666666 D)以上都不对 10.有如下程序。 #include void main( ) int a=5,b=6,c=1; switch (c) case 0:b++; case 1:a++; case 2:a++;b++; printf (“a=%d,b=%d\n”,a,b); 该程序的输出结果是( C ) A)a=5,b=6 B)a=6,b=7 C)a=7,b=7 D)a=7,b=8 11、下面的程序中: int i=9; while(i=0) i=i-1; 则下列描述正确的是( C ) A)while循环执行9次 C)循环体语句一次也不执行 B)循环体语句执行一次 D)循环是无限循环 (注意:i=0是赋值语句,不是对i中值和0进行比较,因此程序执行后i的值是0而不是9) 12、下面的程序中: int i=-1; {i=i*i;} while(!i); 则下列描述正确的是( B ) A)循环体一次也不执行 B)循环体执行一次 C)循环体执行两次 D)是无限循环 13、下面的程序中: int i=0; while(i=1) 则下列描述正确的是( C ) A)循环控制表达式不合法 B)循环控制表达式为0 C)循环控制表达式为1 D)以上都不对 14、下面的程序中: int x=0,total=0; while(!x!=0) total+=++x; printf(“%d”, total); 则下列描述正确的是( D ) #include void main( ) {char c=?A?; printf(“%c”,c+25); 3.有以下程序。 #include void main( ) {char a, b, c, d; scanf(“%c, %c, %d, %d”, &a,&b,&c,&d); printf(“%c, %c, %c, %c\n”, a,b,c,d); 若从键盘上输入5,6,65,66<回车>。则输出结果是 5,6,A,B 。 4.已知字母A的ASCII值是65,运行下面程序时输入B35<回车>,输出结果是 1F 。 #include main( ) { char a, b; a=getchar( ); scanf(“%d”,&b); a=a-?A?+?0?; b=b*2; printf(“%c%c\n”,a,b); 5.下面程序的输出结果是 22 。 #include void main( ) int x=13,y=22; printf(“%d”,y/=(x%=6)); 6.下列程序的功能是把从键盘上输入的整数取绝对值后输出。 #include void main( ) {int x; scanf(“%d”,&x); if(x<0) printf(“%d\n ”,x); 7.下面程序的输出结果是 9 。 #include {int a=3,b=6,c=9; a=a>b?a:b; a=a>c?a:c; printf(“%d ”,a); 8.从键盘用数字输入月份,然后用英文单词输出显示月份。 #include void main( ) { int month; char ch; while(1) { printf(“\n please input month (1-12): ”); scanf(“%d”,&month); switch( ) { case 1: printf(“January\n ”);break; case 2: printf(“February\n ”);break; case 3: printf(“March\n ”);break; case 4: printf(“April\n ”);break; case 5: printf(“May\n ”);break; case 6: printf(“June\n ”);break; case 7: printf(“July\n ”);break; case 8: printf(“August\n ”);break; case 9: printf(“September\n ”);break; case 10: printf(“October\n ”);break; case 11: printf(“November\n ”);break; case 12: printf(“December\n ”);break; default: printf(“input data error\n ”); getchar( ); printf(“\ncontinue?(Y/N):"); ch=getchar( ); if(ch!='y'&&ch!='Y') break; 9.下面程序的输出结果是 !!! 。 #include void main( ) { int x=1, y=0; switch(x) switch(y) { case 0 : printf(“!!!\n”); break; case 1 : printf(“@@@\n”); break; break; case 2 : printf(“###\n”); } 10.下面程序的输出结果是 27 。 #include void main( ) { int sum=0,i; for (i=1 ;i<=4 ;i++) { switch(i) {case 0: case 1: sum=sum+2; case 2: case 3: sum=sum+3; default: sum=sum+4;}} printf (“%d”,sum ); } #include void main( ) {int i=2,j=2,k=3; if((j++||k++)&&i++) 11.下面程序的输出结果是 3,3,3 。 printf(“%d,%d,%d\n”,i,j,k);} 12.若从键盘输入15,则下面程序输出的结果是 151515 。 #include void main( ) { int x; scanf(“%d”,&x); if(x>10)printf(“%d”,x); if(x>8)printf(“%d”,x); if(x>6)printf(“%d”,x); 13、下面程序的输出结果是。 #include void main( ) int i, t=1; t=t*i; printf ("%d\n ",t); 14、下面程序的输出结果是 D 。 #include void main( ) { char ch ; while((ch=getchar( ))!= '\n') {if(ch>='a'&& ch<='z') ch=ch-32 ; printf ("%c",ch ); } 输入 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 :d 15、下面的程序为大写字母转换为小写字母。 #include void main( ) { char ch ; while ((ch=getchar( ))!= '\n') printf ("%c\n ", ch ); } 16、输入某班级10名同学5门课程的成绩,分别统计每个学生5门课程的平均成绩。 #include void main( ) { int i,j; float grade, sum,average; for (i=1;i<=10;i++) { sum=0; for (j=1;j<=5;j++) { scanf("%f",&grade); average=sum/5; printf("No.%d average=%5.2f\n", i, average); 17、输入若干字符数据,分别统计其中A,B,C的个数。 #include void main( ) { char c; {int year, leap; scanf(“%d”,&year); if (year%4==0) {if (year%100==0) {if (year%400!=0) leap=1; leap=0; leap=1; leap=0; if (leap) printf(“%d is ”,year); printf(“%d is not ”,year); printf(“a leap year.\n”); 错误语句:if (year%400!=0) 正确语句:if (year%400= =0) 2.下面的功能是输出一个4位整数的后两位数值,例如输入1234,输出34。 #include void main() { int x,y; printf(“\ninput a integer<1000--9999>:”); scanf(“%d”,x); y=x%100; 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=(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”); 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("\nThere are %d numbers! ",num); 错误语句: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; pi=0; n=1.0; while (fabs(t)>10-6) {pi=pi+t; n=n+2; s=-s; t=s/n; -6 pi=pi*4; printf("pi=%10.6f\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("%15ld %15ld",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); 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);} 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() f1=temp; printf("sum=%9.6f\n",sum); 运行结果: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("sum=%e\n",sum); 运行结果:2.561327e+018 9、用牛顿迭代法求方程4x-8x+6x-12=0在1.5附近的根。 #include #include void main() {float x=1.5,x0,y,f1; {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=%10.2f\n",x); } 运行结果:x= 2.00 10、编写程序,打印出以下图案。 * *** ***** ******* ***** *** * 32 #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("\n"); /*输出每行*号后换行 */ for(i=1;i<=3;i++) /* 输出下面三行*号 */ {for(j=1;j<=i;j++) printf(" "); /* 输出*号前面的空格 */ for(k=1;k<=5-2*(i-1);k++) printf("*"); /* 输出每行*号 */ printf("\n"); /* 输出每行*号后换行 */ 第四章 数 组 一.选择题 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]="0123"; 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("%d%s",x,&c); B) scanf("%d%s",&x,&c); C) scanf("%d%s",x,c); D) scanf("%d%s",&x,c); 4.以下叙述中错误的是( C )。 A) 对于double类型数组,不可以直接用数组名对数组进行整体输入或输出 B) 数组名代表的是数组所占存储区的首地址,其值不可改变 C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出"下标越界"的出错信息 (VC:可以运行但会显示:遇到问题需要关闭) D)可以通过赋初值的方式确定数组元素的个数 5.已有定义:char a[ ]="xyz",b[]={'x','y','z'};,以下叙述中正确的是( 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,%d\n",i,j); 程序运行后的输出结果是( D )。 A) 9,9 B) 8,9 C) 1,8 D) 9,8 8.下面程序的运行结果是( B )。 #include void main() { char ch[7]={ "65ab"}; int i,s =0; for(i=0;ch[i]>= '0'&&ch[i]< '9';i++) s=10*s+ch[i]- '0'; printf("%d\n",s); 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("%d\n",s); 程序运行后的输出结果是( 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.用"%s"格式符输出字符串时,printf函数中的输出项是 字符数组名 ,而不是数组元素名。 6. 若有以下定义: float a[10]; 则a数组元素下标的上限是 9 ,下限是 0 。 7.下列程序运行结果是 6 。 #include #include void main() { char str[12]={'s','t','r','i','n','g'}; printf("%d\n",strlen(str)); 8.以下程序的功能是:使一个字符串按逆序存放,请填空。 #include #include void main() { char m;char str[]="abcdefg"; int i,j;?\ 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("%s\n",str); 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("%d\n",max); 10.下面程序的功能是,将字符数组S2中的全部字符拷贝到字符数组S1中。不用strcpy函数。请填空 错误语句: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("%c",c[i]); printf("\n"); 错误语句: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("\n"); printf("%15d",t[i]); 2.用选择法对20个整数排序。 #include void main() {int i,j,min,t,x[20]; for(i=0;i<20;i++) scanf("%d",&x[i]); 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("%6d",x[i]); 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("%d", &a[i][j]); min=a[0][0]; for (i=0;i<3;i++) for (j=0;j<5;j++) if (a[i][j] void main() {char str1[80],str2[20]; int i=0,j=0; scanf("%s",str1); scanf("%s",str2); printf("str1:%s\n",str1); printf("str2:%s\n",str2); while(str1[i]!='\0') i++; /* 循环后i为最后一个字符之后 */ while(str2[j]!='\0') {str1[i]=str2[j]; j++;} str1[i]='\0'; printf("%s\n",str1); 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("%f",&a[i][j]); for(i=0;i<5;i++) sum=sum+a[i][i]; printf("sum=%f",sum); 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("\n"); printf("%15d",f[i]); 第五章 函 数 一、选择题 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) 。 ) { w=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;} { 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.从用户使用的角度看,函数有两种: 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 函数 、 用户定义的函数 用以解决用户的专门需要。 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; 12.求两个数中较小的一个数。 #include void main() int aa(int x,int y) { int w; while(y) { w=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; 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 int fac(int n) {int c,i; void convert(int n) { int i; if((i=n/10)!=0) convert(i); putchar(n%10+’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);} printf(“它不是一个三角形”); 7.编写一个函数,输入一个4位数字,要求输出这4个数字字符,使每两个数字字符间空一个空格。如输入2008,则应输出“2 0 0 8”。 #include "stdio.h" #include "string.h" void main() {char str[80]; void insert(char str[]); printf("input four digits: "); scanf("%s",str); insert(str); printf("%s",str); 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 "stdio.h" #include "math.h" sushu(int n) {int k,i,flag; k=sqrt((double)n); flag=0; while((i<=k)&&(flag==0)) {if(n%i==0)flag=1; i=i+1;} return(!flag);} void main() int a,b; printf("\n请输入一个正整数:"); scanf("%d",&a); b=sushu(a); if(b) printf("%d 是一个素数\n",a); printf("%d 不是一个素数\n",a); }9.有五个人坐在一起,问第五个人多少岁,他说比第四个人大2岁, 问第四个人多少岁,他说比第三个人大2岁, 问第三个人多少岁,他说比第二个人大2岁, 问第二个人多少岁,他说比第一个人大2岁, 问第一个人多少岁,他说10岁, 问第五个人多少岁? #include "stdio.h" int f(int n) {int a; if(n==1)a=10; else a=f(n-1)+2; return(a);} void main () {printf("age=%d\n",f(5)); 第六章 指针 一.选择题 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 ("%d,%d",&a,&b); pointer1=&a; swap (pointer1, b); printf ("a=%d,b=%d",a,b ); } 程序执行后的输出结果是( 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 putchar (*ch_pointer); } 程序执行后的输出结果是( D )。 A)ABCDEFGHI B)ABCDEFGH C)HGFEDCBA 二.填空 D)IHGFEDCBA 1.在C语言中,指针++运算的意义是使指针指向下一个数据元素的位置。指针--运算的意义是使指针指向上一个数据元素的位置。在指针变量中具体增加或减少的字节数则是由系统自动根据指针变量的 基类型 决定。 2.单目运算符&后面跟上变量名字来表示该变量的 地址 。 3.在C语言中,对于int *pa[10],表示定义pa。因为*比[ ]优先级低,所以pa先要与[ ]结合成为pa[10]的数组形式,它有10个数组元素;然后再与前面的int *结合来表示数组元素的类型是指向整型变量的指针,就是说,每个数组元素都可以指向一个整型变量。 4.在C语言中,对于int (*fun_p)(int x),表示定义fun_p为一个 指向函 的指针变量 。因为fun_p首先要与*结合成为指针变量;然后再与后面的( )结合,表示该指针变量指向函数,该函数的返回值(即函数值)为整型。 5.指向函数的指针变量在使用之前必须要先定义,而且也必须进行初始化,使它指向某个函数。指向函数的指针变量定义中的返回值类型和参数表内容应该与该函数的返回值类型和参数表内容保持一致。同时注意,指向函数的指针变量只能指向 函数的入口地址 ,而不能指向函数中间的某一条语句。 6.使用指针的方法编写程序,求两个浮点数的和以及差。 #include void sub_add(float x, float y , float *sub, float *add); main( ) {float a, b; float sub_result, add_result; printf ("please input data (a,b): \n"); scanf ("%f, %f", &a, &b); printf ("a-b=%f, a+b=%f \n", sub_result , add_result); void sub_add(float x, float y , float *sub, float *add) /* 差、和的函数定义 */ {*sub=x-y; /* 两个浮点数的差赋值给指针sub所指向的变量 */ *add=x+y; /* 两个浮点数的和赋值给指针add 所指向的变量 */ return; 7.使用指针编写程序,从键盘输入一个字符串,然后统计字符串中字符的个数。 #include int length(char *p); main( ) {char string[30]; int l; printf ("please input a string (less than 30 characters):\n"); scanf ("%s", string); l=length(string); printf ("the string length is:%d\n",l); int length(char *p) /* 定义函数,统计字符串中字符的个数*/ {int len=0; while (*p!='\0') return (len); 8.使用指针编写程序,按照正反两个顺序打印一个字符串。 #include void main( ) {char *p_string1,*p_string2; p_string1="computer language"; /* 定义字符指针变量并且指向一个字符串 */ p_string2=p_string1; while (*p_string2!='\0') /* 正序输出字符串*/ putchar ('\n'); while (--p_string2>=p_string1) /* 反序输出字符串*/ putchar (*p_string2); putchar ('\n'); 9.使用指向指针的指针的方法,完成对n个整数(例如10个整数)排序后输出。要求从键盘输入n个整数并且把排序单独编写成函数。 #include void bubble_sort(int **p, int n); void main( ) {int i, n, number[30]; int **pp, *pointer[30]; printf ("please input integer number(less than 30):\n"); scanf ("%d",&n); for (i=0;i**(p+j+1)) {temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; } /*交换整数的地址*/ } 10.使用指针数组编写程序,从键盘输入一个星期几(例如7),则程序输出对应星期几的英文名字(Sunday)。 #include #include char *day_name(int n); /* 英文星期几函数的原型声明 */ void main( ) {int n; char *pointer; printf ("please enter a number of week\n"); scanf ("%d",&n); pointer=day_name(n); printf ("Day No:%2d-->%s\n", n, pointer); char *day_name(int n) /* 英文星期几函数的定义 */ {static char *english_name[ ]={"illegal day","Monday","Tuesday ","Wednesday ", "Thursday","Friday","Saturday","Sunday"}; if (n<1||n>7) return(english_name[0]); 三.程序改错 1.有一个班级有n个学生,开设m门课程。使用指针的方法编写程序,查找有课程不及格的学生,并且打印他们的成绩。 #include #define N 4 #define M 5 void search_fail( int (*p)[M]) ; /* 函数的原型声明 */ void main( ) /* 主函数 */ { int i,j; int score[N][M]; printf ("please input data(split by ' '):\n"); for (i=0;i #define N 10 int max,min; /*全局变量*/ for (i=0; p[i]!='\0'; i++) /* p[i]等价与*(p+i) */ if (p[i]=='x') {printf("there is a 'character x' in the string\n"); break; } if (p[i]!='\0') printf ("There is no 'character x' in the string\n"); } 错误语句:if (p[i]!='\0') 正确语句:if (p[i]='\0') 5.使用指针数组编写程序,从键盘输入一个星期几(例如7),则程序输出对应星期几 的英文名字(Sunday)。 #include #include void main( ) {int n; char *day_name[ ]={"illegal day","Monday","Tuesday ","Wednesday ", "Thursday","Friday","Saturday","Sunday"}; while (1) /* 无限循环,由break 语句退出*/ {printf ("please enter a number of week\n"); scanf ("%d",&n); if (n<1&&n>7) {printf ("Day No:%2d-->%s\n", n, day_name[0]); break; printf("Day No:%2d-->%s\n", n, day_name[n]); 错误语句:if (n<1&&n>7) 正确语句:if (n<1||n>7) 1.从键盘输入3个整数,按照从小到大的顺序输出。使用指针的方法并且用3种不同方式实现。 #include main( ) { int a,b,c; int *pointer_1,*pointer_2,*pointer_3,*p; printf ("please input data (a,b,c):\n"); scanf ("%d,%d,%d",&a,&b,&c); pointer_1=&a;pointer_2=&b;pointer_3=&c; if(a>b) {p=pointer_1; pointer_1=pointer_2; pointer_2=p;} /*指针交换*/ if(a>c) {p=pointer_1; pointer_1=pointer_3; pointer_3=p;} /*指针交换*/ if(b>c) {p=pointer_2; pointer_2=pointer_3; pointer_3=p;} /*指针交换*/ printf ("a=%d,b=%d,c=%d\n",a,b,c); /* a、b、c之间未交换 */ printf ("The sorted result is:%d,%d,%d\n",* pointer_1,* pointer_2,* pointer_3); 2.将数组中n个整数按相反的顺序存放后输出。使用指针的方法并用2种不同方式 #include #define N 10 void inverted(int *x,int n); main( ) {int i,array[N]; printf ("please input data(split by ', '):\n"); for(i=0;i char swap(char *p1, char *p2); void main( ) { char string1[30], string2[30], string3[30]; printf ("please input data (string1,string2,string3):\n"); scanf ("%s", string1); scanf ("%s", string2); scanf ("%s", string3); if(strcmp(string1, string2)>0) swap(string1, string2); /*若string1>string2,则交换 */ if(strcmp(string1, string3)>0) swap(string1, string3); /*若string1>string3,则交换 */ if(strcmp(string2, string3)>0) swap(string2, string3); /*若string2>string3,则交换 */ printf ("The sorted result is:\n"); /* 输出排序后的结果 */ printf ("%s\n", string1); printf ("%s\n", string2); printf ("%s\n", string3); char swap(char *p1, char *p2) /*交换字符串的函数,采用传地址的方法传递函数参数*/ { char *p[30]; strcpy(p, p1); strcpy(p1, p2); strcpy(p2, p); 4.使用指针编写程序,完成字符串的复制。要求不能使用strcpy函数。 #include void copy_string(char *to, char *from); void main( ) {char *a="one world,one dream."; char *b="one world,one economic."; printf ("string a=%s\nstring b=%s\n",a,b); printf ("copy string a to string b:\n"); copy_string(b,a); printf ("string a=%s\nstring b=%s\n",a,b); void copy_string(char *to, char *from) /*形参from指向源字符串,to指向目标字符串*/ {int i=0; for( ;*from!='\0';from++,to++) *to=*from; *to='\0'; 本题执行过程中断异常 5.使用指向一维数组的指针的方法,完成从键盘输入n个字符串(例如10个国家名)并按字典顺序排列后输出。 #include"string.h" #define N 10 void select_sort(char (*name)[80],int n); void print(char (*name)[80],int n); void input(char (*name)[80],int n); main( ) {char country_name[N] [80]; input(country_name,N); /* 输入字符串 */ select_sort(country_name,N); /* 排序字符串*/ print(country_name,N); /* 输出排序后的字符串*/ void input(char (*name)[80],int n) /* char (*name)[80]等价于char name[ ][80] */ {int i; printf ("please input country name(split by enter):\n"); for (i=0;i0) k=j; if (k!=i) {strcpy(temp,name[i]);strcpy(name[i],name[k]);strcpy(name[k],temp);} void print(char (*name)[80],int n) /* char (*name)[80]等价于char name[ ][80] */ {int i; printf("the sort result is:\n"); for (i=0;i #define N 5 void move(int *p); void max_value(int array[ ][N],int n); void main( ) { int a[N][N],*pointer,i,j; printf ("please input data:\n"); for (i=0;i0) {temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; } /*交换字符串的地址*/ 方法2:选择法排序1。 #include #include void select_sort(char **p, int n); void main( ) { int i, n; char **pp, *p_str[20], string[20][30]; /* 字符串的最大长度为30*/ printf ("please input string number(less than 20):\n"); scanf ("%d",&n); for (i=0;i0) k=j; /*小值的下标*/ if (k!=i) {temp=*(p+i); *(p+i)=*(p+k); *(p+k)=temp; } /*交换字符串的地址*/ } 8.使用指针并利用矩形法编写计算定积分 f ( x ) dx 的通用函数。然后利用它分别 a计算以下三种 数学 数学高考答题卡模板高考数学答题卡模板三年级数学混合运算测试卷数学作业设计案例新人教版八年级上数学教学计划 函数的定积分: (1)f (x)=x-5x+1 (2)f (x)=x+2x-2x+3 (3)f (x)=x/ (2+x) #include #include /* 调用数学函数库*/ double integral(double s,double t,int m,double (*p)(double x)); /* 函数的原型声明*/ double function1(double x); /* 函数的原型声明*/ double function2(double x); /* 函数的原型声明*/ double function3(double x); /* 函数的原型声明*/ /* 主函数*/ void main(void) {int n,select; double a,b,value=0.0; printf ("please input the count range (from a to b) and the number of sections( n ).\n"); scanf ("%lf,%lf,%d",&a,&b,&n); printf ("please enter your choice:'1' for function1,'2' for function2,'3' for function3\n"); scanf ("%d",&select); if (select==1) value=integral(a,b,n,function1); /* 调用integral函数*/ else if (select==2) value=integral(a,b,n,function2); /* 调用integral函数*/ else value=integral(a,b,n,function3); /* 调用integral函数*/ printf ("value=%f\n", value); } /* integral函数的定义*/ double integral(double s,double t,int m,double (*p)(double x)) {int i; double x,h,area,f; f=0.0; h=(t-s)/m; x=s; for (i=1;i<=m;i++) {x=x+h; area=(*p)(x)*h; /* 用指向函数的指针p调用函数 */ f=f+area;} return (f); } /* function1函数的定义 */ double function1(double x) {double fx; fx=x*x-5.0*x+1.0; return (fx); } /* function2函数的定义 */ double function2(double x) {double fx; fx=x*x*x+2*x*x-2*x+3.0; return (fx); } /* function3函数的定义 */ double function3(double x) {double fx; fx=x/(2.0+x*x); return (fx); } 结果为0? 第七章 结构体与共用体 一.选择题 1.有以下程序 # include struct STU { int num; float totalscore; }; void fun(struct STU p) { struct STU s[2]={{20044,550},{20045,537}}; p.num = s[1].num; p.totalscore = s[1].totalscore; } main() { struct STU s[2]={{20041,703},{20042,580}}; fun(s[0]); printf("%d %3.0f\n", s[0].num, s[0].totalscore); } 程序运行后的输出结果是( D )。 (A) 20045 537 (B) 20044 550 (C) 20042 580 (D) 20041 703 2. 已知职工记录描述为: struct workers { int num; char name [20]; char sex; struct {int day; int month; int year; } birth; } struct workers w; 设变量w中的“生日”是“1991年8月11日”,下列对“生日”的正确赋值方式是( (A) day=11; (B) w.day=11; Month=8; w.month=8; Year=1991; w.year=1991; (C) w.birth.day=11; (D) birth.day=11; w.birth.month=8; birth.month=8; char ch[8]; }PER; 则下面叙述中正确的是( B )。 (C) PER是结构体变量名 (B) PER是结构体类型名 typedef struct是结构体类型 (D) struct是结构体类型名 enum a={sun=9,mon=-1,tue}; enum a {?sun?,?mon?,?tue?}; 8. 以下对枚举类型名的定义中正确的是( A,B )。 (A) enum a {sun,mon,tue}; (B) (C) enum a {“sun”,”mon”,”tue”}; (D) 9. 当定义一个结构体变量时,系统分配给它的内存是( A )。 (A) 各成员所需内存量的总和 (B) 成员中占内存量最大者所需的容量 (C) 结构中第一个成员所需内存量 (D) 结构中最后一个成员所需内存量 10. 当定义一个共用体变量时,系统分配给它的内存是( B )。 (A)各成员所需内存量的总和 (B) 成员中占内存量最大者所需的容量 (C) 结构中第一个成员所需内存量 (D) 结构中最后一个成员所需内存量 11. 若有以下说明和定义 union dt {int a;char b;double c;}data; 以下叙述中错误的是( C ) (A)data的每个成员起始地址都相同 (B)变量data所占的内存字节数与成员c所占字节数相等 (C)程序段:data.a=5;printf("%f\n",data.c);输出结果为5.000000 (D)data可以作为函数的实参 12. 下面对typedef的叙述中不正确的是( C )。 (A)用typedef可以定义各种类型名,但不能用来定义变量 (B) 用typedef只是将已存在的类型用一个新的标识符来代表 (C) 用typedef可以增加新类型 (D) 使用typedef有利于程序的通用和移植 13. 设有如下说明 typedef struct { int n; char c; double x;}STD; 则以下选项中 ,能正确定义结构体数组并赋初值的语句是( A,C (A) STD tt[2]={{1,'A',62},{2,'B',75}}; (B) STD tt[2]={1,"A",62,2,"",75}; (C) struct tt[2]={{1,'A'},{2,'B'}}; (D) struct tt[2]={{1,"A",62.5},{2,"B",75.0}}; 14. 有以下程序 。 ) main() { union{ unsigned int n; unsigned char c; ul.c='A'; printf("%c\n",ul.n); 执行后输出结果是( C )。 (A)产生语法错 (B) 随机值 (C) A (D) 65 15. 若要说明一个类型名STP,使得定义语句STP s;等价于char *s;,以下选项中正确的是( D ) A) typedef STP char *s; B) typedef *char STP; C) typedef STP *char; D) typedef char* STP ; 二.填空题 1. 若有以下的说明和语句,已知int类型占4个字节,则以下的输出结果为。 main () { struct st {char a[10]; int b; double c; printf (“%d\n”,sizeof (struct st )); 2. 若有如下结构体说明; 请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型。 struct STRU { int a, b ; char c; double d: struct STRU p1,p2; 3. 若有以下的说明、定义和语句,则输出结果为(已知字母A的十进制数为65).(说明:int为2B时,输出结果为24897(0110000101000001是aA的存储形式)int为4B时,由于高两位为随机值,所以最后的输出结果为随机值) main () { union un { short int a; char c[2]; w.c[0]=?A?;w.c[1]=?a?; printf (“%d\n”,w.a); 4. 下面程序的运行结果是:。 typedef union student { char name[10]; long sno; char sex; float score[4]; }STU; main() { STU a[5]; printf(“%d\n”,sizeof(a)); } 5.以下程序输出结果是(低字节在低位,高字节在高位) # include “stdio.h” union pw { int i; char ch [2]; main () a.ch [0]=13; a.ch [1]=0; printf (“%d\n”, a.i); 6.设有一个3个结点的单链表,请完成以下输出结点数据的函数: void output_list (struct person *head) struct person *h; h=head; while(h!=NULL) printf("%d,%s\n",h->num,h->name); 7. 结构数组中存有三个联系人的姓名和年龄,以下程序输出三个联系人中年龄最大的联系人的姓名和年龄。请在__________内填入正确内容。 struct contact{ char name[30]; int age; }PER[3]={{"liming",18},{ "wang-hua",19},{"zhang-ping",20}}; main() struct contact *p,*q; int old=0; p=PER; if(oldage) {q=p;old=p->age} printf("%s ,%d",q->name,q->age); 8.完成以下程序将链表的结点链接起来: struct NODE { int num; struct NODE *next; main() { struct NODE s[3]={{1, '\0'},{2, '\0'},{3, '\0'}}, *p, *q, *r; int sum=0; s[0].next=s+1; s[1].next=s+2; s[2].next=s; p=s; sum+=q->next->num; sum+=r->next->next->num; printf("%d\n", sum); 9.已有定义:double *p;,请写出完整的语句,利用malloc函数使p指向一个双精度型 的动态存储单元 (double*)malloc(sizeof(double)) 。 10.以下程序段用于构成一个简单的单向链表,请填空。 struct STRU { int x, y ; float rate; } a, b; a.x=0; a.y=0; a.rate=0; a.p=&b; b.x=0; b.y=0; b.rate=0; b.p=NULL; 三.改错题 1.输出结构体成员的程序: #include main() struct person {int k; struct NODE *link; main() { struct NODE m[5],*p=m,*q=m+4; int i=0; while(p!=q) {p->k=++i;p++; q->k=i++; q++; q->k=i; for(i=0;i<5;i++)printf("%d",m[i].k); printf("\n"); 错误语句:q++; 正确语句:q--; 4. 统计学生成绩的程序: struct STU { char num[10]; float score[3]; }; main() { struct stu s[3]={{“20021”,90,95,85}, {“20022”,95,80,75}, {“20023”,100,95,90}},*p=s; int i; float sum=0; for(i=0;i<3,i++) sum=sum+p.score[i]; printf(“%6.2f\n”,sum); 错误语句:sum=sum+p.score[i]; 正确语句:sum=sum+p->score[i]; 5. 输出链表结点数据的函数: struct person int num; char name[30]; struct person *next; void output_list (struct person *head) struct person *h; if(h==NULL)printf("the list is empty\n"); while(h!=NULL) printf("%d,%s\n",h->num,h->name); h=head->next; 错误语句:h=head->next; 正确语句:h=h->next; 四.编程题 1. 定义一个自行车结构体,其成员项包括编号、颜色、型号(24.26.28等);建立一个 自行车结构体数组并初始化赋值,然后将结构体数组元素打印输出。 # include struct bicycle {long num; char color; int type; void main () static struct bicycle bye[5]={{ 2000,'B',22}, { 2001,'R',28,}, { 2002,'G',30,}, { 3001,'W',26,}, { 3002,'W',24 }}; int i; printf("number color type\n"); printf("__________________________________\n"); for(i=0; i<=4;i++) printf("%-10ld%-6c%-4d\n",bye[i].num,bye[i].color,bye[i].type); 2. 编写一个处理存储运动员的个人记录的程序,要求: 定义一个名叫player的结构体,用于存储运动员的个人记录,其中的数据项有三个项目:运动员姓名“name”运动队名“team”平均运动成绩“avg”。 ● 编写一个名为input_player的函数,输入运动员的记录,要求以结构体作为参数。 ● 编写一个名为input_player的函数,输入运动员的记录,要求以结构体指针作为参 #include struct player char team[30]; long avg; void input_player_1(struct player *p) printf("please input name\n"); scanf("%s",p->name); printf("please input team\n"); scanf("%s",p->team); printf("please input avg\n"); scanf("%ld",&p->avg); void input_player_2(struct player p) printf("please input name\n"); scanf("%s",p.name); printf("please input team\n"); scanf("%s",p.team); printf("please input avg\n"); scanf("%ld",&p.avg); void main() struct player cur; struct player pp; input_player_1(&cur); input_player_2(pp); 3. 编写一个程序,从键盘上输入3个学生的编号、姓名、年龄、家庭住址,并存放在一 个结构数组中,从中查找出年龄最小和年龄最大的学生的信息。 #include struct STU { int num; int age; char address[100]; struct STU *MaxAgeStudent(struct STU s[],int n) //查找年龄最大的学生 { int i,pos=0; for(i=0;is[i].age )pos=i; return &s[pos]; void PrintStudent(struct STU s) printf("%d,%s,%d,%s\n",s.num, s.name, s.age, s.address); } main() struct STU stud[3]; struct STU *p; int i; for (i=0;i<3 ;i++ ) //输入3个记录 printf("please input num\n"); scanf("%d",&stud[i].num); printf("please input name\n"); scanf("%s",stud[i].name); printf("please input age\n"); scanf("%d",&stud[i].age); printf("please input address\n"); scanf("%s",stud[i].address); p=MaxAgeStudent(stud,3); 5. 按上题的结构体类型定义一个有N名职工的结构体数组。编一程序,计算这N名职工 的总工资和平均工资。 #include #define NUM 3 struct employee int num; char name[30]; int gl; //工龄 float salary; //工资 void PrintEmployee(struct employee s) printf("%d,%s,%d,%8.2f\n",s.num, s.name, s.gl, s.salary); main() int i; float total=0; //统计总工资变量 float avg=0; //平均工资变量 struct employee emp[NUM]; //定义NUM元素结构体数组 for(i=0;i struct person {char name[30]; int count; }leader[3]={{"ZhaoHong",0},{"ZhangJun",0},{"LiuQiang",0}}; void main() { int i,j; char leader_name[3][50]; for(i=0;i<=2;i++) printf("please input ZhaoHong or ZhangJun or LiuQiang\n"); scanf("%s",leader_name[i]); for(j=0;j<3;j++) if(strcmp(leader_name[i],leader[j].name)==0) leader[j].count++; for(i=0;i<3;i++)printf("%s:%d\n",leader[i].name,leader[i].count); } 7.设有3名考生,每个考生的数据包括学号、姓名、性别和成绩。编一程序,要求用指 针方法找出女性考生中成绩最好的并输出。 struct STU { int num; char name[10]; char sex; float score; struct STU *BestStudent(struct STU s[],int n) { int i,pos=0; for(i=0;i #include struct NODE /*链表结点结构类型定义*/ int num; struct NODE *next; struct NODE *createlist(int n) struct NODE *head,*cur,*tail; /*head为头结点;cur为新建的结点;tail为尾结点*/ int i; for(i=0;inum); if(i==0) tail=head=cur; /*第一个节点*/ else tail->next=cur; /*建立中间结点*/ cur->next=NULL; tail=cur; return(head); /*函数返回新建链表的头结点*/ struct NODE * delete_node (struct NODE *head, long num) struct NODE *cur; /* 指向要删除的结点 */ struct NODE *m1; /* 指向cur的前一个结点 */ if (head == NULL) /* 空表 */ output_list(head); 10.试写出统计通讯录链表中结点的个数的程序。 #include #include struct person /*链表结点结构类型定义*/ int num; char name[30]; struct person *next; struct person *createlist(int n) struct person *head,*cur,*tail; /*head为头结点;cur为新建的结点;tail为尾结点*/ int i; for(i=0;inum,cur->name); if(i==0) tail=head=cur; /*第一个节点*/ else tail->next=cur; /*建立中间结点*/ cur->next=NULL; tail=cur; return(head); /*函数返回新建链表的头结点*/ int count_node (struct person *head) int c=0; struct person *h; h=head; if(h==NULL)printf("the list is empty\n"); while(h!=NULL) c=c+1; void output_list (struct person *head) struct person *h; h=head; if(h==NULL)printf("the list is empty\n"); while(h!=NULL) printf("%d,%s\n",h->num,h->name); main() int c=0; struct person *head;/*链表的头结点*/ head=createlist(3); /* 创建3个节点的链表*/ c=count_node(head); printf("list has %d nodes\n",c); h=h->next; } h=h->next; } return (c); /* 返回节点个数 */ 第八章 文 件 一.单选题 1.下列关于c语言数据文件的叙述中正确的是( D )。 A)文件由ASCI码字符序列组成,c语言只能读写文本文件 B)文件由二进制数据序列组成,c语言只能读写二进制文件 C)文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件 D)文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件 2.为写而打开二进制文件wr.dat的正确写法是( C ) A) fopen(“wr.dat”,”rb”) B) fp=fopen(“wr.dat”,”r”) C) fopen(“wr.dat”,”wb”) D) fp=fopen(“wr.dat”,”w”) 3.已知函数的调用形式:fread(buf,size,count,fp),参数buf的含义是( C )。 A)一个整型变量,代表要读入的数据总数 B)一个文件指针,指向要读的文件 C)一个指针,指向要读入数据的存放地址 D)一个存储区,存放要读的数据项 4.若fp是指向某文件的指针,且读取文件时已读到文件末尾,则库函数feof(fp)的返回值是( A )。 A)1 B)NULL C)0 D)EOF 5.标准库函数fgets(buf,n,fp)的功能是( D )。 A)从fp所指向的文件中读取长度为n的字符串存入缓冲区buf B)从fp所指向的文件中读取长度不超过n-1的字符串存入缓冲区buf C)从fp所指向的文件中读取n个字符串存入缓冲区buf D)从fp所指向的文件中读取长度为n-1的字符串存入缓冲区buf 6.函数rewind的作用是( B )。 A)将文件位置指针指向文件中所要求的特定位置 B)使文件位置指针重新返回文件的开始位置 C)使文件位置指针指向文件的末尾 D)使文件位置指针自动移至下一个字符位置 7.函数调用语句fseek(fp,5L,0);的含义是( B )。 A)将读写位置指针从文件末尾处向文件开始处移动5个字节 B)将读写位置指针从文件开始处向文件末尾处移动5个字节 C)将读写位置指针从当前位置向文件开始处移动5个字节 D)将读写位置指针从当前位置向文件末尾处移动5个字节 8.阅读下面的程序,程序实现的功能是 ( C )。 #include #include void main( ) FILE *fp; char a[10],*p=a; fp=fopen("str.txt","w"); while(strlen(gets(p))>0) {fputs(a,fp); fputs("\n",fp); fclose(fp); A)从键盘输入若干行字符,按行号倒序写入文本文件str.txt中 B)从键盘输入若干行字符,取前2行写入文本文件str.txt中 C) 从键盘输入若干行字符,依次写入文本文件str.txt中 D) 从键盘输入若干行字符,第一行写入文本文件str.txt中 9.表达式~a>b&&c^d的运算顺序是( D )。 A) ~,^,>,&& B) ~,&&,^,> C) ~,>,^,&& D) ~,^,&&,> 10.整型变量x和y的值相等、且为非0值,则以下选项中,结果为零的表达式是( B )。 A) x | y B) x ^ y C) x & y D) x || y 11.以下程序的功能是进行位运算 main( ) { unsigned char a, b; a=7^3; b= ~4 & 3; printf("%d %d\n",a,b); 程序运行后的输出结果是( A )。 A)4 3 B)7 3 C)7 0 D)4 0 12.有以下程序 main( ) int c=35; printf("%d\n",c&c); 程序运行后的输出结果是( C )。 A) 0 B) 70 C) 35 D) 1 二.填空题 1.按数据的组织形式文件分为 2.按文件的处理方法文件分为缓冲文件系统,非缓冲文件系统。 3.下面程序将已经存在的文件file1打开,先显示在屏幕上,再将其复制到file2文件中,请填空。 #include #include int i; myf=fopen(fname,"w"); for(i=0;i #include void main() { FILE *fpIn, *fpOut; char ch; fpIn = fopen("da.txt", "r"); fpOut = fopen("db.txt", "w"); if(fpIn == NULL) { printf("无法打开数据源文件!\n"); exit(0); } if(fpOut == NULL) { printf("无法打开转换文件!\n"); exit(0); } while(!feof(fpIn)) { ch = fgetc(fpIn); ch = ch+32; fputc(ch, fpOut); } fclose(fpIn); fclose(fpOut); 2.从键盘输入5种商品的信息,包括商品名称、单价、数量和产地,把它们转存到磁盘文件中。 #include #include struct goods{ char name[10]; float price; int volume; char add[10]; void main() scanf("%s%d%d%s",gds[i].name,&gds[i].price,&gds[i].volume,gds[i].add); 3. 输入10个学生的数据,存入文件std.txt中。 #include #include struct stu{ char name[10]; int num; int age; for(i = 0; i < 5; i++) { fwrite(&gds[i],sizeof(struct goods),1,fp); } fclose(fp); FILE* fp; struct goods gds[5]; int i; if((fp = fopen("goods.txt","wb")) == NULL) { printf("无法打开文件!\n"); exit(0); } printf("请输入商品信息:\n"); for(i = 0; i < 5; i++) { void main() FILE* fp; struct stu st[10]; int i; if((fp = fopen("std.txt","wb")) == NULL) printf("无法打开文件!\n"); exit(0); printf("请输入学生信息:\n"); for(i = 0; i < 10; i++) scanf("%s%d%d",st[i].name,&st[i].num,&st[i].age); fwrite(st,sizeof(struct stu),10,fp); fclose(fp); 4.打开上题中的文件std.txt,添加两个同学的数据,再将第2,4,6,8, 生数据输出到显示器上。 #include #include struct stu{ char name[10]; int num; int age; void main() FILE* fp; struct stu st[12]; int i; if((fp = fopen("std.txt","ab+")) == NULL) printf("无法打开文件!\n"); exit(0); printf("请添加学生信息:\n"); for(i = 0; i < 2; i++) 10,12个学 } scanf("%s%d%d",st[i].name,&st[i].num,&st[i].age); fwrite(st,sizeof(struct stu),2,fp); rewind(fp); fread(st,sizeof(struct stu),12,fp); printf("\nname\tnumber\tage\n"); for(i = 1; i <12; i += 2) { printf("%s\t%d\t%d\n",st[i].name,st[i].num,st[i].age); fclose(fp); 5.从键盘上输入1个正整数给int变量num,输出由8~11位构成的数(从低位、0号开始编号)。 #include void main() { int num, mask; printf("Input a integer number: "); scanf("%d",&num); num >>= 8; mask = ~ ( ~0 << 4); /*右移8位,将8~11位移到低4位上*/ /*间接构造1个低4位为1、其余各位为0的整数*/ printf("result=0x%x\n", num & mask); 结果总为0? 6.实现16进制数的循环左移输出,每次移动一位,直至回到原值。如将16进制数5678进行循环左移输出则结果为6785、7856、8567、5678。 #include void main() { int rotate(int x,int i); int i; short int x=0x5678; printf(" result\n"); for(i=0;i<=4;i++) printf("%15d %x\n",i,rotate(x,i)); int rotate(int value,int n) int bits; short int result; 第一部分 习题篇 第一章 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
本文档为【c语言程序设计习题答案】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_594905
暂无简介~
格式:doc
大小:50KB
软件:Word
页数:97
分类:
上传时间:2017-06-11
浏览量:103