江汉大学c语言教材答案_第1页
江汉大学c语言教材答案_第2页
江汉大学c语言教材答案_第3页
江汉大学c语言教材答案_第4页
江汉大学c语言教材答案_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C教材习题答案习题1一填空题1C程序是由(函数 )构成的,一个C程序中至少包含(main函数 ) 。因此,( 函数 ) 是C程序的基本单位。2C程序注释是由(/* ) 和( */ ) 所界定的文字信息组成的。3函数体一般包括(声明部分) 和(执行部分 ) 。二判断题1一个C程序的执行总是从该程序的main函数开始,在main函数最后结束。 (正确)2main函数必须写在一个C程序的最前面。 (错误)3一个C程序可以包含若干的函数。 (正确)4C程序的注释部分可以出现在程序的任何位置,它对程序的编译和运行不起任何作用。但是可以增加程序的可读性。 (正确)5C程序的注释只能是一行。 (错误)6C程

2、序的注释不能是中文文字信息。 (错误)8可以使用Turbo C来编译和连接一个C程序。 (正确)9可以使用Turbo C来运行一个C程序。 (正确)10可以使用Turbo C来实时调试(即动态调试)一个C程序。 (正确)三、在c+ 6.0中输入如下的程序,编译、连接通过后显示结果 #include “stdio.h” void main() printf(“ * ”) printf(“ * ”); printf(“ * ”); printf(“* ”); 答案: * * * * (2)已知底和高,计算三角形的面积。#include “stdio.h” void main() int botto

3、m,high,area; /*bottom 表示底,high 表示高,area表示面积*/bottom=4;high=6;area=bottom*high/2;printf(“the area is %dn”,area);答案:the area is 12算法设计:请试着分别用自然语言或、程序流程图和NS图描述如下算法。设计一个程序在屏幕上显示如下的文字HELLO WELCOME YOU打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其个位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方5的三次方3的三次方。对输入的某学生成绩,如果学习成绩=90分的同学

4、用A表示,60-89分之间的用B表示,60分以下的用C表示。一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=123.编程找出1000以内的所有完数。一只猴子摘了N个桃子第一天吃了一半又多吃了一个,第二天又吃了余下的一半又多吃了一个,到第十天的时候发现还有一个,问共有多少个桃子。答案:1#include “stdio.h”main() printf(“HELLO WELCOME YOU”);2水仙花数产生在100到999之间,利用穷举法,对此范围之内的所有数一个个进行测试,关键是要对每一个三位数分离出它的三个数字。具体的算法是:n%10,得到个位,(n/10)%10,得到百位数字,

5、n/100,得到个位数字。再利用水仙花数的含义来判断该数是否满足条件。#include “stdio.h”main() int n,i,j,k; for(n=100;n=90) printf(An); else if(grade=60 &grade=89) printf(Bn); else printf(Cn);4先考虑一个整数m,如何判断它是否为完数。从数学知识可知:一个数m除该数本身外的所有因子都在1m/2之间。算法中要取得因子之和,只要在1m/2之间找到所有的整数m的数,将其累加起来即可。如果累加起来与m本身相等,则表示m是一个完数,可以将m输出。#include stdio.hmain

6、() int m,i,s; for(m=2;m=1000;m+) s=0; for(i=1;i=m/2;i+) if(m%i=0) s+=i;if(m=s)printf(%dt,m); printf(n);5 找出前后两天的数量关系,然后用递推法求解。设第十天的桃子数目为t,昨天的数为y,则t=y/2-1,得到y=2t+2,这样由今日数目可以求出昨日数目,从最后一天开始,倒退到第一天,倒退的循环次数比天数少1。所以,若已知第n天只留下一个,问第一天有多少个时,则倒退循环n-1次得到结果。天数: 10 9 8 7 6 5 4 3 2 1 桃子数目:1 4 10 22 46 94 190 382

7、766 1534#include stdio.hmain() int i,t,y,n; t=1; printf(ninput number n:n); scanf(%d,&n); for(i=1;i12 ? x+10 : x-12;printf(“%dn”,y);A) 4 B) 3 C) 2 D) 1若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数时,表达式的值为“假”。则以下不能满足要求的表达式是 C 。A) A%2=1 B) !(A%2=0) C) !(A%2) D) A%2设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=ab)&(n=cd)后n的值为 B

