《C语言程序设计实践教程》答案-完整版(★)

时间:2019-05-15 13:46:21下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《《C语言程序设计实践教程》答案-完整版》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《《C语言程序设计实践教程》答案-完整版》。

第一篇:《C语言程序设计实践教程》答案-完整版

4.2练习题

一、选择题

1. D

2. B

3. A

4. B和D

5. C

6. A

7. B

二、填空题

1. //或/**/

2. 主或main

3. 函数首部和函数体

4. 编译和连接

5. 公号

5.2练习题

一、选择题

1. A

2. D

3. B

4. B

5. C

6. C

7. D

8. A

9. B

10.B

11.D

12.B

13.A或B

14.C

15.B

17.D

18.D

19.C

20.D

21.B

22.A

23.D

24.C

25.C

26.B

27.C

28.D

29.A

30.B

二、填空题

1. 102,10

2. #define宏名 字符串

3. 1

4. n=1

5.-4

6. a=1,b= ,c=2

7. c=A

8. n1=%dnn2=%d

9. a+b>c&&a+c>b&&b+c>a

10.ch>=’a’&&ch<=’z’|| ch>=’A’&&ch<=’Z’ 11.7

12.0

13.11110000

14.8,4

6.2练习题

一、选择题

1. A

2. C

3. D

4. C

5. A

7. A

8. D

9. B

10.C

11.A

12.A

13.C

14.B

15.正确答案为:12345678

二、填空题

1. 10

2. y=1x%i==0

3. 屏幕中间输出一个由星号组成的菱形

4. 1

5. 13

6.(cx=getchar())!=-1front=cx;

7. m%n

8. 4

9. *ppx=&xpy=&y

三、读程序,写结果

1.-1

2. 3,1,-1,3. a=16,y=60

4. x=12,y=4

5. 59

7.2练习题

一、选择题

1. B

2. C

3. C

4. A

5. D

6. C

8. D

9. C

10.D

11.D

12.D

13.A

14.B

15.C

16.B

17.B

18.A

19.A

20.D

21.B

22.D

23.C

24.D

25.D

26.C

二、填空题

1. ‘a’0

2. a[k]a[k]a[k]

3. 06

4. A B C D E

A

5. 1,6

6. k=p;

7. i

8. 18

9. 4,some string * test

10.you&me

三、读程序,写结果

1. 54820

2. 1024156

3. love china!Hwl

4. 666655

5. Front

一、选择题

1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.A A B B B A D C A A A B B A B B C

二、填空题

1.2.3.4.5.6.7.8.12 Itis fun(n-1)*nfun(k)s[i]-t[i] n%mi-1x[d] x=nx%10x m=f(a,4)+f(b,4)-f(a+b,3)a=1,b=1

三、读程序,写结果

1.s=7

2.s=37

3.bij1

2一、选择题

1.B

2.C

3.B

4.D

5.B

6.A

7.B

8.D

9.D

10.B

11.D

12.A

13.B

14.C

15.C

16.C

17.A

18.D

19.B

20.D

二、填空题

1.b->day(*b).day

2.DDBBCC

3.zhang 170.000000

wang 150.000000

4.99

5.max=imin=istud[max].name,stud[max].score

6.&r1feof(fp)break

7.BBB AAA 123

8.rewind

三、读程序,写结果

1.2002,shangxian

2.32 stud[min].name,stud[min].score

第二篇:C语言程序设计教程课后习题答案

C语言程序设计教程课后习题答案

第一章 C语言程序设计概述 -习题答案 算法的描述有哪些基本方法?

1、自然语言

2、专用工具C语言程序的基本结构是怎样的?举一个例子说明。

1、C语言程序由函数构成;

2、“/*”与“*/”之间的内容构成C语言程序的注释部分;

3、用预处理命令#include、#define可以包含有关文件或预定义信息;

4、大小写字母在C语言中是有区别的;

5、除main()函数和标准库函数外,用户也可以自己编写函数,应用程序一般由多个函数组成,这些函数指定实际所需要做的工作。C语言有什么特点?

1、具有结构语言的特点,程序之间很容易实现段的共享;

2、主要结构成分为函数,函数可以在程序中被定义完成独立的任务,独立地编译代码,以实现程序的模块化;

3、运算符丰富,包含的范围很广;

4、数据类型丰富;

5、允许直接访问物理地址,即可直接对硬件进行损伤,实现汇编语言的大部分功能;

6、限制不太严格,程序设计自由度大,这样使C语言能够减少对程序员的束缚;

7、生成的目标代码质量,程序执行效率高,同时C语言编写的程序的可移植性好。★指出合法与不合法的标识符命名。

AB12--√ leed_3--a*b2--× 8stu--× D.K.Jon--× EF3_3--√ PAS--√ if--× XYZ43K2--√ AVE#XY--× _762--√ #_DT5--× C.D--×说明下列Turbo C热键的功能。

F2:源文件存盘 F10:调用主菜单 F4:程序运行到光标所在行(用于调试程序)Ctrl+F9:编译并链接成可执行文件 Alt+F5:将窗口切换到 DOS 下,查看程序运行结果。说明下列Turbo C方式下输入并运行下列程序,记录下运行结果。

①main()

{printf(“********************n”);printf(“ welcome you n”);printf(“ very good n);printf(”********************n“);} ②main()

{ int a,b,c,t;printf(”please input three numbers;“);scanf(”%d,%d,%d“,&a,&b,&c);/*教材S是错误的*/ t=max(max(a,b),c);printf(”max number is:%dn“,t);} int max(int x, int y){ int z;if(x>y)z=x;else z=y;return(z);} 答

运行结果:

******************** welcome you very good ******************** 运行结果:

please input three numbers;3,1,4 /*左侧下划线内容为键盘输入*/ max number is:4 7 一个C程序是由若干个函数构成的,其中有且只能有一个___函数。

main()8 在Turbo C环境下进行程序调试时,可以使用Run下拉菜单的___命令或按___键转到用户屏幕查看程序运行结果。

1、User screen

2、Alt+F5 9 ★C语言对标识符与关键字有些什么规定?

1、标识符用来表示函数、类型及变量的名称,它是由字母、下划线和数字组成,但必须用字母或下划线开头。

2、关键字是一种语言中规定具有特定含义的标识符,其不能作为变量或函数名来使用,用户只能根据系统的规定使用它们。C源程序输入后是如何进行保存的?

是以C为扩展名保存的纯文本文件。

第二章 C语言程序的基本数据类型与表达式 -习题答案 ★指出下列常数中哪些是符合C语法规定的。

''--× '101'--× ”“--× e3--× 019--√ 0x1e--√ ”abn“--√ 1.e5--×(2+3)e(4-2)--× 5.2e2.5--×请找出下列程序中的错误,改正后写出程序运行结果。

①void main(){int x,y=z=5,aver;x=7 AVER=(x+y+z)/3 printf(”AVER=%dn“,aver);} ②void main()

