tceic.com
学霸学习网 这下你爽了
相关标签
当前位置:首页 >> 工学 >>

课后题答案-C语言程序设计(第2版)


语言程序设计能力教程(第二版)》 )》课后作业及实训题 《C 语言程序设计能力教程(第二版)》课后作业及实训题 参考答案

第 1 章 进入 C 语言程序世界 二、 1. I love China! printf("we are students.\n") 2. 6

项目实训题参考答案 1.编写一个 C 程序,输出以下信息: * * * * * * * * * * * * * * * * * * * * I am a student! * * * * * * * * * * * * * * * * * * * * main() { printf("********************\n"); printf(" I am a student!\n ");

printf("********************\n"); } 2.已知立方体的长、宽、高分别是 10cm、20cm、15cm,编写程序,求立方体体积。 解: main() { int a,b,c,v; a=10; b=20; c=15; v=a*b*c; printf("v=%d",v); } 本程序运行结果为: v=3000

第 2 章 编制 C 程序的基础知识 一 选择题 CBABACC 二 操作题

2

1. 3,2,-8,2 3.000000,2.500000,-8.000000 DE FGH why 3. 3 4 2 1 4. aa A 1 3 3 2 bb cc N abc is 21+35 equal 52

2. ABC

项目实训题 1.定义一个符号常量 M 为 5 和一个变量 n 值为 2,把它们的乘积输出。 #define M 5 main() { int n,c; n=2; c=M*n; printf("%d\n",c); }

2.编程求下面算术表达式的值。 (1)x+a%3*(int)(x+y)%2/4,设 x=2.5,a=7,y=4.7; (2)(float)(a+b)/2+(int)x%(int)y,设 a=2,b=3,x=3.5,y=2.5。 (1)main() { int a=7; float x=2.5,y=4.7; printf("%f\n",x+a%3*(int)(x+y)%2/4); (2)main() { int a=2,b=3; float x=3.5,y=2.5; printf("%f\n",(float)(a+b)/2+(int)x%(int)y); } }

第三章 顺序结构程序设计 一 选择题 A C D C C 二 操作题 1. x=3,a=2,b=3 2. z=12.700000
2

3

3. 1 2 1 a 2 1 2 三.编程题 编程题 1. 某工种按小时计算工资,每月劳动时间(小时)×每小时工资=总工资,总工资 中扣除 10%公积金,剩余的为应发工资。编写一个程序从键盘输入劳动时间和每小时 工资,打印出应发工资。 解: #include <stdio.h> main() { float sj,gz,yfgz; printf("time,salary:"); scanf("%f,%f",&sj,&gz); yfgz=sj*gz*0.9; printf("total salary:%f\n",yfgz); } 本程序运行结果为: time,salary:4,3<CR> total salary:10.800000 2.编写一个程序求出任意一个输入字符的 ASCII 码 解: #include <stdio.h> main() { char c; printf("Input a string:"); scanf("%c",&c); printf("%c ASCII is %d\n",c,c); } 本程序运行结果为: Input a string:a<CR> a ASCII is 97 3、编写一个程序用于水果店售货员算帐:已知苹果每斤 2.50 元,鸭梨每斤 1.80 元,香蕉每斤 2 元,橘子每斤 1.6 元,要求输入各类水果的重量,打印出应付
3

4

钱数,再输入顾客付款数,打印出应找的钱数。 解: main() { float p,y,x,j,ys,g,fk; printf("apple,pear,banana,orange(weight)="); scanf("%f,%f,%f,%f",&p,&y,&x,&j); ys=2.5*p+1.8*y+2*x+1.6*j; printf("fu kuan="); scanf("%f",&g); fk=g-ys; printf("result:\n"); printf("fukuan=%6.2fyuan\nshoukuan=%6.2fyuan\nzhaohui=%6.2fyuan\n",g ,ys,fk); } 本程序运行结果为: apple,pear,banana,orange(weight)=1,2,3,4 fu kuan=100 result: fukuan=100.00yuan shoukuan= 18.50yuan zhaohui= 81.50yuan 项目实训 1.假设银行定期存款的年利率 rate 为 2.25%,并已知存款期为 n 年,存款本金 为 capital 元,试编程计算 n 年后可得到本利之和 deposit。 #include<math.h> main() { int n; float rate=0.0225,capital,deposit; scanf("%d,%f",&n,&capital); deposit=capital*pow(1+rate,n); printf("deposit=%f\n",deposit); } 2.将一个三位数整数,正确分离出它的个位、十位和百位数字,并分别在屏幕上 输出。 main() { int n,a,b,c; scanf("%3d",&n); a=n/100;
4

5

b=n%100/10; c=n%100%10/1; printf("a=%d,b=%d,c=%d\n",a,b,c); }