8、。 A) 1 B) 2 C) 3 D) 4以下程序的运行结果是 B 。main() int a,b,d=241; a=d/100%9; b=(-1)&(-1); printf(“%d,%d”,a,b);A) 6,1 B) 2,1 C) 6,0 D) 2,0已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是 B 。 if(xy) z=x; x=y; y=z;A) x=10, y=20, z=30 B) x=20, y=30, z=30C) x=20, y=30, z=10 D) x=20, y=30, z=20以下程序的运行结果是 C 。main() int m=5; if

9、(m+5) printf(“%dn”,m); else; printf(“%dn”,m-);A) 4 B) 5 C) 6 D) 7判断char型变量ch是否为大写字母的正确表达式是 C 。A) A=ch=A)&(ch=A)&(ch=Z) D) (A= ch)逻辑运算符两侧运算对象的数据类型 D 。A) 只能是0和1 B) 只能是0或非0正数C) 只能是整型或字符型数据 D) 可以是任何类型的数据sizeof(float)是 B 。A) 一个双精度型表达式 B) 一个整型表达式C) 一种函数表达式 D) 一个不合法的表达式设x、y、z和k都是int型变量,则执行表达式:x=(y=4,z=16,k

10、=32)后,x的值为 CA) 4 B) 16 C) 32 D) 52设有如下的变量定义: int i=8, k, a, b; unsigned long w=5; double x=1, 42, y=5.2;则以下符合C语言语法的表达式是 AA) a+=a-=(b=4)*(a=3) B) x%(-3);C) a=a*3=2 D) y=float(i)假定有以下变量定义: int k=7,x=12;则能使值为3的表达式是 DA) x%=(k%=5) B) x%=(k-k%5) C) x%=k-k%5 D) (x%=k)-(k%=5)设x和y均为int型变量,则以下语句:x+=y,y=x-y;x-

11、=y;的功能是 DA) 把x和y按从大到小排列 B) 把x和y按从小到大排列C) 无确定结果 D) 交换x和y中的值以下程序的输出结果是 D main() int a=12,b=12; printf(%d,%dn,- -a,+ +b); A) 10 10 B) 12 12 C) 11 10 D) 11 13在C语言提供的合法的关键字是 DA) swicth B) cher C) Case D) default若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是 CA)1 B)2 C)2.0 D)2.5C语言提供的合法的数据类型关键字是 BA) Double B) short

12、 C) integer D) Char在C语言中,合法的长整型常数是 AA) 0L B) 4962710 C) 0.054838743 D) 2.1869e10二、填空题scanf函数的格式化字符串中,格式说明与输出项的个数必须相同。如果格式说明的个数小于输出项的个数,则多余的输出项_忽略_。如果格式说明的个数多于输出项的个数,则多余多余的格式将输出_。以下程序的运行结果是_52.00_。#include void main()int i=5,j=9; float x=2.3,y=45.; printf(“%8.2fn”,i%(int)(x+y)*j/2/3+y);若有定义:char c=01

13、0;则变量c中包含的字符个数为_1个_。若x和n均是int型变量,且x和n的初值均为5,则计算表达式x+=n+后x的值为_10_,n的值为_6_。若a是int型变量,则计算下面表达式A=25/3%3后a的值为_2_。若x和a均是int型变量,则计算表达式x=(a=4,6*2)后的x值为_12_,计算表达式x=a=4,6*2后的x 值为_4_。若a是int型变量,则表达式(a=4*5,a*2),a+6的值为_26_。若s是int型变量,且s6,则表达式s%2+(s+1)%2的值为_1_。在VC+中,一个int型数据在内存中占4个字节,则int型数据的取值范围为_-2147483648214748