{ char c1='a';c2='b';c3='c';int a=3.5,b='A' printf(”a=%db='“endn”,a,b);printf(“a%cb%cbc%ctabcn”,c1,c2,c3);} 答

main(){int x,y=5,z=5,aver;x=7;aver=(x+y+z)/3;printf(“AVER=%dn”,aver);}

运行结果:AVER=5 ②main()

{ char c1='a', c2='b', c3='c';int a=3,b='A';printf(“a=%d,b='%c'”end“n”,a,b);printf(“a%cb%cbc%ctabcn”,c1,c2,c3);}

运行结果:a=3,b='A'“end”

aabcc abc 3 写出下列赋值的结果,表格中写了数值的是要将它赋给其他类型的变量,将所有的空格填上赋值后的数据(实数保留到小数点后两位)。int 99

-1 char 'h'

unsigned int

float

55.78

long int

答 int 99 104 66 55 68-1 char 'c' 'h' 'B' '7' 'D'

unsigned int 99 104 66 55 68 65535

float 99.00 104.00 66.00 55.78 68.00-1.00

long int 99 104 66 55 68-1

★写出程序运行结果。

①void main(){int i,j;i=8,j=10;printf(“%d,%d,%d,%dn”,i,j,++i,j++);} ②main()

{ int a=1,b=2,c=30;;printf(“%d,%d,%d,%dn”,a=b=c,a=b==c,a==(b=c),a==(b==c));} 注意:a=b=c,a=b==c之间应为逗号,教材有误 答

运行结果: 9,11,9,10 运行结果: 30,1,0,0

③void main()

{int a=10,b=20,c=30,d;d=++a<=10||b-->=20||c++;printf(“%d,%d,%d,%dn”,a,b,c,d);}

运行结果: 11,19,30,1

★写出下面表达式的值(设a=10,b=4,c=5,d=1,x=2.5,y=3.5)。⑴a%=(b%=3)

⑵n++,a+=a-=a*=a ⑶(float)(a+c)/2+(int)x%(int)y ⑷a*=b+c ⑸++a-c+b++ ⑹++a-c+++b ⑺a

⑼a+b,18+(b=4)*3,(a/b,a%b)

⑽x+a%3*(int)(x+y)%2/4+sizeof(int)⑾a

⑴0 ⑵0 ⑶9.500000 ⑷90 ⑸10 ⑹10 ⑺'A' ⑻2 ⑼4.5 ⑽1 ⑾0 ⑿20 ⒀0 下列每组表达式中,被执行后结果完全等价的是哪些(设a、b、m是已被赋值的整型变量)?

①m=(a=4,4*5)与m=a=4,4*5 ②(float)(a/b)与(float)a/b ③(int)a+b与(int)(a+b)④m%=2+a*3与m=m%2+a*3 ⑤m=1+(a=2)+(b=3)与a=2,b=3,m=1+a+b 答

①前面是赋值表达式,而后面的是一个逗号表达式,所以一定不同;

②前面的表达式中a/b结果为一整数,结果已经取整,精度可能受到影响,之后强制float后才为浮点型,后面的是先将a转换为float后再与b相除,其值保证了精度,所以不同。

③因为a、b均为整数,其前后两个表达式的计算结果是一致的。

④前一表达式是一算术表达式,而后者为一赋值表达式,此为一点不同;另外,前一表达式的m只被赋过一次值,后一表达式中的m曾两次被赋值,第一次赋值时与第一表达式中的值一致,第二次赋值后即不再相同。⑤前后表达式的计算结果应该是一致的:a=2, b=3, m=6 7 条件表达式x>0?x:-x的功能是什么?

如果x的值是一正数,则表达式的值为x值;如果x的值是一非正数,则表达式的值为-x。其实该表达式的值即为x的绝对值,C语言中提供了一个函数fabs(x)即可完成此功能,该函数包含在math.h头文件中。用一个条件表达式描述从a、b、c中找出最大都赋给max.答

max=a>(b>c?b:c)?a:(b>c?b:c);9 ★若x为int型变量,则执行以下语句后x的值为()。x=6;x+=x-=x*x;A.36 B.-60 C.60 D.-24 答 B.10 ★若有以下类型说明语句: char w;int x;float y;double z;则表达式w*x+z-y的结果为()类型。A.float B.char C.int D.double 答 D.第三章 顺序结构程序设计 -习题答案 变量k为float类型,调用函数scanf(“%d”,&k),不能使变量k得到正确数值的原因是___。

格式修饰符与变量类型不一致。因为%d输入的数据类型应该为十进制整数,而&k为占用4个字节的float类型变量的地址。★a=1234,b=12,c=34,则执行“printf(“|%3d%3d%-3d|n”,a,b,c);”后的输出是___。

|1234 1234 |

分析如下:

①%3d为右对齐输出变量,且指定输出变量的值宽度为3个字符位,如果变量实际位数小于3,则左端补空格,如果变量实际位数大于3,则按实际长度输出,不受限制。

②%-3d为左对齐输出变量,在输出变量时,如是变量实际位数小于3,则在右端补空格,否则按实际输出。★设有“int a=255,b=8;”,则“printf(“%x,%on”,a,b);”输出是___。答 ff,10 ①如果“printf(“%X,%on”,a,b);”则输出为FF,10。说明在输出十六进制字母时,其大小写受格式修饰符的限制,如果是“%x”则输出小写,如果是“%X”则输出大写。

②如果希望在输出十六进制时输出前导符0x或0X,则以上输出语句应改“printf(“%#x,%on”,a,b);”为或“printf(“%#X,%on”,a,b);”。本条解释不必须掌握。★以下程序输出的结果是___。main(){ int a1=1,a2=0,a3=2;printf(“%d,%d,%dn”,a1,a1+a2+a3,a3-a1);} 答 1,3,1 5 printf函数中用到格式符%5s,其中5表示输出字符占用5列。如果字符串长度大于5,则按___输出;如果字符串长度小于5,则按___输出。

①实际 ②左端补空格 6 ★已定义变量如下: int a1,a2;char c1,c2;若要求输入a1、a2、c1和c2的值,正确的输入函数调用语句是___。

scanf(“%d,%d,%c,%c”,&a1,&a2,&c1,&c2);7 输入两个整型变量a、b的值,输出下列算式以及运算结果___。a+b、a-b、a*b、a/b、(float)a/b、a%b 每个算式占一行。如a=10,b=5,a+b输出为:10+5=15 答

设int a=10,b=5;以下为输出语句及结果: ①printf(“%d+%d=%dn”,a,b,a+b);10+5=15 ②printf(“%d-%d=%dn”,a,b,a-b);10-5=5 ③printf(“%d*%d=%dn”,a,b,a*b);10*5=50 ④printf(“%d/%d=%dn”,a,b,a/b);10/5=2 ⑤printf(“%(float)d/%d=%fn”,a,b,(float)a/b);(float)10/5=2.000000 ⑥printf(“%d%%%d=%dn”,a,b,a%b);10%5=0 8 ★输入一个非负数,计算以这个数为半径的圆周长和面积。答

#define PI 3.1415926 main(){ float r,l,area;printf(“Input a positive:”);scanf(“%f”,&r);l=2*PI*r;area=PI*r*r;printf(“l=%ftarea=%fn”,l,area);} 9 输入任意一个3位数,将其各位数字反序输出(例如输入123,输出321)。

main(){ int x,y;printf(“Input a number(100-999):”);scanf(“%d”,&x);y=100*(x%10)+10*(x/10%10)+x/100;/*注意分析此处算法*/

第三篇:《C语言程序设计教程》课后题答案

《C语言程序设计教程》课后题答案

第一章

一选择题

1.A 2.B 3.C 4.D 5.B 6.C 二.填空题 1.程序 2.算法

3.main或主 4.编译 5.编译 6..obj 7.库函数

8.文本或ASCII码

三、编程题

1.参考代码如下: #include void main(){

printf(“金n木n水n火n土n”);} 2.参考代码如下: #include void main(){ int a,b;

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

printf(“%d+%d=%dn”,a,b,a+b);

printf(“%d-%d=%dn”,a,b,a-b);

printf(“%d*%d=%dn”,a,b,a*b);

printf(“%d/%d=%dn”,a,b,a/b);} 3.参考代码如下: #include void main(){

float a,b,h,s;

scanf(“%f%f%f”,&a,&b,&h);

s=(a+b)*h/2;

printf(“s=%fn”,s);}

第二章

一选择题 答案及分析: 1.B,略

2.A,-8在内存中是以补码(设两个字节)形式存储的 3.A,C语言有32个关键字(参见课本第18页),且C语言标识符是区分大小写字母的 4.A,略

5.D,八进制数据中不能出现数码8 6.B,字符常量应该用单引号括起来,答案D超出了ASCII取值范围(ASCII的取值范围为[0,255])

7.C,该字符串中转义字符有三个:、22和 n,普通字符有三个:a、,和0,所以字符串长度为6 8.C,略

9.D,C语言没有read函数和%D格式符号,且scanf函数第二个形参为地址列表

10.B,根据题意,scanf函数输入数据时分隔符号不应该是逗号,应该是空格或回车符,且输入数据时分一行或几行均可

11.A,scanf函数中不允许出现%8.4,%6.2和%8这样的格式符号

12.C,既要保证5位小数位,还得保证整数位不变,这样数据12345.67800用10列不能完全显示出来,按C语言规定,12345.67800原样输出

13.B,printf函数中格式符号%d,%o,%x表示对应的整型数据分别按十进制,八进制和十六进制输出

14.C,按C语言规定,scanf函数形参双引号中,如果包含非格式符号,在输入数据时要求原样输入 二.填空题 答案及分析:

1.int

float

double(略)

2.65,89,printf函数中如果格式符号是%d,则输出相应字符的ASCII十进制数值

3.a=98,b=765.000000,c=4321.000000,scanf函数中的格式符号%2d%3f%4f,表示将键盘输入的数据9876543210按2,3,4位分割,然后再分别赋给变量a,b,c 4.scanf(“%lf%lf%lf”,&a,&b,&c);double类型的变量对应的格式符号是%lf

三、编程题

1.参考代码如下: #include void main(){

int a=97;

printf(“%cn”,a);

printf(“%dn”,a);

printf(“%on”,a);

printf(“%xn”,a);} 程序分析:通过printf函数中不同的格式符号,即%c(字符),%d(十进制),%o(八进制),%x(十六进制)输出相应的值。2.参考代码如下: #include void main(){

int h,m,minute;

scanf(“%d:%d”,&h,&m);

minute=h*60+m;

printf(“minute=%dn”,minute);} 程序分析:输入形式为10:27,故scanf函数双引号中两个格式符号%d之间必须加入“:”。3.参考代码如下: #include void main(){

float r=6371000,s,v;

s=4*3.1415926*r*r;

v=3.1415926*4/3*r*r*r;

printf(“s=%fnv=%f”,s,v);} 程序分析:C语言中的π不代表3.1415926,可以用各种常量的形式体现出来。4.参考代码如下: #include void main(){

int m100,m50,m20,m10,m5,m1,m;

scanf(“%d”,&m);

m100=m/100;

m50=(m-m100*100)/50;

m20=(m-m100*100-m50*50)/20;

m10=(m-m100*100-m50*50-m20*20)/10;

m5=(m-m100*100-m50*50-m20*20-m10*10)/5;

m1=m-m100*100-m50*50-m20*20-m10*10-m5*5;

printf(“%d元发工资,人名币各票面的张数为:n”,m);

printf(“100元的张数:%dn”,m100);

printf(“50元的张数:%dn”,m50);

printf(“20元的张数:%dn”,m20);

printf(“10元的张数:%dn”,m10);

printf(“5元的张数:%dn”,m5);

printf(“1元的张数:%dn”,m1);} 程序分析:人民币的面值分别为100元,50元,20元,10元,5元和1元,工资4367元除以100后得到的商就为100元张数,余数再除以50,得到的商为50元的张数,余数再除20,„„,以此类推就会得出人民币各面值相应的张数。5.参考代码如下: #include void main(){

float r1,r2,r3,r;

scanf(“%f%f%f”,&r1,&r2,&r3);

r=r1*r2*r3/(r1*r2+r2*r3+r1*r3);

printf(“三个电阻并联后的总电阻为%fn”,r);} 程序分析:首先将计算并联电阻值的公式变换一下;再就是考虑要保留小数位,故变量类型设置为实型,注意格式符号为%f。6.参考代码如下: #include void main(){

int x,a,b,c,d,y;

scanf(“%d”,&x);

a=x%10;

b=x/10%10;

c=x/100%10;

d=x/1000;

y=a*1000+b*100+c*10+d;

printf(“%d逆置各位数后的值为%dn”,x,y);} 程序分析:1234除以10的余数就是4,商再除以10的余数就是3,1234除以100再除以10取余就是2,1234除以1000就是1。也可以用其他的表达式求出各位数值,例如输入数据1234中的4,可以用公式a=x-d*1000-c*100-b*10来计算。7.参考代码如下: #include void main(){

float F,C;

printf(“请输入华氏温度:”);

scanf(“%f”,&F);

C=5.0/9*(F-32);

printf(“华氏温度%f对应的摄氏温度为%fn”,F,C);} 程序分析:5/9的值为0,所以要写成5.0/9,5/9.0或5.0/9.0,还要注意变量类型为实型,且对应的格式符号为%f。8.参考代码如下: #include void main(){

char ch1,ch2,ch3;

printf(“请输入三个数字字符:”);

scanf(“%c%c%c”,&ch1,&ch2,&ch3);

printf(“将数字字符转换为数字%d,%d,%dn”,ch1-'0',ch2-48,ch3-'0');} 程序分析:通过键盘输入三个数字字符时要连续输入,不要加任何分隔符号,例如121等,另外,数字字符输出时遇到格式符号%d将输出相应数字字符的ASCII值,但任何一个数字字符的ASCII值减去字符0的ASCII值,再对应%d格式符号输出时,就是数字字符对应的数字,例如'2'-'0'=2。

9.不能得到指定的输出结果,参考代码如下: void main(){

int a, b, c,x, y;

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

x=a*b;

y=x*c;

printf(“a=%d,b=%d,c=%dn”,a,b,c);

printf(“x=%d,y=%dn”,x,y);}

程序分析:scanf(“%d,%d,%d”,a,b,c);scanf函数第二类形参是地址列表,所以语句改为scanf(“%d,%d,%d”,&a,&b,&c);而这个语句对应的键盘输入形式为2,3,4。为了满足题目要求,scanf语句改为scanf(“%d%d%d”,&a,&b,&c)。另外,printf函数双引号只能出现一对,且双引号中需要在相应的位置上添加a=等这样的字符串才能原样输出;还有整型变量对应格式符号是%d等。

第三章

一选择题

1.A 2.C 3.C 4.D 5.C 6.B 7.C 8.B 9.A 10.A 11.A 12.B 13.D 14.A 15.B 16.C 17.C 18.C 19.C 20.C 21.C 22.B 23.C 24.C 25.A 26.B 27.A 28.A 29.C 30.A 31.C 32.C 二.填空题 1.非零

零 2.passwarm 3.525252 4.fabs(x)>5 5.x%y==0 6.if((1<=x&&x<=10||200<=x&&x<=210)&&x%2==1)printf(“%d”,x);7.k=1 8.Right!1

Right!1 9.$$$ a=0 10.a=2,b=1 11.0

“%f%f”

a=b;13.“%c”,&ch

'A'<=ch&&ch<='Z'

ch 14.死循环 15.345 16.7 3-1 17.x>=0

x

j%3!=0 24.b=i+1 25.8 5 2 26.d=1.0

k++ k<=n

三、编程题

1.参考代码如下: #include void main(void){ float x,y;printf(“Please input the value of x:”);scanf(“%f”,&x);if(x>-5&&x<0)