第四章 选择结构程序设计 一、略 二、B B A C B C B AD C A 三、1. 1 0 2. 2 3 2 2 3. 10 20 0 4. ch>=’A’&&ch<=’Z’||ch>=’a’&&ch<=’z’ ch>=’0’&&ch<=’9’ ch==’ ’ 5. -1 四、上机操作 1. 从键盘输入一个英文字母,如果是大写字母,则将它变为小写字母输出;如果 是小写字母,则将其变为大写字母输出。 #include<stdio.h> main() {char ch; ch=getchar(); if(ch>='A'&&ch<='Z') ch+=32; else if(ch>='a'&&ch<='z') ch-=32; putchar(ch); putchar('\n'); }

2. 根据输入的 x 值依据下列表达式,计算 y 的值。 2x (x>-1) y = 3 (x=-1)

4+x (x<-1) 解: main() { float x,y; scanf("%f",&x);
5

6

if(x>-1) y=2*x; else if(x==1) y=3; else y=4+x; printf("y=%f",y); } 本程序运行结果为: -2<CR> y=2.000000

3. 编写程序, 输入一个整数, 判断它是奇数还是偶数, 若是奇数, 输出“Is Odd“; 若是偶数,输出“Is Even“。 main() { int x; scanf("%d",&x); if(x%2==0) printf("Is Even\n"); else printf("Is Odd\n"); }
2

4.设计应用程序,求二次方程 ax +bx+c=0 的解。 #include<math.h> main() { float a,b,c,disc,x1,x2,p,q; scanf("%f,%f,%f",&a,&b,&c); if(fabs(a)<=1e-6) printf(" The equation is not a quadratic\n"); else { disc=b*b-4*a*c; if(fabs(disc)< 1e-6) printf("x1=x2=%8.4f\n",-b/(2*a)); else if(disc>1e-6) {x1=(-b+sqrt(disc)/(2*a)); x2=(-b-sqrt(disc)/(2*a)); printf("x1=%8.4f,x2=%8.4f\n",x1,x2); } else { p=-b/(2*a); q=sqrt(-disc/(2*a)); printf("%8.4f+%x8.4fi\n",p,q); printf("%8.4f-%8.4fi\n",p,q);} } } 5.按托运规则,行李不超过 50 公斤时,运费为 0.15 元/公斤,如超过 50 公斤,超 过部分的运费为 0.22 元/公斤,现有行李 w 公斤,编写一个程序计算运费。
6

7

解: #include <stdio.h> main() { float w,f,x; printf("weight:"); scanf("%f",&w); if(w<=50) x=0.15*w; else x=0.15*50+0.22*(w-50); printf("money:%6.2f yuan\n",x); } 本程序运行结果为: weight:20<CR> money:3.00 yuan weight:60<CR> money:9.70 yuan

6. 某商场给与顾客购物的折扣率如下: 购物金额<200 元 500 元>购物金额>=200 元 1000 元>购物金额>=500 元 购物金额>=1000 元 不打折 9折 8折 7.5 折

输入一个购物金额,输出打折率、购物实际付款金额。 #include<stdio.h> main() { float x,y,realx; scanf("%f",&x); if(x<=0) { printf("Error! You input a worry number!\n"); y=0;} else { if(x<200) y=1.0; else if(x<500) y=0.9; else if(x<1000) y=0.8; else y=0.75;} if(y!=0) {realx=x*y; printf("y=%f, the realx=%5.2f\n", y,realx);} }
7

8

项目实训 某托儿所收 2 岁到 6 岁的孩子,2 岁、3 岁孩子进小班(Lower class) 岁孩子 ;4 进中班(Middle class) 岁、6 岁孩子进大班(Higher class) ;5 。编写程序(用 if 语句和 switch 语句) ,输入孩子年龄,输出年龄及进入的班号。如:输入:3,输出: age:3,enter Lower class。 #include<stdio.h> main() { int age; printf("Please input your baby's age:"); scanf("%d",&age); if(age>6||age<2) printf("Sorry,your baby can't enter!"); else switch(age); {case 2: case 3: printf("age:%d,enter Lower class\n",age); break; case 4: printf("age:%d,enter Middle class\n",age);break; case 5: case 6: printf("age:%d,enter Higher class",age);break; } }

第五章 循环结构程序设计 一、选择题 C C A A D D 三、操作题 1.求 s=1+3+5+7+…100 的值。
#include "stdio.h" main() { int i,sum=0; for(i=1;i<=100;i+=2) sum=sum+i; printf("sum=%d",sum); }