14、3647_。若有以下定义int m=5,y=2;,则计算表达式y+=y-=m*=y后的y值是_-16_。设有定义语句:int i=3; float f=456.789; 则表达式1.2+i+A+f值的数据类型是_double_。三、思考以下问题几种基本数据类型各占几个字节?标识符分哪几类,各有什么用途?为什么要定义符号常量?变量名定义有什么规则?C语言有哪些几类运算符号,又有哪几类表达式?习题3一、选择题能正确表示a和b同时为正或同时为负的逻辑表达式是 DA) (a=0 | b=0) & (a0 | b=0 & b=0) & (a0 & b0 & a+b0 以下条件表达式中能完全等价于条件表达

15、式x的是( B )。A) (x=0) B) (x!=0)C) (x=1) D) (x!=1) 设ch是char型变量,值为A,则表达式ch=(ch=A & ch=Z)?ch+32:ch的值是: BA) Z B) aC) z D) A 设a,b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中,值为0的表达式是 DA) a&b B) a=bC) a|b+c&b-c D) !(ab)&(n=cd) 后n的值为 B A) 1 B) 2C) 3 D) 0 设x 、y 、z 、t均为int型变量,则执行以下语句后,t的值为 Cx=y=z=1;t=+x | +y & +z;A) 不定值 B)

16、 4C) 1 D) 0 已知 int x=10,y=20,z=30,则执行 if (xy) z=x;x=y;y=z;语句后,x、y、z 的值是( B )。A) x=10,y=20,z=30 B) x=20,y=30,z=30C) x=20,y=30,z=10 D) x=20,y=30,z=20 设a为整型变量,不能正确表达数学关系10a15的C语言表达式是: AA) 10a10&a15 D) !(a=15) 语句:printf(%d,(a=2) & (b=-2);的输出结果是 DA)无输出 B)结果不确定C)-1 D)1 执行下列程序片段时输出结果是。 Cint x=13,y=5;printf

17、(“%d”,x%=(y/=2);A)3 B)2 C)1 D)0下列程序的输出结果是。 Bmain ( ) int x=023;printf(“%d”,-x);A)17 B)18 C)23 D)24已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的输入方式是。 Dint a1,a2; char c1,c2;scanf(“%d%d”,&a1,&a2);scanf(“%c%c”,&c1,&c2);A)1020AB B)10 20ABC)10 20 AB D)10 20AB执行下列程序片段时输出结果是。 Bint x=5,y;y=2+(x

18、+=x+,x+8,+x);printf(“%d”,y);A)13 B)14 C)15 D)16有输入语句:scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);为使变量 a的值为1,b的值为3,c的值为2,则正确的数据输入方式是 。 DA)132 B)1,3,2C)a=1 b=3 c=2 D)a=1,b=3,c=2二、读程序或程序段,写出结果1. char c1=a,c2=c; printf(“%d,%c”,c2-c1,c2-a+C); 结果:2,E2 #include “stdio.h” main() char ch1,ch2; ch1=A+5-3 ; ch2=A+6-3; pr

19、intf(“%d,%c”,ch1,ch2); 结果:-87,D3. #include “stdio.h” main() int x;float y; scanf(“%3d%f”,&x,&y); printf(“x=%d,y=%f”,x,y); 当执行时从第一列输入数据1234空格678回车, 则x和y的值分别是多少? 结果:x=123,y=4.0000004. main ( ) int a=12345;float b=-198.345, c=6.5;printf(“a=%4d,b=%-10.2e,c=%6.2fn”,a,b,c);结果:a=12345,b=-1.98e+002,c= 6.505

20、. main ( ) int x=-2345;float y=-12.3;printf(“%6d,%06.2f”,x,y);三、填空题1. C语言的程序是由一个或者多个文件组成的,每个文件又是由一个或多个 函数 组成的。2.C语句可以分为 表达式语句, 函数调用语句,复合语句,空语句和控制语句等5种类型。3.C控制语句有 3 种。4.一个表达式要构成一个C语句,必须 加分号 。5.复合语句是用一对 大括号 界定的语句块。6.printf函数和scanf函数的格式说明都使用 # 字符开始。7.scanf处理输入数据时,遇到下列情况时该数据认为结束:(1)遇空格、“回车”、“跳格”键。(2) 遇宽