y=x;else if(x==0)

y=x-1;else if(x>0&&x<10)

y=x+1;printf(“y=%f”,y);} 2.参考代码如下: #include void main(void){

float a,b,c;

printf(“请输入三角形三边的长度:n”);

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

if(a+b>c&&b+c>a&&a+c>b)

if(a==b&&a==c)

printf(“该三角形是等边三角形n”);

else if(a==b&&a!=c)

printf(“该三角形是等腰三角形n”);

else

printf(“该三角形是一般三角形n”);

else

printf(“不能构成三角形n”);} 3.参考代码如下: #include void main(void){

float M,N,menoy;

printf(“请输入购买金额:”);

scanf(“%f”,&M);

if(M<100)

N=0;

else if(M>=100&&M<200)

N=1.5;

else if(M>=200&&M<300)

N=2.5;

else if(M>=300&&M<400)

N=3.5;

else if(M>=400&&M<500)

N=4.5;

else if(M>=500&&M<600)

N=5.5;

else

N=6;

menoy=M*(1-N/100);

printf(“实际支付金额:%f,返还的金额:%fn”,menoy,M-menoy);} 4.参考代码如下: #include void main(void){

float M,N,menoy;

int in;

printf(“请输入购买金额:”);

scanf(“%f”,&M);

in=M/100;

switch(in)

{

case 0:N=0;break;

case 1:N=1.5;break;

case 2:N=2.5;break;

case 3:N=3.5;break;

case 4:N=4.5;break;

case 5:N=5.5;break;

default :N=6;break;

}

menoy=M*(1-N/100);

printf(“实际支付金额:%f,返还的金额:%fn”,menoy,M-menoy);} 5.参考代码如下: #include void main(void){

float x,max;

printf(“Enter a number:”);

scanf(“%f”,&x);

max=x;

while(x>0)

{

printf(“Enter a number:”);

scanf(“%f”,&x);

if(x>max)

max=x;

}

if(max>0)

printf(“The largest number entered was %fn”,max);} 6.参考代码如下: #include void main(void){

float M,N,menoy;

printf(“请输入购买金额:”);

scanf(“%f”,&M);

while(M>0)

{

if(M<100)

N=0;

else if(M>=100&&M<200)

N=1.5;

else if(M>=200&&M<300)

N=2.5;

else if(M>=300&&M<400)

N=3.5;

else if(M>=400&&M<500)

N=4.5;

else if(M>=500&&M<600)

N=5.5;

else

N=6;

menoy=M*(1-N/100);

printf(“实际支付金额:%f,返还的金额:%fn”,menoy,M-menoy);

printf(“请输入购买金额:”);

scanf(“%f”,&M);

} } 7.参考代码如下: #include void main(void){

float number,positivesum=0,negativesum=0,total=0;

int i;

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

{

scanf(“%f”,&number);

if(number>=0)positivesum+=number;

else negativesum+=number;

total+=number;

}

printf(“positive sum %f,negative sum %f,total %fn”,positivesum,negativesum,total);} 8.参考代码如下: #include void main(void){

int i,sum=0,k=1;

for(i=1;i<=101;i+=2)

{

sum=sum+k*i;

k=-k;

}

printf(“1-3+5-7+...-99+101=%dn”,sum);} 9.参考代码如下: #include void main(void){

float i,sum=0,k=1;

for(i=1;k>=1e-4;i++)

{

sum=sum+k;

k=k/i;

}

printf(“e=%fn”,sum);} 10.参考代码如下: #include void main(void){

float i,sum=0,n=2,d=1,temp;

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

{

sum=sum+n/d;

temp=n;

n=n+d;

d=temp;

}

printf(“sum=%fn”,sum);} 11.参考代码如下: #include #include void main(void){

float apple,watermelon,pear;

for(apple=1;apple<100;apple++)

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

{

pear=100-apple-watermelon;

if(fabs(apple*0.4+watermelon*4+pear*0.2-40.0)<1e-6)

printf(“apple:%.0f,watermelon:%.0f,pear:%.0fn”,apple,watermelon,pear);

} }

12.参考代码如下: #include void main(void){

int i,j,k;

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

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

for(k=0;k<10;k++)

if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)

printf(“%dn”,i*100+j*10+k);} 或:

#include void main(void){

int a,b,c,i;

for(i=100;i<1000;i++)

{

a=i/100;

b=i/10%10;

c=i%10;

if(i==(a*a*a+b*b*b+c*c*c))

printf(“%dn”,i);

} } 13.参考代码如下: #include void main(void){

int a,b,c,d;

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

for(b=0;b<10;b++)

for(c=0;c<10;c++)

for(d=0;d<10;d++)

if(a*1000+b*100+c*10+d==(a*10+b+c*10+d)*(a*10+b+c*10+d))

printf(“%dn”,a*1000+b*100+c*10+d);} 或:

#include void main(void){

int a,b,c,d,i;

for(i=1000;i<10000;i++)

{

a=i/1000;

b=i/100%10;

c=i/10%10;

d=i%10;

if(i==(a*10+b+c*10+d)*(a*10+b+c*10+d))

printf(“%dn”,i);

} } 14.参考代码如下: #include void main(void){

int i,j;

for(i=1;i<=4;i++)//先控制打印前4行

{

for(j=1;j<=4-i;j++)

printf(“ ”);

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

printf(“*”);

printf(“n”);

}

for(i=1;i<=3;i++)//再控制打印后3行

{

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

printf(“ ”);

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

printf(“*”);

printf(“n”);

} }

第四章

一选择题

1.A,如果没有给s[1]赋值,按C语言规定,s[1]下标变量中的数据是一个随机数

2.C,“China”字符串末尾还有一个,故占6个字节

3.D,scanf函数中格式符号若是%c,则把输入的第一个字符'1'赋给变量c,然后遇到格式符号%d,则把后续的23(遇到空格结束)赋值给变量i,遇到格式符号%s,则把后续的字符串“456”(遇到空格结束)赋值给变量s

4.D,C语言规定,数组在定义时就已经分配好了所占内存空间,所以int x[5]在内容中占的字节数为4*5=20

5.B,内层循环变量j每次都从0开始,使得在外层循环变量i每取一个值时,n[0]和n[1]的值都得重新计算

6.B,这是求十进制数18对应二进制数的程序,将每次18除以2得到的余数依次放到数组a[0]到a[4]中,最后按a[4]到a[0]这样的顺序输出

7.B,第一个for循环给a[0]到a[9]赋值为0到9,第二个for循环给p[0]到p[2]赋值为0,2,6,第三个for循环使k=k+p[0]*2+p[1]*2+p[2]*2=5+4+12=21

8.D,C语言规定,定义二维数组时不能省略第二维下标值,但可以省略第一维下标值

9.B,略

10.A,每行的第4列元素的值都为0

11.C,略

12.D,C语言规定,字符数组不能用s=“abcd”这样的赋值语句赋值

13.C,float类型的变量对应格式符号通常为%f,不是%d

14.A,每行的第3列元素的值均为0

15.D,略

16.C,A这种赋值形式无法放置字符串末尾的,B和D不符合C语言规定,即字符数组不能用s=“good”这样赋值语句赋值

17.A,这是字符数组str初始化的形式,str[0]到str[5]分别为字符s,t,r,i,n,g,str[6]到str[11]的值均为,函数strlen是统计字符串包含字符的个数,遇到(不包括)结束,所以str长度为6

18.C,x数组比y数组多了一个字符

19.A,数组名就是数组第一个元素的地址,所以scanf(“%s”,&s);中得删除数组名前面的& 20.D,puts和putchar函数只有一个参数,printf函数中格式符号%s应该对应的是数组名

21.D,程序功能是输出第2和第3个字符串

22.A,双层循环完成的功能是求s的值,s=(((a[0][0]*10+a[0][2])*10+a[1][0])*10+a[1][2]=(((6*10+3)*10+8)*10+5=6385 二.填空题 1.a=1234 b=5 答案分析:C语言规定,使用scanf函数通过键盘输入数据时,除了格式符号和转义字符,其他符号要原样输入。

2.Hello 答案分析:b[5]=0等于b[5]= '',是因为字符的ASCII值就是0,而printf(“%sn”,b);的功能是输出字符串,但遇到空格或等字符时结束输出,所以答案为Hello。

3.j<3;b[j][i]=a[i][j];i<3 答案分析:通过两个数组下标变量位置的变换来完成程序功能。

4.a[age]++ i=18;i<=25 答案分析:用数组a来存储每个年龄段的人数,并通过a[age]++来实现。5.c[i]=n%base;b[d] 答案分析:十进制整数转换为n进制采用的是除以n取余法,使用变量base存放某个进制的值,c数组存放每次计算的余数。最后一个for循环输出不同进制所对应的数码符号。6.break;i>=8 答案分析:如果找到某个数,则通过break语句终止循环。7.-850,2,0 答案分析:程序功能是查找并输出二维数组中最小值及其下标值。8.a[i]>b[j] i<3 j<5 答案分析:数组a和b的长度可以相等或不等,通过i<3或j<5来看哪个数组的值还没有放进c数组中。

9.a[i][j]

j=0;j<4;j++ j==3 printf(“n”);

答案分析:用数组a最后一列,即第4列来保存每行的和,通过printf(“n”);语句来控制按3行来输出。10.fi

答案分析:略 11.GDABC 答案分析:略 12.s[i++] 答案分析:while(s[i])表示当s[i]中的字符不为时进入循环体,否则退出while循环。

13.ahAMa 答案分析:通过scanf(“%s”,a);给字符数组赋值时遇到空格或回车符号将终止输入。程序功能是将字符串中的字符a,大写变成小写,小写变成大写,其他字符保持不变。14.LBLMNP 答案分析:执行strcat(a,b);语句后,a数组的值为“ABLMNP”,b数组的值为“LMNP”;在执行while(a[j++]!=0)b[j]=a[j];时,b[j]中的j值是前面a[j++]中j++执行后的值,即while循环首先执行b[1]=a[1]= 'B',然后是b[2]=a[2]= ' L',b[3]=a[3]= 'M',„„,b[0]中的字符保持不变,仍是' L'。15.'' i++ 答案分析:因为while(str[i])是通过字符串末尾的来判断字符串是否读取结束,所以字符数组str最后要有一个字符串结束符号。16.b[j]=a[j][0];b[j]=a[j][k]

答案分析:用b数组存储每行中的最大字符,最终b[0]存放第一行字符中的最大字符,b[1] 存放第一行字符中的最大字符,„„。b[j]=a[j][0]的作用是在查找一串字符中最大字符前,先把这串字符第一个字符放到b[j]中,然后通过循环和条件判断来实现最大字符的查找。17.a[k++]=a[j] 答案分析:略

三、编程题

1.参考代码如下: #include void main(void){

int array[31],total=0;

int i,j=1;

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

{

array[i]=2*j;

j++;

total=total+array[i];

}

array[30]=total/30;

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

printf(“%d,”,array[i]);} 答案分析:由于平均值要放在数组array的末尾,所以在定义数组时要多定义一个元素,即array[31]。另,为了保持数组类型一致性,故平均值也只取整数值。2.参考代码如下: #include #include #include void main(){

int i,j,k,a[20],temp;

srand(time(NULL));

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

{

a[i] = rand()% 101;//产生[0,100]之间的随机数,取整后赋给a[i]

printf(“%d ”,a[i]);

}

printf(“n”);

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

{

k=i;

for(j=i+1;j<20;j++)

if(a[j]

if(k!=i)temp=a[i],a[i]=a[k],a[k]=temp;

}

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

printf(“%d ”,a[i]);} 程序分析:略

3.参考代码如下: #include #include #include void main(){

int i,maxi,a[30];

srand(time(NULL));

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

{

a[i] = rand()% 101;

//产生[0,100]之间的随机数,取整后赋给a[i]

printf(“%d ”,a[i]);

}

printf(“n”);

maxi=0;

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

if(a[maxi]

for(i=maxi+1;i<30;i++)//将最大数后边的数据依次前移一个位置

a[i-1]=a[i];

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

printf(“%d ”,a[i]);} 程序分析:略

4.参考代码如下: #include void main(){

int i,n=0,a[30],x;

scanf(“%d”,&x);//输入要转换的数据

do

{

a[n]=x%2;//取余数

n++;

x=x/2;

//整除

}while(x!=0);

for(i=n-1;i>=0;i--)//输出

printf(“%d”,a[i]);} 程序分析:利用十进制数除以2取余数的方法计算对应的二进制数。5.参考代码如下: #include #include void main(){

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