2. 输入班级学生考试成绩,求考试平均成绩。约定当输入负数时,表示输入结束。 main() { float sum=0,score,ave; int n=0; scanf("%f",&score); while(score>0) { n++;
8

9

sum=sum+score; scanf("%f",&score); } ave=sum/n; printf("\nThe average score is%.2f",ave); } 3.输入一行字符以@作结束标志,分别统计其中英文字母、空格、数字和其它字符的 个数。 #include "stdio.h" main() { char ch; int cha=0,space=0,digit=0,other=0; while((ch=getchar())!='@') { if (ch>='a'&&ch<='z'||ch>='A'&&ch<='Z') cha++; else if (ch==' ') space++; else if (ch>='0'&&ch<='9') digit++; else other++; } printf("\ncha=%d,space=%d,digit=%d,other=%d",cha,space,digit,other); } 4.一张纸的厚度为 0.1 毫米,珠穆琅玛峰的高度为 8848.13 米,假如纸张有足够大, 将纸对折多少次后可以超过珠峰的高度? main() { float h=8848.13,h0=0.0001,h1; int m=0; h1=h0; while(h0<=h) { h0=2*h0; printf("\n m=%d,high=%f",m,h0); m++; } printf("\n m=%d\n",m-1);} 5、 编写一个程序求出满足下列条件的四位数,该数是一个完全平方数;第一、三位 上数之和为 10,第二、四位上数之积为 12。 解: #include <stdio.h> main() { int i,j,a,b,c,d; for(i=32;i<=99;i++) { j=i*i; a=j/1000;
9

10

b=j/100-a*10; c=j/10-a*100-b*10; d=j-a*1000-b*100-c*10; if(a+c==10&&b*d==12) printf("%d ",j); } } 本程序运行结果为: 1296 9216 6、 一个正数与 3 的和是 5 的倍数,与 3 的差是 6 的倍数,编写一个程序求符合条件 的最小数。 解: #include <stdio.h> main() { int n; n=1; while(1) { n=n+1; if((n+3)%5==0&&(n-3)%6==0)break; } printf("n=%d",n); } 本程序运行结果为: n=27 7、 已知 xyz+yzz=532,其中 x、y、z 都是数字,编写一个程序求出 x、y、z 分别是多 少。 解: #include <stdio.h> main() { int x,y,z,i; for(x=1;x<=9;x++) for(y=1;y<=9;y++) for(z=0;z<=9;z++) { i=100*x+10*y+z+100*y+10*z+z;
10

11

if(i==532) printf("x=%d,y=%d,z=%d\n",x,y,z); } } 本程序运行结果为: x=3,y=2,z=1 8、学校有近千名学生排队,5 人一行余 2 人,7 人一行余 3 人,3 人一行余 1 人, 求学生人数。 解: #include <stdio.h> main() { int n; for(n=1000;n>=10;n--) if(n%5==2&&n%7==3&&n%3==1)break; printf("n=%d\n",n); } 本程序运行结果为: n=997 9.验证歌德巴赫猜想:任意一个大于 6 的偶数均可表示为两个质数的和。 #include<stdio.h> main() { int i,x; int p,q,k1,k2; printf("Please input an odd data(>=6):"); scanf("%d",&x); for(p=3;p<=x/2;p+=2) {k1=k2=1; q=x-p; if(p>2) for(i=2;i<p;i++) if(p%i==0) k1=0; for(i=2;i<q;i++) if(q%i==0) k2=0; if(k1==1&&k2==1) printf("%d=%d+%d\n",x,p,q); }}

10.一个数恰好等于它的平方数的右端,这个数称为同构数 。如 :5 的平方是 25, 25 的平方是 625。找出 1~1000 之间的全部同构数 。 #include "math.h" main()
11

12

{ int i,j,k=0; for (i=2;i<1000;i++) { if (i/10==0) j=1; /*因为 i 是整型,所以是整除*/

else if (i/100==0) j=2; else if (i/1000==0) j=3; if ((long int)i*i%(int)pow(10,j)==i) /*同构数的定义*/ { k++; /* 计数器*/

printf("%10d",i); if (k%5==0) printf("\n"); } }

printf("\nk=%d",k); }

项目实训 1. 编写程序求 1-1/2+1/3-1/4+…+1/99-1/100 的值
#include "stdio.h" main() { int i, s=-1; float sum=1.0; for(i=2;i<=100;i++) sum=sum+1.0*s/i; printf("sum=%f",sum); }