21、度结束 ,(3) 遇非法输入 。8.已有int i,j; float x;为将-10赋给i,12赋给j,410.34赋给x;则对应以下scanf函数调用语句的数据输入形式是 。9.C语言本身不提供输入输出语句,其输入输出操作是由 函数 来实现的。10.一般地,调用标准字符或格式输入输出库函数时,文件开头应有以下预编译命令: #include 。四、程序设计编写一个程序,从键盘接受3个整数,作为三角形的三边,求出三角形的面积答案:#include #include main() int a,b,c; double p,S; printf(请输入三边长度(如3,4,5): ); scanf(%d,

22、%d,%d,&a,&b,&c); if(a+b=c|b+c=a|a+c=b) printf(您所输入的三边不构成三角形!); else p=(a+b+c)/2; S=sqrt(p*(p-a)*(p-b)*(p-c); printf(此三角形面积为:%f,S); 编写一个程序,输入华氏温度,输出相应的摄氏温度。转换公式是:c=(f-32)/1.8 ,c表示摄氏温度,f表示华氏温度。答案:#includevoid main()double c,f; printf(请输入一个华氏温度:); scanf(%lf,&f); c=(f-32.0)/1.8; printf(摄氏温度为:%5.2fn,c);输

23、入秒数,将它转换,用小时、分钟、秒来表示。例如输入7278秒,则输出:2小时1分18秒。答案:#include main()int s,f,m; m=7278; s=m/3600; f=m%3600/60; m=m%3600%60;printf(%d:%d:%d,s,f,m);习题4选择题: D B A A A D A C C B D B D D A2、读程序写结果 运行结果: 6 运行结果: s=2,t=3 运行结果: 4 第一次输入:x=0; y=2; z=3; 运行结果: *#第二次输入:x=1; y=2; z=1; 运行结果: $*3、编写程序 编程实现:输入2个一位的正整数,如果同是

24、奇数,输出2个数的平方值;如果同是偶数,输出2个数的立方值;否则,输出原数。 程序: #include main( )int a, b; printf(“input a b:”); scanf(“%d %d”, &a, &b); if(a%2=1 & b%2=1) printf(“n %d, %d”, a*a, b*b);else if(a%2=0 & b%2=0) printf(“n %d, %d”, a*a*a, b*b*b); else printf(“n %d, %d”, a, b); 编程实现:输入1个不多于四位的正整数,求出它是几位数;分别打印出每一位数字;按逆序打印出该数,例如原

25、数是321输出123 程序: #includemain() int n,n1,n2,n3,m; printf(“input nnn:”); scanf(“%d”, &n);if(n99) m=3; n1=n%10; n2=n%100/10; n3=n/100; printf(“n %d, %d, %d, %d ”, m, n1, n2, n3); printf(“n %d ”, n1*100+n2*10+n3); else if(n9) m=2; n1=n%10; n2=n/10; printf(“n %d, %d, %d ”, m, n1, n2);printf(“n %d ”, n1*10

26、+n2); else m=1; n1=n; printf(“n %d, %d ”, m, n1); printf(“n %d ”, n1); 有一分段函数: x (x1) y = 2x-1 (1x10) 3x-11 (x10) 请编写一程序,输入一个x,打印输出y值。 程序: #includemain() float x,y; printf(“input x:”); scanf(“%f”, &x); if(x=10) y=3*x-11;else if(x=1 & x10) y=2*x-1; else y=x;printf(“n %f”, y);习题5选择题: C B B C C B B B A

27、 C C C A D C2、读程序写结果: 运行结果: *#*# 运行结果: x=11111 x=1112 x=113 x=14 x=5 运行结果: 0111223、编程 找出100200之间的不能被3整除的数 程序: #includemain( ) int i; for(i=101; i200; i+) if(i%3!=0) printf(“ %d n”, i); 已知四位数a2b3能被23整除,编程求出此数 程序: #includemain( ) int a,b; for(a=1; a=9; a+) for(b=0; b=9; b+) if(a*1000+200+b*10+3)%23=0)