char num[18],check[11]= {'1','0','X','9','8','7','6','5','4','3','2'};

printf(“请输入身份证号码的前17位:”);

gets(num);

//输入身份证号码

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

//对前17位数字的权求和

s=s+(num[i]-'0')*right[i];

y=s%11;

//计算模

printf(“last number is %cn”,check[y]);} 程序分析:身份证前17位是以字符串的形式输入的,利用表达式num[i]-'0'可以得到每个字符对应的数字;然后算出y值,再将对应的验证码输出即可,例如若y=10,则输出字符2。6.参考代码如下: #include void main(){

int a[20][20]= {0},i,j,n;

scanf(“%d”,&n);

//输入要打印的杨辉三角形的行数

for(i=0;i

//对第一列和对角线元素赋值

a[i][0]=a[i][i]=1;

for(i=2;i

//求对角线以下、第一列右边的元素值

for(j=1;j

a[i][j]=a[i-1][j]+a[i-1][j-1];

for(i=0;i

//打印杨辉三角形

{

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

printf(“%8d”,a[i][j]);

printf(“n”);

} } 程序分析:杨辉三角形数据矩阵的第一列和对角线上数值均为1,通过for(i=0;i

7.参考代码如下: #include #include #include void main(){

int a[5][6],i,j,max,min;

srand(time(NULL));

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

{

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

{

a[i][j]=rand()%51;产生[0,50]之间的随机数,取整后赋给a[i][j]

printf(“%4d”,a[i][j]);

}

printf(“n”);

}

max=min=a[0][0];

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

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

{

if(max

max=a[i][j];

if(min>a[i][j])

min=a[i][j];

}

printf(“max=%d,min=%dn”,max,min);} 程序分析:先产生30个随机整数放到二维数组a中,然后假设第一个数即是最小数也是最大数,再通过双重循环和条件判断来找到这30个整数的最大值和最小值。8.参考代码如下: #include #include #include void main(){

int a[20][20],i,j,n;

srand(time(NULL));

printf(“请输入n(n*n)的值:”);

scanf(“%d”,&n);

for(i=0;i

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

{

a[i][j]=rand()%51;产生[0,50]之间的随机数,取整后赋给a[i][j]

a[j][i]=a[i][j];

}

for(i=0;i

{

for(j=0;j

printf(“%4d”,a[i][j]);

printf(“n”);

} } 程序分析:通过for(j=0;j<=i;j++)来控制只遍历数值方阵的下三角数据(包括主对角线上的数据),通过a[j][i]=a[i][j];语句完成与下三角对应位置的上三角数组元素的赋值,从而形成对称矩阵。

9.参考代码如下: #include void main(){

char str[80],c;

int i=0;

while((c=getchar())!='n')//接受从键盘输入的字符,直到遇到回车

{

str[i]=c;

//将接受到的字符存入字符数组中

i++;

}

str[i]='';

puts(str);

//检验以上程序的结果是否正确 } 程序分析:gets函数功能是从键盘输入字符串,遇到回车符号结束输入,所以通过while((c=getchar())!='n')来决定键盘输入的每一个字符是否放在数组str中。最后通过str[i]='';语句来添加字符串的结束标志''。10.参考代码如下: #include void main(){

char str[80],temp;

int i,j;

gets(str);

for(i=0;str[i];i++);

//测试字符串长度

i--;

//i为最后一个字符所在下标

for(j=0;j

//对换对称位置的字符

temp=str[i],str[i]=str[j],str[j]=temp;

puts(str);

//输出处理好的字符串 } 程序分析:略

11.参考代码如下: #include void main(){ char month[12][20]= {“****”,“January”,“February”,“March”,“April”,“May”,“June”,“July”, “August”,“September”,“October”,“November”,“December”};

int a,b,c,d,e,number;

printf(“请输入3位正整数,0或负数结束:”);

scanf(“%d”,&number);

while(number>0)

{

a=number/100;

b=number/10%10;

c=number%10;

d=a+b+c;

e=d%12;

if(e==0)printf(“%d=%d+%d+%d=%d,%d%%%d=%d,%sn”,number,a,b,c,d,d,12,e,month[e]);

else printf(“%d=%d+%d+%d=%d,%d%%%d=%d,%sn”,number,a,b,c,d,d,12,e,month[e]);

scanf(“%d”,&number);

} } 程序分析:按照题意先给month数组赋初值,再通过公式把一个3位整数的每位数值提取出来,计算这三个数的和d,然后d除以12取余数,最后输出余数作为下标的对应month数组的数组元素即可。12.参考代码如下: #include void main(){

char str[80];

int i;

gets(str);

for(i=0;str[i]!='';i++)

;

printf(“字符串的长度为%dn”,i);程序分析:通过for(i=0;str[i]!='';i++);中变量i值的递增来遍历数组,最终i的值就是字符串的长度。

第五章

一.选择题

1-5 DDBCB

6-10 BACAA

11-15DBBCD 二.填空题 1.How does she 2.*(p+i*4+j)

printf(“n”)3.*(++p)4.num+1 q

*q>max

*q

n++

b[n]= ''

三、编程题

1.参考代码如下: #include #include #include void main(){

int i,a[20],b[20],*pa,*pb,temp;

srand(time(NULL));

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

{

a[i] = rand()% 101;

b[i] = rand()% 101;

}

printf(“数组a:”);

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

printf(“%d ”,a[i]);

printf(“n”);

printf(“数组b:”);

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

printf(“%d ”,b[i]);

printf(“n”);

pa=a;

pb=b;

for(i=0;i<20;i++)//对换数组a和数组b相同位置的元素

{

temp=*pa;

*pa=*pb;

*pb=temp;

pa++;

pb++;

}

printf(“对换后n”);

printf(“数组a:”);

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

printf(“%d ”,a[i]);

printf(“n”);

printf(“数组b:”);

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

printf(“%d ”,b[i]);} 2.参考代码如下: #include main(){

char str1[80],str2[80],*p1,*p2;

int j;

printf(“input two kinds of string:n”);

gets(str1);

gets(str2);

for(p1=str1,p2=str2;*p1&&*p2;p1++,p2++)/*比较每一对字符,直到出现'',退出循环 */

{

if(*p1!=*p2)break;

/* 若某一对字符不同,则已分出大小,退出循环*/

}

j= *p1-*p2;

/*j为结束比较时那对字符的ASCII码差值 */

if(j>0)

printf(“%dn”,1);

else if(j<0)

printf(“%dn”,-1);

else

printf(“%dn”,0);} 3.参考代码如下: #include int main(){

int a[4][4],temp;

int(*p)[4];

int i,j;

p=a;

//为行指针p赋初值

printf(“Enter array elements:n”);

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

//输入数组元素的值

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

scanf(“%d”,*(p+i)+j);

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

for(j=0;j

{

temp=*(*(p+i)+j);

*(*(p+i)+j)= *(*(p+j)+i);

*(*(p+j)+i)=temp;

}

//转置矩阵

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

//输出数组元素的值

{

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

printf(“%4d”,p[i][j]);

printf(“n”);

}

return 0;} 4.参考代码如下: #include int main(){

char str[80],*sp;

int count[26]= {0},i,a;

gets(str);

for(sp=str;*sp;sp++)//用指针访问字符串

{

a=*sp-97;

//将a字符的个数统计在数组count下标为0的单元,依次类推

count[a]++;

}

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

if(count[i]!=0)

printf(“%c=%d ”,i+97,count[i]);

return 0;} 5.参考代码如下: #include int main(){

char str[80],*spf,*spr;

int flag=1;

gets(str);

for(spr=str;*spr;spr++)

//让指针spr指到字符串的末尾

;

spr--;

//用指针spr指到字符串最后一个字符

for(spf=str;spf

if(*spf!=*spr)

flag=0;

if(flag)

printf(“YESn”);

else

printf(“NOn”);

return 0;} 6.参考代码如下: #include #include int main(){

char name[5][15];

char *p[5];//定义指针数组

char *temp;

int i,j,k;

printf(“Enter 5 strings:n”);

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

{

gets(name[i]);//读入5个字符串

p[i]=name[i];//指针数组元素指向字符串

}

for(i=0;i<4;i++)//用选择排序法排序

{

k=i;

for(j=i+1;j<5;j++)

if(strcmp(p[j],p[k])<0)k=j;

if(k!=i)

{

temp = p[i];

p[i]=p[k];

p[k]=temp;//改变指针的指向

}

}

printf(“nThe sorted result:n”);

printf(“------------------------n”);

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

puts(p[i]);//按指针指向顺序输出

return 0;}

第六章

一.选择题

1-5 CBCDA

6-10 AADBB

11-15BBDBD

16-20 AABAA 二.填空题 1.四

auto, register, static, extern 2.5 6 3.8,17 4.1 2 6 24 120 5.return 1 return n+sum(n-1)

三、编程题

1.参考代码如下: #include #include int prime(int m){

int i,k;

if(m==1)return 0;

else

{

k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0)

break;

if(i<=k)return 0;

else return 1;

} } int main(){

int i;

for(i=101;i<200;i+=2)

if(prime(i))

printf(“%d ”,i);} 2.参考代码如下: #include #include float fun(float x){

float y;

if(x>-5&&x<0)

y=x;

else if(x==0)

y=x-1;

else if(x>0&&x<10)

y=x+1;

return y;} void main(){

float x;

printf(“请输入x的值:”);

scanf(“%f”,&x);

printf(“%fn”,fun(x));} 3.参考代码如下: void tran(int x){ int i,s[20]={0};for(i=0;x;i++){

s[i]=x%8;

x/=8;} i--;for(;i>=0;i--)

printf(“%d”,s[i]);printf(“n”);} void main(){

int dec;

printf(“请输入一个十进制数:”);

scanf(“%d”,&dec);

tran(dec);} 4.参考代码如下: #include void swap(int a[],int n){

int *pf,*pr,temp;