2. 曾有一位印度国王要奖赏他的聪明能干的宰相达依尔。 达依尔只要求在国际象棋的 棋盘格上放置小麦粒, 第一格放 1 粒, 第二格放两粒, 第三格放 4 粒, 第四格放 8 粒, ……, 最后能有多少小麦粒呢? main() { float i ,s=1,t=1; for (i=1;i<=63;i++) { t*=2; s+=t; } printf("s=%f\n",s);} 3.打印水仙花数,即一个三位数各位上的数字之和等于它本身,如:153=13+53+33 。 main() {int k1,k2,k3,i; for (k1=1;k1<=9;k1++) for (k2=0;k2<=9;k2++) for (k3=0;k3<=9;k3++) { i=k1*k1*k1+k2*k2*k2+k3*k3*k3; if (i==k1*100+k2*10+k3)
12

13

printf("\n%d=%d^3+%d^3+%d^3",i,k1,k2,k3);

}}

4.编制电视歌手大奖赛评分程序,要求评委人数和每位评委的打分从键盘输入,去掉 一个最高分,再去掉一个最低分,求评委给出的最后得分。 main()/* TV 大奖赛 */ {int n,i=1; float x,max,min,sum=0; printf("\nPlease input the number of score:"); scanf("%d",&n); printf("\nInput score:"); scanf("%f",&x); max=x;min=x;sum=x; while (i<n) { i++; scanf("%f",&x); sum+=x; if (max<x) max=x ; else if (x<min) min=x;} sum=(sum-max-min)/(n-2); printf("The last score is%8.2f\n",sum);}

5.打印下列图形。 * * * * * main() { int i,j; for (i=1;i<=5;i++) { for (j=1;j<=5-i;j++) printf ( " "); * * * * * * * * * * * * * * * * * * * *

for (j=1;j<=5;j++) printf (" *"); printf("\n"); }}

第六章 数组
13

14

一、选择题 D A D AA C C A D 二、程序阅读题 13 13 13 13 13 13 三、上机实训题 1、分别用冒泡法和选择排序法对十个随机整数进行排序。 参考教材 2、编写一个程序计算字符串中值为 x(x 由键盘输入)的字符个数。 #include "stdio.h" #include "string.h" main() { char a[20],x; int n=0,i=0; printf("\nPlease input string,end of enter key: "); gets(a); printf("\nPlease input x:"); x=getchar(); while(a[i]!='\0') {if (a[i]==x) n++; i++; } printf("\n%d",n); }

if(x[i]>ave) printf("%f ",x[i]); } 3、编写一个程序判定用户输入的正数是否为“回文数” ,所谓回文数是指数正读反读 都相同。 #include <stdio.h> main() { int buffer[10],i,k,b; long number,n; printf("input a positive number:"); scanf("%ld",&number); k=0; n=number; do { buffer[k]=n%10; k=k+1; n=n/10; } while(n!=0); b=1;
14

15

for(i=0;i<=(k-1)/2;i++) if(buffer[i]!=buffer[k-1-i]) b=0; if(b) printf("%ld is huiwenshu\n",number); else printf("%ld is not huiwenshu\n",number); } 4、求二维数组的周边元素之和 #include <stdio.h> main() { int a[3][3]={{3,-2,1,2},{0,1,3,-2},{3,1,0,4}}; int i,j,sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++) for(i=0;i<3;i++) if (i==0||j==0||j==2||i==2) sum=sum+a[i][i]; printf("%d",sum); } 5、编写程序找出一个二维数组的鞍点。即该位置上的元素在该行最大,但是在该列最 小。 main() { int i,j,k,max,maxi,maxj,flag1,flag2; int a[2][3]={{1,2,3},{4,5,6}}; flag2=0; for (i=0;i<2;i++) { max=a[i][0]; for (j=0;j<3;j++) if (a[i][j]>max) { max=a[i][j]; maxj=j;} for (k=0,flag1=1;k<2 && flag1;k++) if (a[k][maxj]<max) flag1=0; if (flag1) {printf("\n %d is answer,locate:line %d

colum %d\n",max,i,maxj); flag2=1; } } if (!flag2) printf("\n no answer!"); }

项目实训: 1、评定奥运会某参赛选手的成绩。设某参赛选手的某项目有 8 位评委,要求去掉一个 最高分和一个最低分,给出其最后得分。
#include <stdio.h> 15

#define N 10 16 符常量*/ main() { int x[N],i,max,min,score=0; printf("Please input %d integers:\n",N); /*输入 N 个数,存入数组中*/ for(i=0;i<N;i++) { scanf("%d",&x[i]); score+=x[i];} /*赋初值*/ max=min=x[0]; 默认为最大或最小值*/ for(i=1;i<N;i++) { if(max<x[i]) max=x[i]; if(min>x[i]) min=x[i]; }

/*定义字

/*将第一个数

/*求最大值*/ /*求最小值*/

printf("The last score is : %d\n",(score-max-min)/(N-2); }

2、 打印出以下杨辉三角形(要求打印出 10 行) 。 1 1 1 1 2 1 1 4 1