28、 printf(“%dn ”, a*1000+200+b*10+3); 将输入的数字字串(回车结束)转换为对应的整数 程序: #include#includemain( ) char c=getchar( ); int n; long int s=0; while(c!=n) if(isdigit(c)n=c-0; s=s*10+n; c=getchar( ); printf(“s=%d ”, s); 求100以内最小的自然数n,使1*1+2*2+3*3+n*n5500 程序1: #includemain( )( int n,s=0; for(n=1; s5500; n+) s=s+n*n;

29、printf(“%dn ”, n); 程序2: #includemain( )( int n,s=0; for(n=1; n5500) break; printf(“%dn ”, n); 求1/1!+1/2!+.+1/10! (结果保留10位小数) 程序: #includemain( ) int i, n=1; double s=0.0; for(i=1; i=10; i+) n=n*i; s=s+1.0/n; printf(“s=%16.10lf ”, s); 求1000以内的完数。完数就是其真因子的和等于其本身的数。 程序: #includemain( )int a, i, s; for(

30、 a=1; a1000; a+ ) s=0; for( i=1; ia; i+) if(a%i=0) s=s+i; if(a=s) printf(“%dn”, a); 输出九九乘法表(正三角形式) 程序: #includemain( ) int i, j; for(i=1; i=9; i+) for(j=1; j=i; j+) printf(“ %2d*%2d=%2d ”, i, j, i*j); printf(“n ”); 输出如下图形。 # # # # # # # 程序: #includemain( ) int i,j; for(i=1;i=4;i+) printf(“n”); for(j

31、=1;j=4-i;j+) putchar( ); for(j=1;j=1;i-) printf(“n”); for(j=1;j=4-i;j+) putchar( ); for(j=1;j=i*2-1;j+) putchar(#); 输入2个正整数,求两数的最大公约数和最小公倍数。 程序: #includemain( ) int a , b , c ,t; printf ( Input two integers (0) : ) ; scanf ( %d%d , &a , &b ) ; if(a 0 ) c = a % b ; a = b ; b = c ; printf ( n gys: %d

32、, a ) ; printf ( n gbs: %d , t/a ) ; 习题6选择题:(1)B (2)()B()B()C()D()A ()C ()B (10)D (1)D (12)B读程序:(1)2322 (2)a11:8程序填空:(1) a8=data; k=0 temp=ak; k=8(2) str0:str1 str2 t(1)#include main( )float xscj6=90,85,92,77,80,62,ave,sum=0;int i=0;while (i6) sum+=xscji; i+; ave=sum/6;printf(平均分: %0.1fn,ave); print

33、f(高于平均分有:); for(i=0;iave)printf(%0.1f ,xscji); (2)#include #define N 10main()int i,j,t,aN,k; for(i=0;iN;i+) scanf(%d,&ai); for(i=0;iN;i+) for(j=i+1;jaj)k=j; if(k!=i) t=ai;ai=ak;ak=t;printf(n);for(i=0;iN;i+)printf(%6d,ai); ()#include main( )int j,k,a34; printf(nInput array a:); for (j=0;j3;j+) for (k

34、=0;k4;k+) scanf(%d, &ajk); printf(n Output array a:n); for (j=0;j3;j+) for (k=0;k4;k+) printf(%4d,ajk); printf(n); (4)main( )int a34,max,min,i,j,m1,n1,m2,n2;for (i=0;i3;i+) for (j=0;j4;j+) scanf(%d, &aij); min=a00; max=a00;m1=n1=m2=n2=0;for (i=0;i3;i+) for (j=0;j4;j+)if (aijmax) max=aij; m2=i;n2=j;

35、printf(min=a%d%d:%5dn,m1,n1,am1n1);printf(max=a%d%d:%5dn,m2,n2,am2n2);printf(n); ()#includevoid main( )int i,j; int d44= 1,2,3,4,5,6,7,8,4,3,2,1,1,2,3,4;for(i=0;i4;i+)for(j=0;j4;j+)if(dijdji) dij=dji;for(i=0;i4;i+) printf(n);for(j=0;j=i) printf(%6d,dij); else printf(%6c, );(6)#include #define M 15#d