for(pf=a,pr=a+n-1;pf

{

temp=*pf;

*pf=*pr;

*pr=temp;

} } void main(){

int array[20],n,i;

printf(“请输入要处理的数据的个数:”);

scanf(“%d”,&n);

printf(“请输入%d个数:”,n);

for(i=0;i

scanf(“%d”,&array[i]);

swap(array,n);

printf(“对换后的数据为:”);

for(i=0;i

printf(“%d ”,array[i]);} 5.参考代码如下: #include void swap2w(int a[][5]){

int i,j,temp;

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

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

{

temp=a[i][j];

a[i][j]=a[5-i-1][j];

a[5-i-1][j]=temp;

} } void main(){

int a[5][5],n,i,j;

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

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

scanf(“%d”,&a[i][j]);

swap2w(a);

printf(“对换后的数据为:n”);

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

{

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

printf(“%d ”,a[i][j]);

printf(“n”);

} } 6.参考代码如下: #include int huiwen(char str[]){

char *spf,*spr;

int flag=1;

for(spr=str;*spr;spr++)

//让指针spr指到字符串的末尾

;

spr--;

//用指针spr指到字符串最后一个字符

for(spf=str;spf

if(*spf!=*spr)

flag=0;

return flag;}

int main(){

char str[80];

gets(str);

if(huiwen(str))

printf(“YESn”);

else

printf(“NOn”);

return 0;} 7.参考代码如下: #include int delch(char str[],char ch){

int i,j;

for(i=0;str[i];i++)

if(ch==str[i])

for(j=i+1;str[j];j++)

//删除字符

str[j-1]=str[j];

str[j-1]=str[j];

//移动字符串末尾的'' }

int main(){

char str[80],c;

gets(str);

scanf(“%c”,&c);

delch(str,c);

puts(str);

return 0;} 8.参考代码如下: #include int he(int n){

if(n==1)

return 1;

else

return n+he(n-2);} int main(){

int i,s=0;

for(i=1;i<=19;i+=2)

s=s+he(i);

printf(“%dn”,s);

return 0;} 9.参考代码如下: #include int feb(int n){int f;

if(n==1||n==0)

return 1;

else

{

f=feb(n-1)+feb(n-2);

return f;

} } int main(){

int n;

scanf(“%d”,&n);

printf(“%d”,feb(n));

return 0;}

第七章

一.选择题

1-5BDDCC

6-10 BBDCB

11-15BBDCB

16-18 DBB 二.填空题 1.30

2.ARRAY a,b,c;3.2 3 4.a c 5.p->name &p->post_code

struct communication *

p->post_code

三、编程题

1.参考代码如下: #include #define N 4 /*结构体类型定义*/ struct student {

char no[10];

char name[10];

float score[3];

float total;};//主函数 int main(){

struct student stu[N];//定义结构体数组,存储4个学生信息

struct student temp;

//定义结构体变量,用于交换数据的临时存储空间

int i,j,k;/*从键盘输入学生信息*/

puts(“Enter students' info:”);

for(i=0;i

{

printf(“student #%d:n”,i+1);

gets(stu[i].no);

//输入学号

gets(stu[i].name);

//输入姓名

scanf(“%f%f%f”,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);

//输入3门课的成绩

getchar();

//接收输入缓冲区的字符

stu[i].total=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];//计算总成绩

}

/*用选择排序法,对学生成绩进行排序*/

for(i=0;i

{

k=i;

for(j=i+1;j

{

if(stu[j].total>stu[k].total)k=j;

else if(stu[j].total==stu[k].total)//若总成绩相等,按英语成绩排序

{

if(stu[j].score[2]>stu[k].score[2])

k=j;

}

}

/*交换学生信息*/

if(k!=i)

{

temp=stu[i];

//结构体变量赋值

stu[i]=stu[k];

stu[k]=temp;

}

} //输出排好序的学生信息

printf(“nThe sorted list:n”);printf(“%-12s%-22s%-10s%-10s%-10s%-10sn”,“no”,“name”,“course1”,“course2”,“course3”,“Total”);

for(i=0;i

{

printf(“%-12s%-22s”,stu[i].no,stu[i].name);

printf(“%-10.1f %-10.1f%-10.1f”,stu[i].score[0],stu[i].score[1],stu[i].score[2]);

printf(“%-10.1fn”,stu[i].total);

}

return 0;} 2.参考代码如下: #include #define N 45 /*结构体类型定义*/ struct student {

char no[10];

char name[20];

int age;

float score;};//主函数 int main(){

struct student stu[N];//定义结构体数组,存储45个学生信息

int maxi=0;

//存储成绩最高的学生信息的下标

int i;

/*从键盘输入学生信息*/

puts(“Enter students' info:”);

for(i=0;i

{

printf(“student #%d:n”,i+1);

gets(stu[i].no);

//输入学号

gets(stu[i].name);

//输入姓名

scanf(“%d%f”,&stu[i].age,&stu[i].score);

//输入年龄和一门课的成绩

getchar();

//接收输入缓冲区的字符

if(stu[maxi].score

maxi=i;

} //输出成绩最高的学生信息

printf(“nThe highest score is:n”);

printf(“%-12s%-22s%-10s%-10sn”,“no”,“name”,“age”,“course”);

printf(“%-12s%-22s”,stu[maxi].no,stu[maxi].name);

printf(“%-10d %-10.1f%”,stu[maxi].age,stu[maxi].score);

return 0;} 3.参考代码如下: #include /*共用体类型定义*/ union cch {

unsigned int a;

char b[4];};//主函数 int main(){

union cch x;//定义共用体类型变量

scanf(“%u”,&x.a);

printf(“%cn”,x.b[0]);//低字节

printf(“%cn”,x.b[1]);

printf(“%cn”,x.b[2]);

printf(“%cn”,x.b[3]);

return 0;} //测试数据:1431989597 4.参考代码如下: #include #define N 3 struct person {

char name[15];//姓名

char job[30];//职业

char addr[30];

union

{

float score;//班级编号

char title[10];//职称

} cate;};struct person per[N];//定义结构体数组,存储人员信息 /*人员数据录入函数input()*/ void input(){

int i;

for(i=0;i

{

printf(“Enter name: ”);

gets(per[i].name);

// getchar();

printf(“Enter job,if teacher,first character should be 't',if student,should be 's': ”);

gets(per[i].job);

// getchar();

if(per[i].job[0]=='s')

{

printf(“Enter student's score: ”);

scanf(“%f%*c”,&per[i].cate.score);

}

else if(per[i].job[0]=='t')

{

printf(“Enter teacher's title: ”);

gets(per[i].cate.title);

}

printf(“Enter address: ”);

gets(per[i].addr);

} } /*人员数据打印函数print()*/ void print(){

int i;

printf(“name

job

addr

score/titlen”);

printf(“------------------n”);

for(i=0;i

{

printf(“%-10s”,per[i].name);

printf(“%-15s”,per[i].job);

printf(“%-15s”,per[i].addr);

if(per[i].job[0]=='s')

printf(“%fn”,per[i].cate.score);

else if(per[i].job[0]=='t')

printf(“%sn”,per[i].cate.title);

} } void sort(){

int i,j,k;

struct person temp;

for(i=0;i

{

k=i;

for(j=i+1;j

if(strcmp(per[k].name,per[j].name)>0)

k=j;

if(k!=i)

{

temp=per[i];

per[i]=per[k];

per[k]=temp;

}

} } //主函数 int main(){

input();

sort();

print();}

第八章

一.单选题

1-5 BABAD

6-10 DDDCD

D 二.填空题 1.二进制 文本

2.pf=fopen(“D:zk04data xfile.dat”,“w”)3.二进制 文本

文件结束符 非0值

三、编程题

1.参考代码如下: #include FILE *fopenfun(char *file,char *model){

FILE *fp;

if((fp = fopen(file, model))== NULL)

{

printf(“Cannot open file of %s.n”,file);

exit(0);

}

else return fp;} main(){

FILE *fp;

char c;

int digcou=0,capcou=0,smacou=0,othercou=0;

/* 定义整型变量为计数器并初始化为0 */

fp = fopenfun(“file.txt”,“r”);/* 打开文件 */

while((c = fgetc(fp))!=EOF)/* 从文件中读字符 */

{

if(c>='0' && c<='9')

digcou++;

/* 统计数字字符 */

else if(c>='A' && c<='Z')

capcou++;

/* 统计大写字母 */

else if(c>='a' && c<='z')

smacou++;

/* 统计小写字母 */

else

othercou++;

/* 统计其它字符 */

}

printf(“数字字符有%d个n”,digcou);

/* 输出字符个数 */

printf(“大写字母有%d个n”,capcou);

printf(“小写字母有%d个n”,smacou);

printf(“其它字符有%d个n”,othercou);

fclose(fp);/* 关闭文件 */ } 2.参考代码如下: #include FILE *fopenfun(char *file,char *model){

FILE *fp;

if((fp = fopen(file, model))== NULL)

{

printf(“Cannot open file of %s.n”,file);

//打开文件出错显示提示信息

exit(0);

//调用exit函数终止程序运行

}

else return fp;} #define SIZE 10 struct student /* 定义结构体*/ {

long num;

char name[10];

int age;

char address[10];} stu[SIZE], out;/* 存盘函数:将学生的信息以数据块形式写入文件 */ void fsave(){

FILE *fp;

int i;

fp=fopenfun(“student.dat”,“wb”);

for(i=0;i

if(fwrite(&stu[i], sizeof(struct student), 1, fp)!= 1)

printf(“File write error.n”);

/* 写过程中的出错处理 */

fclose(fp);

/* 关闭文件 */ } //主函数 main(){

FILE *fp;

int i;

for(i=0;i

/* 从键盘读入学生的信息*/

{

printf(“Input student %d:”, i+1);

scanf(“%ld%s%d%s”,&stu[i].num, stu[i].name, &stu[i].age, stu[i].address);

}

fsave();

/* 调用函数保存学生信息 */

fp = fopenfun(“student.dat”, “rb”);

printf(“ No.Name

Age

Addressn”);

while(fread(&out, sizeof(out), 1, fp))

/*读入数据块*/

printf(“%8ld %-10s %4d %-10sn”, out.num, out.name, out.age, out.address);

fclose(fp);/* 关闭文件 */ } 3.参考代码如下: #include FILE *fopenfun(char *file,char *model){

FILE *fp;

if((fp = fopen(file, model))== NULL)

{

printf(“Cannot open file of %s.n”,file);

//打开文件出错显示提示信息

exit(0);

//调用exit函数终止程序运行

}

else return fp;} #define SIZE 5 struct student /* 定义结构体*/ {

long num;

char name[10];

float score[5];

float aver;} stu[SIZE], out;/* 存盘函数:将学生的信息以数据块形式写入文件 */ void fsave(){

FILE *fp;

int i;

fp=fopenfun(“student.dat”,“wb”);

for(i=0;i

if(fwrite(&stu[i], sizeof(struct student), 1, fp)!= 1)

printf(“File write error.n”);

/* 写过程中的出错处理 */

if(fwrite(&out, sizeof(struct student), 1, fp)!= 1)/*写入5门课的平均成绩 */

printf(“File write error.n”);

fclose(fp);

/* 关闭文件 */ } //主函数 main(){

FILE *fp;

float average[5]={0},t;

int i,j;

for(i=0;i

/* 从键盘读入学生的信息*/

{

printf(“Input student %d:”, i+1);

scanf(“%ld%s”,&stu[i].num, stu[i].name);

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

{scanf(“%f%*c”,&stu[i].score[j]);

t=t+stu[i].score[j];

average[j]+=stu[i].score[j];

}

stu[i].aver=t/5;

}

out.num=0;strcpy(out.name,“5course'ave”);

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

out.score[j]=average[j]/SIZE;

fsave();

/* 调用函数保存学生信息 */

fp = fopenfun(“student.dat”, “rb”);

printf(“ No.Name

course1 course2 course3 course4 course5n”);

while(fread(&out, sizeof(out), 1, fp))

/*读入数据块*/

{printf(“%8ld %-12s”, out.num, out.name);

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

printf(“%8.2f”, out.score[j]);

printf(“n”);

}

fclose(fp);/* 关闭文件 */ } 4.参考代码如下 #include FILE *fopenfun(char *file,char *model){

FILE *fp;

if((fp = fopen(file, model))== NULL)

{

printf(“Cannot open file of %s.n”,file);

//打开文件出错显示提示信息

exit(0);

//调用exit函数终止程序运行

}

else return fp;} #define SIZE 5 struct warehouse /* 定义结构体*/ {

char KNO[10];

int KNOM };//主函数 main(){

FILE *fpr,*fpw;

struct warehouse t;

fpr=fopenfun(“CK.txt”,“r”);

fpw=fopenfun(“XK.txt”,“w”);

while(!feof(fpr))

{

fscanf(fpr,“%s%d”,t.KNO,&t.KNOM);

if(t.KNOM>100)

fprintf(fpw,“%s %dn”,t.KNO,t.KNOM);

}

fclose(fpr);/* 关闭文件 */

fclose(fpw);/* 关闭文件 */ }

第九章

1.(1)30(2)3(3)9(4)29 2.(1)1(2)1(3)1(4)7(5)15(6)6 3.参考代码如下 #include void main(){

char a,b;

a='C';

b=a&0125;

//0125的二进制为01010101

printf(“%dn”,b);} 4.参考代码如下 #include void main(){int i,bit;

/* 定义循环变量i和位1/0标志变量bit */ unsigned int n,mask;

/* 定义欲转换的整数n和屏蔽字变量mask */ mask=0x80000000;

/* 初始屏蔽字,从左边最高位开始检查 */ printf(“Enter a integer of Hexadecimal :”);scanf(“%x”,&n);

/* 输入要转换的整数 */ printf(“binary of %x is:”,n);for(i=0;i<32;i++)

/* 循环检查32位,并输出结果 */ { if(i%8==0&&i!=0)printf(“,”);/*习惯上二进制每8位用“,”分隔以便查看*/

bit=(n&mask)?1:0;

/* n&mask非0,该位为1;否则该位为:0 */

printf(“%1d”,bit);

/* 输出1或0 */

mask=mask>>1;

/* 右移1位得到下一个屏蔽字 */

}

printf(“n”);} 5.参考代码如下 #include void main(){