1 3 3 1 4 6

… … … … #define N 11 main() { int i,j,a[N][N]; for (i=1;i<N;i++) { a[i][i]=1;a[i][1]=1;} for (i=3;i<N;i++) for (j=2;j<=i-1;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for (i=1;i<N;i++) { for (j=1;j<=i;j++) printf("%6d",a[i][j]); printf("\n"); } printf("\n"); }

16

17

#define N 11 main() { int i,j,a[N][N]; for(i=1;i<N;i++) { a[i][i]=1; a[i][1]=1; } for(i=3;i<N;i++) for(j=2;j<=i-1;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=1;i<N;i++) { for(j=1;j<=i;j++) printf("%6d",a[i][j]); printf("\n"); } printf("\n"); } 本程序的运行结果为: 1 1 1 1 1 1 1 1 1 1 1 2 3 4 5 6 7 8 9 1 3 6 10 15 21 28 36 1 4 10 20 35 56 84 1 5 15 35 70 126 1 6 21 56 126 1 7 28 84 1 8 36 1 9 1

3、一个程序,将字符数组 s2 中的全部字符拷贝到字符数组 s1 中。不用 strcpy 函 数。拷贝时, ‘\0’也要拷贝过去。 ‘\0’后面的字符不拷贝。 解: #include "stdio.h" main() { char from[80],to[80];
17

18

int i; printf("Input string:"); scanf("%s",from); for(i=0;i<=strlen(from);i++) to[i]=from[i]; printf("the result: %s\n",to); } 本程序的运行结果为: the result:Input string:student

第七章 函数 一、选择题 B D C B B D A A D 三、编程题 1、写一个判定偶数的函数,在主函数中输入一个整数,输出是否是偶数的信息。 int even(x) int x ; { if (x%2==0) return(1); else return(0); } main() { int x; scanf("%d",&x); if (even(x)) printf("x is even."); else printf("x is not even.");} 2、统计 400~499 这些数中 4 这个数字出现的次数,要求判断一个数有几位 4 这个 数字用函数实现。 main() { int i,k=0; for(i=400;i<=499;i++) k=k+num(i); printf ("number=%d\n",k); num(x) int x; { int y,k=0; while(x!=0) { y=x%10; if(y= = 4) k++;
18

}

19

x=x/10; } return(k);} 3、找出 1000 之内的所有“完数”,要求判断一个数是否为完数用函数实现。 main() { int i; for (i=1;i<1000;i++) if (wan(i)) printf ("%5d",i); printf ("\n"); wan(x) int x; { int i,k; k=0; for (i=1;i<=x/2;i++) if (x%i= =0) k=k+i; if (k= =x) else return (1); }

return (0); }

项目实训: 项目实训: 1、已有变量定义和函数调用语句:int x=57;isprime (x);函数 isprime ( )用 来判断一个整型数 a 是否为素数,若是素数,函数返回 1,否则返回 0。请编写 isprime 函数。 isprime (int a) 解: main() { int x=57; int isprime(int); if (isprime(x)) printf(“%d is prime.”,x); else printf(“%d is not prime.”,x); } { }

isprime (int a) {int i; for(i=2;i<sqrt((double)a);i++) if(a%i= =0) return 0; return 1;}

2、
19

20

输入 10 个学生的成绩,分别用函数实现: (1)求平均成绩; 解:main( ) {float average(float b[]); void sort(float b[]); float a[10],j,aver; printf("input 10:"); for(j=0;j<10;j++) scanf("%f",&a[j]); aver=average(a); printf("aver=%.2f\n",aver); sort(a); for(j=0;j<10;j++) printf("%10.2f",a[j]); } float average(float b[ ]) {int j; float sum=0,aver; for(j=0;j<10;j++) sum=sum+b[j]; aver=sum/10.0; return(aver); } void sort(float b[ ]) {int i,j,max,k; for(i=0;i<10;i++) {max=b[i]; k=i; for(j=i+1;j<10;j++) if(max<b[j]) {max=b[j]; k=j;} b[k]=b[i]; b[i]=max; } } 本程序运行结果为: input 10:45 12 86 85 79 84 85 96 45 89<cr> aver=70.60 96.00 79.00 45.00 89.00 45.00 86.00 12.00
20

(2)按分数高低进行排序并输出。

(输入) 85.00 85.00 84.00

21

第 8 章 指针 一、选择题 D A C C(D) D C D
二、填空题

1. m 2. 指针数组名 3. ABCDCD 4.49 5. 25 三、程序设计题 (1)main()
{ int a,b,c,*p1,*p2,*p3; scanf("%d,%d,%d",&a,&b,&c); p1=&a; p2=&b; p3=&c; if(*p1<*p2) max=*p1 else max=*p2; if(*p3<max) max=*p3; printf("\nmax=%d\n",max); }