36、efine N 40main() int aM,bM,cN,i,j,k; gets(a); gets(b); printf(a=%s,a); printf(b=%s,b);printf(n); for (i=0;ai!=0;i+) ci=ai; printf(c=%s, c); printf(%d,i); printf(n); for (j=i;bj-i!=0;j+) cj=bj-i; printf(c=%s,c); printf(n); for (k=0;kj;k+) printf(%c,ck); printf(n);(7)#include#includestring.hmain()int

37、i,count=0;char str40;printf(inputs str1:);gets(str);for(i=0;stri!=0;i+)if( stri=a&stri+1=b)count+;i+;printf(%d,count);(8)#include#includestring.hmain()int i,max;char str1020,m20;printf(inputs str:n );for(i=0;i10;i+)gets(stri);strcpy(m,str0);for(i=1;i10;i+)if(strlen(m)strlen(stri)strcpy(m,stri);max=i

38、;printf(max=%s,strmax);习题7选择题:(1)C (2)B()D()A()B()C()C ()B ()D (10)C (1)D (12)B(13)D (14)C(15)D(16)C(17)C(18)D(19)B (20)A 编程题:(1)#include #include int Is_prime(int i) int j = 0; for(j = 2; j i; j+) if(0 = (i%j) return 0; return 1; main( ) int i; printf(Please input a number:); scanf(%d,& i); if(1 =

39、Is_prime(i) printf(%d is a primen, i); else printf(%d is not a primen, i); (2)#include void shuixian(int s)int a,b,c,sum;for (sum=101;sum=s;sum+)a=sum/100; b=sum/10%10; c=sum%10;if(sum=a*a*a+b*b*b+c*c*c)printf(%4dn,sum); void main()int n;scanf(%d,&n);shuixian(n);()#include double pi( )double s=0.0,t

40、=1.0;int n;for(n=1;t1e-4;n+)s=s+t;t=n*t/(2*n+1);return (2*s);main( )printf(npi=%lf,pi( );(4)#include#includetj(char s ,int t )int i; for (i=0; si!=0; i+) if (si=0&si=A&si=a&si=z) t0+; else t2+;void main( ) char str80; int dig3=0; gets(str);puts(str);tj(str,dig); printf(字母:%d个n,dig0); printf(数字:%dn其它

41、:%dn,dig1,dig2);()cfb( )int i,j;for(i=1;i=9;i+)for(j=1;jn*/ int min,max; /*min表示最小公倍数,max表示最大公约数 */ scanf(%d,%d,&m,&n); max=m*n; while(r=mn) m=n; n=r; min=r; max=max/r; (7)#include void convert(int n) int i; if(i=n/10)!=0) convert(i); putchar(n%10+0); main() int number; printf(nInput an interger:);

42、scanf(%d,&number); printf(Output:); if(number0) putchar(-); number=-number; convert(number); (8)#include#includestring.hfact(int n) int f=0; if(n0) printf(n0,error!); else if (n=0 | n=1) f=1; else f=fact(n-1)*n; return (f);main( ) int m,n, y; printf(nInput m:); scanf(%d,&m);printf(nInput n:); scanf(

43、%d,&n); y=fact(m+n)+fact(m); printf(F=%dn,y);(9)#include#define N 10void paixu(int a ) int i,j,temp; for(i=0;iN;i+) for(j=0;jaj+1)/冒泡排序法 temp=aj+1; aj+1=aj; aj=temp; void main() int i,aN;printf(n输入10个数:n); for(i=0;iN;i+) scanf(%d,&ai); paixu(a);printf(n排序后的成绩为:n); for(i=0;iN;i+) printf(%d ,ai); prin

44、tf(n);习题81、选择题:BDDCABDCBBBDDAAD2、1.s=30t-10m=2002.18,12,396.将ct字串赋给s字串统计s字串中字符的个数7.a=4338424*a=0p=4338444,*p=4338424,*p=01112223333440001111221238.POiNTERSTEW习题91. 用结构体数组建立包含5个人的通讯录(包括姓名、地址和电话号码)。能根据键盘输入的姓名来显示该姓名及对应的电话号码。#include #include #define N 5struct personchar name10, address20,