unsigned int value,res;

int n1,n2;

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

scanf(“%u”,&value);

printf(“输入n1、n2:n”);

scanf(“%d”,&n1);

scanf(“%d”,&n2);

if(n1>=n2||n2>32)

printf(“输入有误!n”);

res =((value <<(n1-1))>>(31-n2+n1))<<(32-n2);

//先向左移n1-1位,再将结果向右移n1-1+32-n2,再将结果左移32-n2位。

printf(“%un”,res);}

第十章

编程题

1.参考代码如下: #include #define rem(a,b)(a)%(b)void main(){

int x,y,z;

scanf(“%d%d”,&x,&y);

z=rem(x,y);

printf(“%dn”,z);} 2.参考代码如下: #include #define cube(x)(x)*(x)*(x)#define judge(x,y)(x)*(y)<50?1:0 void main(){

int x,y,z;

scanf(“%d%d”,&x,&y);

z=cube(x);

printf(“%d,%dn”,z,judge(x,y));} 3.参考代码如下: #include #define calc(year)(year)%4==0&&(year)%100!=0||(year)%400==0 #define judge(year)calc(year)?1:0 void main(){

int year;

scanf(“%d”,&year);

if(judge(year))

printf(“%d is leap year!n”,year);

else

printf(“%d is not a leap year!n”,year);} 4.参考代码如下: #include #define judge(a,b,c)a+b>c&&b+c>a&&a+c>b #define s(a,b,c)(a+b+c)/2 #define area(a,b,c)sqrt(s(a,b,c)*(s(a,b,c)-a)*(s(a,b,c)-b)*(s(a,b,c)-c))void main(){

float a,b,c;

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

if(judge(a,b,c))

printf(“The triangle area is %f!n”,area(a,b,c));

else

printf(“It's not a triangle!n”);}

第十一章

一.单选题

1-5 CBBDD

D 二.填空题

1.struct link *next;2.①struct student * ②tail->next ③head 3.Answer:3 4.①break ②(struct data *)malloc(struct data)③while(1)④p!=NULL ⑤p=p->link 5.①x ②p ③s

三、编程题

1.参考代码如下:

#include

#include

#include

#define N 3

typedef struct

{

char no[11];

char name[15];

float score[N];

float sum;} studdatatype;typedef struct z1

{

studdatatype studdata;

struct z1 *next;} STUDENT;/*以下是函数原型*/ STUDENT *create();

void print(STUDENT *head);

main(){

STUDENT *head;

head=create();

print(head);

/*I/O函数*/

/*动态内存分配函数及其他函数说明*/

/*字符串函数*/

/*定义常数*/

/*学生数据类型*/

/*定义结点数据类型*/

/*创建链表*/

/* 显示所有记录*/

/*定义链表头指针*/

} /*创建链表*/ STUDENT *create(){

STUDENT *head,*p,*listp;

char no[11];

head=(STUDENT *)malloc(sizeof(STUDENT));//建立头结点

head->next=NULL;

listp=head;//当前指针指到头结点

printf(“输入一个学生信息(学号(* 结束)、姓名,三门课成绩:”);

scanf(“%s”,&no);

while(no[0]!='*')

{

p=(STUDENT *)malloc(sizeof(STUDENT));//建立新结点

strcpy(p->studdata.no,no);

//将输入的数据存储到新结点的数据域

scanf(“%s”,p->studdata.name);scanf(“%f%f%f”,&p->studdata.score[0],&p->studdata.score[1],&p->studdata.score[2]);

p->studdata.sum=p->studdata.score[0]+p->studdata.score[1]+p->studdata.score[2];

p->next=NULL;

//将新结点的指针域置为空

listp->next=p;

//将新结点连接到当前指针的后面

listp=p;

//将新结点作为当前结点

printf(“输入一个学生信息(学号(* 结束)、姓名,三门课成绩:”);

scanf(“%s”,&no);

//输入下一个学生的成绩

}

return head;} /*输出链表中结点信息*/ void print(STUDENT *head){

int i=0;

/* 统计记录条数*/

STUDENT *p;

/*移动指针*/

system(“cls”);

/*清屏*/

p=head->next;

/*初值为第一个结点的指针*/

printf(“nnn*******************************STUDENT********************n”);

printf(“| rec| no

|

name

| sc1| sc2| sc3|

sum |n”);

printf(“|----|----------|---------------|----|----|----|--------|n”);

while(p!=NULL)

{

i++;

printf(“|%4d|%-10s|%-15s|%4.0f|%4.0f|%4.0f|%8.2f|n”,i,p->studdata.no, p->studdata.name,p->studdata.score[0],p->studdata.score[1],p->studdata.score[2],p->studdata.sum);

p=p->next;

}

printf(“********************************end***********************n”);}

2.参考代码如下:

/*查找成绩最高的学生信息*/ void searchmaxscore(STUDENT *h){

STUDENT *p,*pmax;

p=pmax=h->next;

while(p!=NULL)/*当指针不为空时,循环继续*/

{

if(pmax->studdata.sum

studdata.sum)

pmax=p;

p=p->next;

/*移动指针,指向下一结点*/

}

printf(“nnnThe highest total score of the students' information :n”);

printf(“*******************************STUDENT********************n”);

printf(“| no

|

name

| sc1| sc2| sc3|

sum |n”);

printf(“|----------|---------------|----|----|----|--------|n”);

printf(“|%-10s|%-15s|%4.0f|%4.0f|%4.0f|%8.2f|n”, pmax->studdata.no, pmax->studdata.name,pmax->studdata.score[0],pmax->studdata.score[1],pmax->studdata.score[2],pmax->studdata.sum);

printf(“********************************end***********************n”);}

3.参考代码如下:

/*用插入法按由大到小排序函数*/ STUDENT *sort(STUDENT *h){

STUDENT *p,*q,*t,*h1;

/*定义临时指针*/

h1=h->next->next;

/*从原表的第二个学生结点开始处理*/

h->next->next=NULL;

/*将原表的第一个学生结点作为有序表的第一个结点*/

while(h1!=NULL)

/*当还有元素没有插入到有序表时,进行排序*/

{

t=h1;

/*取未排序的第一个结点*/

h1=h1->next;

/*h1指针后移*/

p=h->next;

/*设定移动指针p,从第一个结点开始*/

q=h->next;

/*设定移动指针q做为p的前驱,指向第一个结点*/

while(p!=NULL && t->studdata.sum < p->studdata.sum)/*作总分比较*/

{

q=p;

/*待排序点值小,则有序表指针后移*/

p=p->next;

}

if(p==q)

/*p==q,说明待排序点值大,应排在首位*/

{

t->next=p;

/*待排序点的后继为p*/

h->next=t;

/*新头结点为待排序点*/

}

else

/*待排序点应插入在中间某个位置q和p之间,如p为空则是尾部*/

{

t->next=p;

/*t的后继是p*/

q->next=t;

/*q的后继是t*/

}

}

printf(“sort sucess!!n”);

return h;

}

/*排序成功*/ /*返回头指针*/

第四篇:C语言程序设计教程第九章习题答案

1、li

300.0 chang 30

200.0 chang

2、#include struct students {

char sid[100];

char name[100];

float score[3];}student;void main(){

int i;float j;

printf(“nPlease input sid:

”);

scanf(“%s”,student.sid);

printf(“nPlease input name: ”);

scanf(“%s”,student.name);

printf(“nPlease input 3 score:(like1,1,1)”);/*输入逗号隔开*/

scanf(“%f,%f,%f”,&student.score[0],&student.score[1],&student.score[2]);

printf(“nsid = %s”,student.sid);

printf(“nname = %s”,student.name);

j=(student.score[0]+student.score[1]+student.score[2])/3.0;

printf(“naverage = %.2f”,j);

getch();}

3、#include #include #define F sizeof(student)#define NULL 0 typedef struct scores { int english;int math;int c_language;int all;}TP;typedef struct students { char sid[15];char name[15];TP score;struct students *next;}student;student *input(){ student *head,*p1,*p2;int n=0;char ch;clrscr();head=(student *)malloc(F);head->next=NULL;

do {

n++;

printf(“nnPlease input %d student message:

nn”,n);

printf(“t%d student sid:

”,n);

p1=(student *)malloc(F);p1->next=NULL;

scanf(“%s”,p1->sid);

printf(“nt%d student name:

”,n);

scanf(“%s”,p1->name);

printf(“nt%d student scores(englesh,math,c_language):

”,n);

scanf(“%d,%d,%d”,&p1->score.english,&p1->score.math,&p1->score.c_language);

p1->score.all=p1->score.english+p1->score.math+p1->score.c_language;

if(n==1)

{ head->next=p1;p2=p1;}

else

{ p2->next=p1;

p2=p1;

}

printf(“nntttContinue or back(press y/n):

”);

ch=getch();

}while(ch=='y'||ch=='Y');return head;} void average1(student *head){ student *p;int j;clrscr();p=head->next;

while(p)

{ j=p->score.all/3;

printf(“nnname:

%staverage: %d”,p->name,j);

p=p->next;

} printf(“nnnPress eny key return.”);getch();} void average2(student *head){ student *p;int n=0,temp1=0,temp2=0,temp3=0;p=head->next;while(p){ temp1+=p->score.english;

temp2+=p->score.math;

temp3+=p->score.c_language;

p=p->next;n++;} printf(“nnaverage english is : %dnaverage math is : %dnaverage c_language is : %dt”,temp1/n,temp2/n,temp3/n);} student *sort(student *head){ student *head1,*p,*q,*r;int temp1=0,temp2=0,temp3=0,temp4;char s[15],n[15];head1=head;for(p=head1->next;p->next!=NULL;p=p->next){ r=p;

for(q=p->next;q;q=q->next)

if(q->score.all>r->score.all)

r=q;

if(r!=p)

{ strcpy(s,p->sid);strcpy(n,p->name);

temp1=p->score.english;

temp2=p->score.math;

temp3=p->score.c_language;

temp4=p->score.all;

strcpy(p->sid,r->sid);strcpy(p->name,r->name);

p->score.english=r->score.english;

p->score.math=r->score.math;

p->score.c_language=r->score.c_language;

p->score.all=r->score.all;

strcpy(r->sid,s);strcpy(r->name,n);

r->score.english=temp1;

r->score.math=temp2;

r->score.c_language=temp3;

r->score.all=temp4;

} } return head1;} void output(student *head){ student *head2,*p;int i=1;clrscr();head2=sort(head);for(p=head2->next;p!=NULL;p=p->next)

printf(“nnname: %stsid: %stenglish: %dtmath: %dtc_language: %dtaverage: %dtmingci: %d”,p->name,p->sid,p->score.english,p->score.math,p->score.c_language,p->score.all/3,i++);

average2(head);

printf(“nnnttPress eny key back.”);getch();} void main(){ student *head,*p1,*p2;int i=0,j=1;head=input();do {

clrscr();

printf(“nn(1): average1.nn(2): average2.nn(3): sort.nn(4): output.nnn

Please choose:

”);

scanf(“%d”,&i);

switch(i)

{ case 1: average1(head);break;

case 2: clrscr();average2(head);printf(“nnnPress eny key retuen.”);getch();break;

case 3: clrscr();p1=sort(head);for(p2=p1->next;p2!=NULL;p2=p2->next)printf(“nttname: %stmingci:%d”,p2->name,j++);printf(“nnnPress eny key back.”);getch();break;

case 4: output(head);break;

default: printf(“nYour choose is not right.”);break;

} }while(i!=-1);}

4、#include #include #define NULL 0 #define F sizeof(worker)typedef struct work { char sid[15];char name[15];int money;struct work *next;}worker;int min=0,max=0;char a[15],b[15];worker *input(){ worker *head,*p,*q;int n=0;char ch;head=(worker *)malloc(F);head->next=0;do { n++;

p=(worker *)malloc(F);p->next=0;

printf(“nntPlease input %d worker message :

”,n);

printf(“n%d worker sid:

”,n);scanf(“%s”,p->sid);

printf(“n%d worker name:

”,n);scanf(“%s”,p->name);

printf(“n%d worker money:

”,n);scanf(“%d”,&p->money);

if(n==1)

{

head->next=p;q=p;

max=p->money;strcpy(a,p->name);

min=p->money;strcpy(b,p->name);

}

else

{

q->next=p;

if(p->money>max){max=p->money;strcpy(a,p->name);}

if(p->moneymoney;strcpy(b,p->name);}

q=p;

}

printf(“ntty/n”);ch=getch();}while(ch=='y'||ch=='Y');return head;} void output(){

clrscr();printf(“nThe max money is: %dttname is: %snn”,max,a);printf(“nThe min money is: %dttname is: %s”,min,b);} void main(){

input();output();getch();} 5、6、#include“stdio.h” #define F sizeof(stu)#define NULL 0 typedef struct student { int sid;int average;struct student *next;}stu;stu *head;stu *create(){ stu *p1,*p2;int n=0;char ch;head=(stu *)malloc(F);head->next=NULL;