程序结果:
9,0,10<回车> max=10

(2)#include<stdio.h> main() {int a[10],*p,i,t; p=a; for(i=0;i<10;i++) scanf("%d",p+i); for(i=0;i<5;i++) {t=*(p+i);*(p+i)=*(p+9-i);*(p+9-i)=t;} for(i=0;i<10;i++) printf("%5d",*(p+i)); printf("\n"); } (3)#include<stdio.h> main() { char str[80],*p,i,len=0; p=str; gets(p); for(i=0;*(p+i)!='\0';i++) len++;
21

22

printf("len=%d\n",len); }

项目实训题目: #include<stdio.h> char *link(char *p1,int M,char *p2,int N) { int i,j; for(i=0;i<M;i++) if(*(p1+i)=='\0') break; for(j=0;j<N;j++) if(*(p2+j)!='\0') *(p1+(i++))=*(p2+j); else break; *(p1+i)='\0'; return(p1); } main() { char str1[80],str2[20],*p; gets(str1); gets(str2); p=link(str1,80,str2,20); puts(p); }

第 9 章 结构体共同体和枚举类型 程序设计题 1.定义一个结构体变量来表示日期(包括年、月、日) ,并编程来计算某一日期是本 年的第几天,注意考虑闰年的问题。 解:struct { int year; int month; int day; }date; main() { int days;
22

23

printf("Please input date:(year,month,day)"); scanf("%d,%d,%d",&date.year,&date.month,&date.day); switch(date.month) { case 1:days=date.day; break; break; break; break; break; break; break; break; break; break; break; break;

case 2:days=date.day+31; case 3:days=date.day+59; case 4:days=date.day+90; case 5:days=date.day+120; case 6:days=date.day+151; case 7:days=date.day+181; case 8:days=date.day+212; case 9:days=date.day+243; case 10:days=date.day+273; case 11:days=date.day+304; case 12:days=date.day+334; }

if((date.year%4==0&&date.year%100!=0||date.year%400==0)&&date.month>= 3) days+=1; printf("\n%dmonth %dday is %d day

of %d.",date.month,date.day,days,date.year); } 本程序运行结果为: Please input date:(year,month,day)2000,3,1 3month 1day is 61 day of 2000. 2、有 10 名学生,每个学生包括学号、姓名、3 科成绩,编程序求每个学生的平均成 绩,并打印最高分学生的信息。 #define N 4 main( ) {struct student {int num; char name[15]; float c[3]; float ave; }; struct student stu[N]; struct student *p[N],*t;
23

24

int i,j,k; float x1,x2,x3; for(i=0;i<N;i++) {scanf("%d%s%f%f",&stu[i].num,stu[i].name,&x1,&x2,&x3); stu[i].c[0]=x1; stu[i].c[1]=x2; stu[i].c[2]=x3; k=0; for(j=0;j<=2;j++) k=k+stu[i].c[j]; stu[i].ave=k/3.0; p[i]=&stu[i]; } /*排序-由大到小*/ for(i=0;i<N-1;i++) for(j=i+1;j<N;j++) if(p[j]->ave<p[i]->ave) {t=p[j];p[j]=p[i];p[i]=t;} printf(“%5d%15s%3d%3d%6.1f\n”, p[0]->num,p[i]->name, p[0]->c[0], p[0]->c[1],p[0]->c[2]); } 3、建立一个 3 名学生数据的单链表。 解:#define NULL 0 #define LEN sizeof(struct student) struct student { int no; struct student *next; }; struct student *head; struct student *creat()

{ struct student *p,*q; int n,i; printf("how many:"); scanf("%d",&n); for(i=0;i<n;i++) { p=( struct student *)malloc(LEN); printf("NO:"); scanf("%d",&p->no); if(i==0) head=p; else q->next=p; q=p; }
24

25

p->next=NULL; return(head); } print (struct student * head ) { struct student *p; p=head; while(p!=NULL) { printf("%6d ",p->no); p=p->next; } } main() { struct student * head; head= creat(); print(head);

} 本程序运行结果为: how many:5<cr> NO:12<cr> NO:78<cr> NO:98<cr> NO:45<cr> NO:75<cr> 12 78 98 45 75 (以上为输入)

实训题 (1)图书馆的图书检索上包括:书名、作者姓名、出版日期、登录号、书价等内 容。试根据上述五项内容定义一个结构体类型,声明结构体变量 book,再从 键盘为变量 book 输入数据,并从屏幕输出数据。 (2)构体数组(可以使用链表) ,将 5 名考生数据输入计算机,并列表从屏幕输 出。编写函数,通过调用函数实现: a. 找出成绩最高的考生的有关信息,并在屏幕上输出。 b. 按考生准考证号码由大到小排序。 考生数据包括:准考证号码、姓名、性别、年龄、成绩。 解: (1) struct { char name[20];
25

26

char author[20]; char date[10]; int loadno; float price; }book; main() {printf("enter bookname author date loadno price:\n"); scanf("%s %s %s %d %f",&book.name,&book.author,\ &book.date,&book.loadno,&book.price); printf("bookname price:\n"); author date loadno

printf("%-10s %-10s %-10s %-6d %-6.2f",book.name,book.author,\ book.date,book.loadno,book.price); } 本程序结果是: enter bookname author date loadno price: c tanhaoqiang 1982.6 119 30.00 bookname C (2) struct student {int number; char name[10]; char sex; int age; float score; }st[5]; input_sc(s) struct student s[]; { int i,j; float h; for(i=0;i<5;i++) { printf("Please input number, sex ,age, score ,name:\n"); author date loadno 119 price: 30.00

tanhaoqiang 1982.6

scanf("%d,%c,%d,%f,%s",&s[i].number,&s[i].sex,&s[i].age,&h,s[i].name); s[i].score=h;
26

27

} } output_sc(s) struct student s[]; {int i; printf("number name sex age for(i=0;i<5;i++) { printf("%-8d",s[i].number); printf("%-4s",s[i].name); printf("%-5c",s[i].sex); printf("%-5d",s[i].age); printf("%-7f",s[i].score); printf("\n"); } } max_st(s) struct student s[]; { int i,max=0,k=0; for(i=0;i<5;i++) if(max<s[i].score) max=s[i].score; printf("max is :\n"); for(i=0;i<5;i++) if(s[i].score==max) { printf("%-8d",s[i].number); printf("%-4s",s[i].name); printf("%-5c",s[i].sex); printf("%-5d",s[i].age); printf("%-7f",s[i].score); printf("\n"); } } sort(s) struct student s[]; { int i,j,n,m; char a[10],c;
27

score:\n");

28

float t; for(i=0;i<5;i++) for(j=0;j<4;j++) if(s[j].score>s[j+1].score) {n=s[j].number; strcpy(a,s[j].name); c=s[j].sex; m=s[j].age; t=s[j].score; s[j].number=s[j+1].number; strcpy(s[j].name,s[j+1].name); s[j].sex=s[j+1].sex; s[j].age=s[j+1].age; s[j].score=s[j+1].score; s[j+1].number=n; strcpy(s[j+1].name,a); s[j+1].sex=c; s[j+1].age=m; s[j+1].score=t; } } main() { int i; struct student st[5]; clrscr(); input_sc(st); output_sc(st); max_st(st); sort(st); printf("form big to small:\n"); output_sc(st); } 本程序结果是: Please input number, sex ,age, score ,name: 1,m,23,90,li Please input number, sex ,age, score ,name: 2,n,22,89,liu Please input number, sex ,age, score ,name:
28

29

3,m,23,99,wu Please input number, sex ,age, score ,name: 4,m,22,99,guo Please input number, sex ,age, score ,name: 5,n,22,78,zhu number name sex age 1 2 3 4 5 max is : 3 4 wu m guo m 23 22 99.000000 99.000000 li m liu n wu m guo m zhu n 23 22 23 22 22 score: 90.000000 89.000000 99.000000 99.000000 78.000000

form big to small: number name sex age 5 2 1 3 4 zhu n liu n li m wu m guo m 22 22 23 23 22 score: 78.000000 89.000000 90.000000 99.000000 99.000000

(3) type test.txt<回车>

第 10 章 文件 程序设计题 1.写一个程序,建立一个 abc 文本文件,向其中写入“spring summer fall winter” 字符串,然后显示该文件的内容。 解:#include <stdio.h> #include <string.h> main( ) {FILE *fp; char msg[ ]=" spring summer fall winter "; char buf[30]; if((fp=fopen("abc.txt","w+"))==NULL) {printf("can not creat abc file\n"); exit(1); }
29

30

fwrite(msg,strlen(msg)+1,1,fp); fseek(fp,SEEK_SET,0); fread(buf,strlen(msg)+1,1,fp); printf("%s\n",buf); fclose(fp); } 2. 编写一个程序对打开文件 test.txt,统计该文件中字符的个数。 解:#include "stdio.h" #define NULL 0 void main() {FILE *fp1; int total=0; if((fp1=fopen(“test.txt”,"r"))==NULL) {printf("Cannot open test.txt.\n”); exit(1); else { while((c=fgetc(fp1))!=EOF) if(c>='0'&&c<='9') total++; printf("\nThere are %d character .\n",total); fclose(fp1); } } }

项目实训题 编写一个程序对 ASCII 文件 test.txt 中得字符做一个统计,统计该文件中字母、 数字和其他字符的个数。 输出统计结果分别到屏幕和文件 result.txt。 test.txt 文件名由命令行参数输入。例如,假设 C 源程序的可执行文 件名为 count.exe, 则命令行 count test.txt 表示对文件 test.txt 进行统计。 解:#include "stdio.h" #define NULL 0 #include "process.h" void main(int argc,char *argv[]) {FILE *fp1,*fp2; int digital,character,other; char c; digital=0;character=0;other=0; if(argc!=2)
30

31

{printf("Command error!You would enter like count test.txt!"); exit(1); } else if((fp1=fopen(argv[1],"r"))==NULL) {printf("Cannot open %s\n",argv[1]); exit(1); } else {while((c=fgetc(fp1))!=EOF) {if(c>='0'&&c<='9') digital++; else if(c>='a'&&c<='z'||c>='A'&&c<='Z') character++; else other++; }

if((fp2=fopen("result.txt","w"))==NULL) {printf("file %s open error\n","result.txt"); exit(1); } fputs("There are ",fp2); fprintf(fp2,"%d ",digital); fputs("digital ",fp2); fprintf(fp2,"%d ",character); fputs("character and ",fp2); fprintf(fp2,"%d ",other); fputs("other.\n",fp2); printf("\nThere are %d digital %d character and %d other.\n",\ digital,character,other); fclose(fp1); fclose(fp2); } } 在 DOS 下使用命令: count test.txt 屏幕显示: There are 4 digital 5 character and 4 other. result.txt 文件中显示与屏幕一致!
31