45、telephone20;main()struct person p1, pN=刘一,武汉 张而,武汉 赵散,武汉 李思,武汉 朝地,武汉char name10;int i, j;printf(请输入人名:);scanf(%s, name);for (i=0;i=N) printf(该记录不存在!n);2. 用结构体数组实现:输入10个学生的考试成绩(包括姓名、数学成绩、计算机成绩、英语成绩和总分),总分由程序自动计算。编写fsort()函数实现按总分从高到

46、低的排序,并输出排序后的学生成绩信息。#include #define N 10typedef struct _scorechar name10;int math, computer, english;int total; SCORE;void fsort(SCORE s )int i, j, k;SCORE temp;for (i=0; iN; i+) /选择法排序k=i;for (j=i+1; jN; j+)if (sk.totalsj.total) k=j;if (k!=i) temp=sk; sk=si; si=temp; void print(SCORE p)int i;printf

47、(%14s %5d %5d %5d %7dn,姓名,数学,英语,计算机,总分);for (i=0;iN;i+) printf(%14s %5d %5d %5d %7dn,,pi.math,pi.english,puter,pi.total);main()SCORE aN;int i;printf(请输入10个学生的信息(姓名、数学、英语、计算机):);for (i=0; inum, p-name, &p-score); /建立新结点,并初始化if(p-num = 0) break; /学号为0时,终止循环elsep2 = head; if(head = NULL) head =

48、p; head-next = NULL; /原表为空时插入为头结点else while(p-num p2-num)&(p2-next != NULL) p1 = p2; p2 = p2-next; /p1,p2各后移一个结点if(p-num num) /在p1与p2之间插入新结点if(head = p2) head = p;else p1-next = p;p-next = p2;else p2-next = p; p-next = NULL; /新结点插入为尾结点n+; /表长加1while(1);free(p);return head; /返回链表头指针4. 在第3题的基础上,编写一个函数

49、,查找特定学生的信息,并输出查找结果。函数如下:void search_stu(struct stu_node *head, int num) /查找学号为num的记录信息struct stu_node *p;p = head; if(head = NULL)printf(空表,无记录!n);return;doif(num = p-num)printf(n学号 姓名 成绩n);printf(%4d %s %dn, p-num, p-name, p-score); break;elsep = p-next; while(p != NULL);if(p = NULL) printf(该表中无此记录

50、!n);5. 有一个单向链表old(结点信息为姓名、基本工资),编写一个函数将old复制到一个新链表new上。函数如下:struct empl_node char name20;float jbgz;struct empl_node * next;int new_n=0; /new表的表长void copy_emp(struct empl_node *old, struct empl_node *new) struct empl_node *last, *p, *s;p = old; new = last = NULL; /last是new表的表尾指针if(old = NULL)printf(

51、空表,无记录!n);return;else while(p != NULL)s = (struct empl_node *)malloc(SIZE);strcpy(s-name, p-name);s-jbgz = p-jbgz;s-next = NULL;if(new = NULL) new = s;else last-next = s;last = s; new_n+;p = p-next;6. 有两个单向链表list1和list2(结点信息均为姓名、基本工资),编写一个函数将链表list2拼接到链表list1的后面,函数返回拼接后的新链表。函数如下:struct empl_node cha

52、r name20;float jbgz;struct empl_node * next;struct empl_node link_emp(struct empl_node *list1, struct empl_node *list2)struct empl_node *p, *s;p = list1; s = list2;while(p-next != NULL) p = p-next;while(s != NULL)list2 = s-next;p-next = s;p = s;p-next = NULL;s = list2;return list1;习题101. 什么是共用体数据类型?

53、试比较共用体与结构体。 答:共用体数据类型是C语言的一种用户自定义构造类型,它可以有多个不同数据类型的成员,但每次只使用它的一个成员,这种类型定义的变量占用的空间取其成员中最长的一个,这种数据对象在程序执行的不同时间能存储不同类型的值。共用体与结构体类型的比较:共用体类型定义的形式跟结构体类型的定义形式相同,只是其类型关键字不同,前者是union,后者是struct;共用体类型和结构体相似,也可以有多个不同数据类型的成员,但共用体每次只使用它的一个成员,而结构体无此限制;共用体类型定义的变量占用的空间取其成员中最长的一个,而结构体类型定义的变量占用的空间是其所有成员长度之和。2. 什么是枚举数