do {

n++;

printf(“nnPlease input %d student message:

nn”,n);

printf(“t%d student sid:

”,n);

p1=(stu *)malloc(F);p1->next=NULL;

scanf(“%d”,&p1->sid);

printf(“nt%d student average:

”,n);

scanf(“%d”,&p1->average);

if(n==1)

{ head->next=p1;p2=p1;}

else

{ p2->next=p1;

p2=p1;

}

printf(“nntttContinue or back(press y/n):

ch=getch();

}while(ch=='y'||ch=='Y');return head;} stu *select(stu *head,int x){ stu *s;s=head->next;while(s){

if(s->sid==x)

break;

s=s->next;} return s;}

stu *insert(stu *head,int x,int y){ stu *p,*r,*q;clrscr();p=head->next;r=(stu *)malloc(sizeof(stu));r->sid=x;r->average=y;if(p==NULL)/*如果插入空表*/

{

p=r;

r->next=NULL;

”);

printf(“ninsert success!”);

}

else

{ while(x>p->sid)/*找到插入的位置,按学号大小。(找到位置或者到了表尾都会跳出循环)*/

{

if(p->next==NULL)break;p=p->next;

}

if(x

sid)

/*插到中间位置*/

{

r->sid=p->sid;

r->average=p->average;

p->sid=x;

p->average=y;

r->next=p->next;

p->next=r;

printf(“ninsert success!”);

}

else if(x==p->sid)/*学号不能相同*/

printf(“nError--->your input this same sid.”);

else

/*插到末尾*/

{

p->next=r;

r->next=NULL;

printf(“ninsert success!”);

}

}

return head;} stu *get(stu *head,int n)/*得到位置为n的结点的指针*/ { stu *p;int i;p=head->next;if(n==0)return head;else

{

for(i=1;i

p=p->next;

return p;} } stu *delete(stu *head,int sid){

stu *p,*q;int temp=0,i=0;p=head->next;if(!p)

{

printf(“nlist is empty.press eny key back.”);getch();return head;}/*表空*/ else { while(p)

/*查找学号为sid的结点的指针*/

{i++;/*标记学号为sid的结点的位置*/

if(p->sid==sid)

{temp=1;break;} /*temp=1标记找到了*/

p=p->next;}

if(temp==1)/*如果有学号为sid的结点*/

{ q=get(head,i-1);/*得到sid的前一个结点的指针*/

q->next=p->next;

free(p);

printf(“nndelete sucess!!”);

return head;

}

else

/*没有找到*/

{ printf(“nnNO this data.n”);

return head;

} } } void print(stu *head){ stu *p;p=head->next;if(!p){printf(“nlist is empty.press eny key back.”);getch();} while(p){

printf(“n%d :t%d ”,p->sid,p->average);

p=p->next;} } main(){ stu *p1,*p2;char ch1;int n,i=0,j=0;head=create();do {clrscr();printf(“n1.insert.”);printf(“n2.select.”);printf(“n3.delect.”);printf(“n4.print list.”);printf(“n5.EXIT

”);printf(“n

............choice(1-5).............”);ch1=getch();switch(ch1){

case '1':

{ clrscr();

printf(“nplease input insert sid.and average(like 1,1):”);

scanf(“%d,%d”,&i,&j);

head=insert(head,i,j);

printf(“nnnPress eny key back.”);getch();

break;

}

case '2':

{ clrscr();

printf(“ninput you want to selete sid:

”);

scanf(“%d”,&n);

p1=select(head,n);

{

if(p1)printf(“nsid:%dtaverage:%d”,p1->sid,p1->average);

else

printf(“nNo this data.”);

}

printf(“nnnPress eny key back.”);getch();

break;

}

case '3':

{ clrscr();printf(“nPlease input you want delete sid: ”);

scanf(“%d”,&n);

head=delete(head,n);

printf(“nnnPress eny key back.”);getch();

break;

}

case '4':

{ clrscr();

printf(“All information :”);

print(head);

printf(“nnnPress eny key back.”);getch();

break;

}

case '5': return;

default: printf(“nnYour enter is not right.press eny key back.”);getch();}

}while(n);}

7、#include #define F sizeof(L)typedef struct list {

char data;

struct list *next;}L;L *set_list(){

L *head,*p1,*p2;

char c;

int n=0;

head=(L *)malloc(F);head->next=0;

/*建立链表*/

p1=p2=head;

printf(“nPlease input char(press * finish):”);

scanf(“%c”,&c);

while(c!='*')

{

n++;

if(n==1)

p1->data=c;

else

{

p1=(L *)malloc(F);

p1->data=c;

p2->next = p1;

p2 = p1;

p1->next = 0;

}

scanf(“%c”,&c);

}

p1=head;

while(p1)

{

printf(“%c ”,p1->data);p1=p1->next;

}

printf(“nnn”);

return head;} void change_list(L *head1)

/*算法:p2指向最后一个元素,p1指向第一个元素。交换他们的值,p1,p2同时往中间靠拢。*/ {

L *p1,*p2,*p3;

int i,j,k,n=1;

char temp;

p1=head1;p2=head1;p3=head1;

while(p3->next)

{ p3=p3->next;n++;

}/*求链长*/

for(i=n;i>(n/2);i--)/*外循环使p1后移,p2前移。*/

{

p2=head1;for(j=1;j

p2=p2->next;/*p2指向最后一个元素*/ temp=p1->data;p1->data=p2->data;p2->data=temp;/*交换他们的值*/ p1=p1->next;/*p1向后移*/

}

while(head1)

{ printf(“%c ”,head1->data);head1=head1->next;} } void main(){ L *head;head=set_list();change_list(head);getch();}

第五篇:C语言程序设计教程课程设计

《C语言程序设计教程课程设计》计划 类别:课程设计

适用于三年制专科计算机应用专业 学分:1 周数:1

一、设计目的与要求

《高级语言程序设计课程设计》是《高级语言程序设计》课程的实践环节,其教学目的是通过一些中小规模程序的编程,使学生对c语言程序设计的基本规则与方法有比较全面的理解和认识,熟练掌握高级语言程序设计技术,为以后学习更高层次的程序设计和软件开发奠定坚实基础。

通过本课程设计,应达到下列基本要求: 能够结合c语言来理解程序设计的基本概念;

掌握用c语言解决问题的基本方法和步骤,能够熟练地使用c语言编写中小型应用程序; 熟练掌握c语言编程规则,掌握函数的应用方法和编写; 熟练掌握面向过程程序设计方法; 掌握结构化程序设计思想和方法; 培养和提高学生的程序调试能力;

培养学生查阅手册、图表和文献资料的能力; 培养学生撰写报告文档的能力。

二、课程设计题目

每个题目的限选人数根据班级总人数平均后确定,但要求同一题目的学生独立完成设计题目,以下10个题目任选其一。1。职工信息管理系统设计 1.1问题描述

试设计一职工信息管理系统,职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)1.2基本要求