推荐相关:

c语言与程序设计-第2章课后习题参考答案

c语言程序设计-第2课后习题参考答案_理学_高等教育_教育专区。2.1 下列哪些是词法记号? 关键字(是) 注释 空白符 八进制常量(是) 三字符序列 字符串常量...


《C语言程序设计》课后习题答案(第四版)谭浩强

C语言程序设计课后习题答案(第版)谭浩强_工学_高等教育_教育专区。《C...第1 章程序设计和 C 语言 1 1.1 什么是计算机程序 1 1.2 什么是计算机...


C语言程序设计(何欣铭、颜晖_第2版)课后习题答案

C语言程序设计(何欣铭、颜晖_第2版)课后习题答案_计算机软件及应用_IT/计算机_专业资料。C语言课后答案(何欣铭、颜晖_第2版)39 修改程序,观察语法错误、逻辑错误及...


C语言程序设计(第2版)-- 课后题答案

C语言程序设计(第2版)-- 课后题答案_其它_高等教育_教育专区。《C 语言程序设计能力教程(第二版)》课后作业及实训题 参考答案第 1 章 进入 C 语言程序世界 ...


《C语言程序设计》课后习题答案(第四版)

C语言程序设计课后习题答案(第版)_理学_高等教育_教育专区。课后答案 第1 章程序设计和 C 语言 1 1.1 什么是计算机程序 1 1.2 什么是计算机语言 1 ...