54、据类型?请举例说明。答:枚举数据类型是C语言的一种用户自定义基本类型,为提高程序描述问题的直观性,在枚举类型的定义中列举出所有可能的取值,被说明为该枚举类型的变量取值不能超过定义的范围。例如:enum daysun, mon, tue, wed, thu, fri, sat; 3. 什么是类型定义?请举例说明。答:类型定义是对现有数据类型的标识符的重新定义,即定义一个现有类型标识符的“别名”,这种方法可改善程序的可读性。例如:typedef int ARRAY10; ARRAY a, b;4. 分析下列程序的运行结果。(1)#includemain() union char ch2; int

55、d; s; s.d = 0 x4321; printf(%x,%xn, s.ch0, s.ch1); 程序运行结果:21,43(2)#includefun(int x)int i;for (i=15; i=0; i-)printf(%d, (xi) & 0 x0001);main()int a = 65;fun(a);程序运行结果:0000000001000001习题111. C语言中,文本文件和二进制文件有什么区别? 答:在C语言中,二进制文件是以数据在内存中的二进制存储形式(内码)原样保存的文件;而文本文件则是以字符的ASCII码值进行存储与编码的文件,文件的内容就是字符。文本文件和二进制

56、文件都可以作为用户的数据文件,当写数据到磁盘时,文本文件需要把内存中的二进制形式转换成ASCII码的形式,要耗费转换时间,且占用的存储空间大,但优点是文本文件可读的并易于修改;而二进制文件所占的存储空间小,输出时无需转换,但一个字节并不对应一个字符,所以是不可读的,也很难修改。2. 什么是文件型指针?通过文件指针访问文件有什么好处?答:指向文件结构体类型变量的指针就是FILE文件类型指针。C程序在处理文件时,利用文件指针来访问文件缓冲区,实现对文件的操作和检测,方便对数据存取。3. 对文件的打开与关闭的含义是什么?为什么要打开和关闭文件? 答:打开文件,是建立文件的各种相关信息,并使文件类型指

57、针指向该文件,以便进行其它操作。而关闭文件操作可强制把缓冲区中的数据写入磁盘文件,保证文件的完整性,同时还将释放文件缓冲区单元和FILE结构,使文件类型指针与具体文件脱钩。要对一个文件进行操作,必须先将其打开,读写完毕后还要将其关闭,以防止不正常的操作。4. 编写程序,将一个二进制文件file1.dat的内容复制到file2.dat中。 #include main() FILE *fp1,*fp2;char c;if(fp1=fopen(d:file1.dat,rb)=NULL) /file1.dat已存在 printf(cannot open file! n); exit(0);if(fp2

58、=fopen(d:file2.dat,wb)=NULL) printf(cannot open file! n); exit(0); while(!feof(fp1) c=fgetc(fp1); fputc(c,fp2);fclose(fp1);fclose(fp2); 5. 编写程序,统计一个文本文件中字母字符、数字字符及其他字符的个数。 #include main() FILE *fp; char t; int letter=0,number=0,other=0; if(fp=fopen(d:myfile.txt,r)=NULL) printf(cannot open file! n);

59、exit(0); do t=fgetc(fp); if(ta& tA& t0& t9) number+; else other+; while(t!=EOF); fclose(fp); printf(letter: %d, number: %d, other: %dn, letter, number, other); 6. 编写程序,从键盘输入一串字符(用“”结束输入),存放到一个文本文件中,并统计此串字符的个数并写入文件最后。#includemain()FILE *fp;char ch, fname32;int count=0;if (fp=fopen(file3.txt,w+)=NULL) printf(Cant open file! n); exit(0); printf(Enter data:n);while (ch=getchar()!=#)fputc(ch,fp);count+;fprintf(fp, n%dn,count); /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论