1.系统以菜单方式工作(2.职工信息录入功能(3.职工信息浏览功能(4.查询和排序功能:(至少一种查询方式)--算法(((1)按工资查询((2)按学历查询等

5.职工信息删除、修改功能(任选项)(2.图书信息管理系统设计 1.1问题描述

试设计一图书信息管理系统,图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。1.2基本要求

1.系统以菜单方式工作(2..图书信息录入功能(3..图书信息浏览功能(4..查询和排序功能:(至少一种查询方式)--算法(((1)按书名查询((2)按作者名查询

5..图书信息的删除与修改(3。学生信息管理系统设计 3.1问题描述

试设计一学生信息管理系统,学生信息包括:学号、姓名、年龄、性别、出生年月、地址、电话、E-mail等。3.2基本要求

1..系统以菜单方式工作 2..学生信息录入功能 3..学生信息浏览功能 4..查询、排序功能(1)按学号查询(2)按姓名查询

5..学生信息的删除与修改 4。学生选修课程系统设计 4.1问题描述

试设计一选修课程系统,假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。4.2基本要求

1.系统以菜单方式工作(2.课程信息录入功能(3.课程信息浏览功能(4.查询功能:(至少一种查询方式)--算法((1)按学分查询((2)按课程性质查询(5.学生选修课程(可选项)(5。销售管理系统 5.1问题描述

某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容:(1)销售员的代号,(2)产品的代号。(3)这种产品的当天的销售额。每位销售员每天可能上缴0-5张便条。假设,收集到了上个月的所有便条,5.2基本要求

编写一个处理系统,读取上个月的销售情况(自己设定),进行如下处理。1.计算上个月每个人每种产品的销售额。

2.按销售额对销售员进行排序,输出排序结果(销售员代号)

3.统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)4.输出统计报表

销售统计报表能反映出:销售员代号 产品代号 销售之和 每种产品之和 总和 6.学生成绩管理 6.1问题描述 对学生成绩进行管理,学生信息如下: 现有学生成绩信息,内容如下 姓名学号语文数学英语

张明明

01

李成友

02

张辉灿

03

王露

04

陈东明

05

„.......… 6.2基本要求

实现学生信息管理,软件的入口界面应包括如下几个方面: 1.系统以菜单方式工作

2.学生信息数据能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息

3.查询时可实现按姓名查询、按学号查询

4.成绩统计:输入任意的一个课程名(如数学)和一个分数段(如60--70),统计出在此分数段的学生情况。

5.能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果)(使用多种方法排序者,加分)6.学生可自动增加新功能模块(视情况可另外加分)7.学生成绩管理 7.1问题描述

学生成绩进行管理,学生信息包括:学号、姓名、班级、课程

1、课程

2、课程

3、课程

4、学期。

7.2基本要求

1.系统以菜单方式工作

2.能按学期、按班级完成对学生成绩的录入、修改

3.能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序 4.能查询学生成绩,不及格科目及学生名单

5.统计每门课100~85分、84~70、69~60分以上不及格的人数

6.从键盘上输入一个姓名或学号,能够查找是否是该班成员,若是,要求输出该生的全部信息

7.可以对任一学生的成绩、学号进行修改

8.可增添和删除任一学号学生的信息,增添和删除后仍能按学号排序 9.能按班级输出学生的成绩单 8.通讯录管理 8.1问题描述

设一个通信录由以下几项数据信息构成:

数据项类型

姓名字符串 地址字符串 邮政编码字符串 电话号码字符串 8.2基本要求 1.主要功能:

(1)能建立、查询、修改和增删学生通讯录(2)能够按多种方式进行查询 2.要求:界面友好,易于操作 9.图书管理系统 9.1问题描述

图书信息管理系统设计,图书信息包括:登录号、书名、作者名、存在状态、分类号、出版单位、出版时间、价格、借书人姓名、性别、学号等。信息描述: 9.2基本要求

1.系统以菜单方式工作 2.新进图书基本信息 3.图书信息浏览功能

4.图书基本信息的查询和排序功能:(至少一种查询方式)--算法 按书名查、按作者名查询

5.对撤消图书信息的删除删除与修改(可选项)(6. 为借书人办理注册

7.办理借书手续(非注册会员不能借书)8.办理还书手续

10.设计一个简单计算器 10.1问题描述

模拟windows操作系统中的计算器,能进行加减乘除等计算。10.2基本要求

1.显示计算器界面

2.当用户输入一个算式后,计算器显示计算结果,同时屏幕项部显示:continue? 如果用户此时按Y键,则继续输入下一个算式,否则,程序终止 3.可以多次响应用户的计算请求 11..图书借还管理系统 11.1问题描述

对借还图书进行管理,图书被借阅,应记录借阅信息,同时图书的存库数量相应减少。还书时,应将图书数量相应增加,同时删除图书借阅信息。图书基本信息应包括:图书名称、图书编号、单价、作者、存库数量。借书人信息应包括姓名、性别、学号等。11.2基本要求

1.新进图书基本信息的输入 2.图书基本信息的查询 3.对撤消图书信息的删除 4.为借书人办理注册

5.办理借书手续(非注册会员不能借书)6.办理还书手续

12.用户登录程序设计 12.1问题描述

做一个密码验证程序,密码验证只有三次机会。12.2基本要求 1.有登录界面,用户输入密码时以*代替输出,用户登录成功后可以修改密码。2.可以有多个用户登录。

3.初次登录的密码有管理员设置。13.车票管理程序设计 13.1问题描述

一车站每天有n个发车班次,每个班次都有一班次号(1、2、3„n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。如 班次发车时间起点站终点站行车时间额定载量已定票人数

8:00

郫县广汉

2

6:30

郫县成都

0.5

13.2基本要求

1.录入班次信息,可不定时地增加班次数据。

2.浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。

3.查询路线:可按班次号查询 ,可按终点站查询。4.售票和退票功能。

A:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数。

B:退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数。5.至少采用文本菜单界面(如果能采用图形菜单界面更好)。

三、进度安排

第1天:分析所选题目,查阅相关资料,写出需求分析,确定系统功能,划分模块;设计算法、数据结构;

第2-3天:编制代码并调试; 第4天:检查学生程序;

第5天:提交源程序清单和课程设计报告,进行答辩。

四、设计方式

1.对于每个题目,应完成算法设计和简单的应用程序设计。

a)算法设计包括解题思路,模块划分和模块代码实现方法。附传统的流程图或N-S图。b)应用程序设计包括:编辑录入源程序;反复调试、排错、运行;借用软件工程的一些方法和技巧对程序进行测试。

2.编程量以满足基本要求即可,但必须调试通过,运行结果准确。3.设计完成后,需要写成一份课程设计报告(A4纸打印出来),体现课程设计所做工作。4.结果形式:提交调试无误的源程序代码,课程设计报告一份。

五、成绩评定标准

学生成绩以优、良、中、及格和不及格5个等级评定。1.学生编写的实际软件和运行结果,占总成绩40% 2.设计报告,占总成绩40% 3.教师提问,占总成绩10% 4.出勤,占总成绩10%

六、课程设计报告要求

按照软件工程及应用程序系统设计步骤详细叙述课程设计题目的完成过程。课程设计报告的格式要求: 封面

洛阳理工学院C语言课程设计报告 题目 院系 班级 姓名 指导老师 年月日

2.课程设计内容:

(1)问题描述:描述要求编程解决的问题。(本课题具有哪些功能,做了哪些工作、用了哪些方法技巧,实现结果如何)

(2)基本要求:给出程序要达到的具体的要求

(3)所设计的应用程序运行所需要的软件、硬件支持环境。(4)算法分析(设计思路),描述解决相应问题算法的设计思想。

(5)功能模块划分,每个模块对应的函数、每个函数功能及参数设计情况说明。(6)系统流程图

(7)实现步骤(要求有详细的文字表述):

如安装 VC;熟悉课题;查找资料;需求分析;设计框图;录入程序;

语法排错;逻辑排错;程序测试;程序运行;数据记录;写课题设计报告等。(8)源程序完整代码以及原始数据、测试数据、输入数据及其运行结果记录。(9)简要总结及自我评价。

(10)源程序:给出所有源程序清单,要求程序有充分的注释语句,至少要注释每个函数参数的含义和函数返回值的含义。(11)参考文献 参考文献书写模板:

[1] ***.C程序设计(第三版).北京:清华大学出版社,2005 [2] ***.C程序设计题解与上机指导(第三版).北京:清华大学出版社,2005 [3] ***主编.C语言程序设计实验与实训指导及题解.北京: 高等教育出版社,2005 [4] ***.C语言程序设计.北京:清华大学出版社,2008 [5] 王静, 武春岭编著.C语言程序设计基础习题集.北京:中国水利水电出版社,2008 [6] 黄维通,马力妮等编著.C语言程序设计习题解析与应用案例分析.北京: 清华大学出版社,2004

七、实习时间、地点及班级人数

时间:从2010年6月21日至6月25日,共五天时间。地点:洛阳理工学院西区实验楼B计算机房 人数:Z090551一个班40人

下载《C语言程序设计实践教程》答案-完整版(★)word格式文档
下载《C语言程序设计实践教程》答案-完整版(★).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    《C语言程序设计教程(第二版)》习题答案

    《C语言程序设计教程(第二版)》习题答案 说明 1. 本习题答案是我自己做的,错误和疏漏在所难免。编程题全部调试通过,但选择题和填空题不敢保证全对。 2. 凡未指明解题所用的......

    《C语言程序设计教程》习题参考答案

    《C语言程序设计教程》习题参考答案 默认分类 2007-09-10 12:38:44 阅读6618 评论13 字号:大中小 订阅【习题1】 一、简答题(在课本中寻找答案,略) 1.1 C程序的基本结构包括......

    《C语言程序设计实践》课题

    综合实践大作业 任务1 课题名称: 学生顺序表的处理 课题内容: 在一个数据文件中存放若干学生数据记录,每条记录都有如下数据项:学号,姓名,性别,成绩。 编一个程序,采用顺序存储结构......

    C语言程序设计考试题答案

    1、 已知int i, x[3][4];则不能将x[1][1]的值赋给变量i的语句是______ (分数:2 分) A. i=*(*(x+1)) B. i=x[1][1] C. i=*(*(x+1)) D. i=*(x[1]+1) 标准答案是:A。 2、 当c的值不......

    《C语言程序设计》2011-2012-2A答案

    河南理工大学学期 《C语言程序设计》笔试试卷(A卷) 一、单项选择题(每题1分,共50分) 1.B2.A3.D4.A5.C6.C7.C8.C9.C10.A 11.B12.B13.D14.D15.D16.C17.C18.C19.D20.A 21.C22.C23.......

    《C语言程序设计》2011-2012-2B答案

    河南理工大学学期 《C语言程序设计》笔试试卷(B卷) 一、单项选择题(每题1分,共50分) ,在每小题列出的四个选项中只有一个选项是符合题目要求的,请在答案卡上将正确答案所对应选项......

    《C语言程序设计教程(第二版)》习题答案[合集]

    2 第1章 程序设计基础知识 一、单项选择题(第23页) 1-4.CBBC 5-8.DACA 二、填空题(第24页) 1.判断条件 2.面向过程编程 3.结构化 4.程序 5.面向对象的程序设计语言 7.有......

    C语言程序设计项目教程课后参考答案

    《C语言程序设计项目教程》课后参考答案 连雁平武夷学院数学与计算机学院2013.9.25 第一章: 1.填空题 (1)函数 主函数 函数 (2)/* */ (3)连接(4)# (5).h (6).c .obj .exe 2.选择题 (1......