《C语言程序设计》第2版 第十章课后习题参考答案_免费...

C语言程序设计第2版 第十章课后习题参考答案 向艳主编向艳主编隐藏>> 一、填空题 1)p->next->next=q; 2)p->next=q; 3)40 4)!=‘\n’ p=top...


谭浩强--C语言程序设计(第二版)习题答案

谭浩强--C语言程序设计(第二版)习题答案_IT/计算机_专业资料。C 语言程序设计(第 2 版)课后习题答案第一章 1.请参照本章例题,编写一个 C 程序,输出以下信息...


C语言程序设计(第二版)习题参考答案1

C语言程序设计(第二版)习题参考答案1_初一数学_数学_初中教育_教育专区。C 语言程序设计习题参考答案习 题 1 一、判断题 1.在计算机中,小数点和正负号都有...


数据结构(C语言版)(第2版)课后习题答案

数据结构(C语言版)(第2版)课后习题答案_计算机软件及应用_IT/计算机_专业资料...所以链式存储结构通常借助于程序设计语言的指针类型来描述。 5 .选择题 ( 1 )...


C语言程序设计教程(第2版)课后习题答[1]

C语言程序设计教程(第2版)课后习题答[1]_理学_高等教育_教育专区。nk第一章 C 语言程序设计概述 -习题答案 1 算法的描述有哪些基本方法? 答 1、自然语言 2...

网站首页 | 网站地图
All rights reserved Powered by 学霸学习网 www.tceic.com
copyright ©right 2010-2021。
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@126.com