1、课后编程题部分答案,第一章,(1)仿例1-2编写一C程序,输入2个数整数,输出它们的和、积。,#include main() int a, b, s;float t;scanf(“%d%d“, ,第一章,(2)编写程序打印输入如下形式的信息*You Are Good! *,#include main() printf(“*n“);printf(“ You Are Good! n“);printf(“*n“); ,第二章,1. 编一个程序,输入一个三位数据,在窗体打印输出其个位数,10位数和100数。,void main() int x,a,b,c;scanf(“%d“, ,第二章,2.编写程序
2、,从键盘上输入两个无符号整数,求它们按位求与、或和异或的值,输出其结果。,void main() int x,y;scanf(“%u%u“, ,第二章,3. 编写程序,从键盘输入梯形的上下底边长度和高,计算梯形的面积。,void main() int a,b,h;float s;scanf(“%d%d%d“, ,第三章,(1)编写程序,从键盘上输入两个电阻的值,求它们并联和串联的电阻值,输出结果保留两位小数。,void main() float r1,r2,rs,rp;scanf(“%f%f“, ,第三章,(2)编一个华氏温度与摄氏温度之间的转换程序,转公式如下:摄氏温度转换为华氏温度,F为华
3、氏度。,void main() float c,f;scanf(“%f“, ,第三章,(3)编一个程序,从键盘输入学生的三门课成绩,求其总成绩及平均成绩。,#include “stdio.h“ main() float a1,a2,a3,ave;scanf(“%f%f%f“, ,第四章,输入一公元年号,判断是否是闰年。闰年的条件是:年号能被4整除但不能被100整除,或者能被400整除。,void main() int y;scanf(“%d“, ,第四章,(2)输入三个数据,如果这三个数据能够构成三角形,计算并输出三角形的面积。,#include void main() float a,b,c
4、,x,s;scanf(“%f%f%f“, ,第四章,(3)编制一个就算个人所得税的程序。,void main() float salary, tax;int ntax;printf(“nPlease enter a salary=“);scanf(“%f“,case 3:case 4:tax=500*0.05+(salary-1500)*0.1;break; case 5:case 6:tax=500*0.05+1000*0.1+(salary-2500)*0.15;break; case 7:case 8:case 9:tax=500*0.05+1000*0.1+1000*0.15+(sal
5、ary-3500)*0.20;break;case 10: tax=500*0.05+1000*0.1+1000*0.15+1500*0.20+(salary-5000)*0.30;printf(“nThe tax=%10.2fn“,tax); ,第四章,#include main() int i=1;float t= -1, s=0;dot= -t/i;s=s+t;i=i+1;while(fabs(t)1e-6);printf(“s=%fn“, s); ,第四章,(4)编程计算多项式的和,精度为0.000001。,void main() int i, a, b, c;for(i=100; i
6、=999; 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); ,第四章,(5)编程显示所有的水仙花数。,main() int i, j;for(i=1; i=1; i-) for(j=1; j=6-i; j+) putchar( );for(j=1; j=i*2-1; j+) printf(“%c“, 65+i-1);printf(“n“); ,第四章,(6)打印由数字组成的金字塔图案。,#include main() int a, b, c;for(a=0; a=20; a+)for(b=0; b=3
7、3; b+)c=100-a-b;if(a*5+b*3+c/3.0=100)printf(“%d, %d, %dn“, a, b, c); ,第四章,(7)编程解决百钱百鸡问题。,#include main() float x, x0, a;scanf(“%f“, ,第四章,(8)迭代法求a的立方根。,#include #include main() float pi, pi0; int i=1; pi=2;dopi0=pi;pi=pi*(2.0*i/(2.0*i-1)*(2.0*i/(2.0*i+1);i=i+1;while(fabs(pi-pi0)1e-6);printf(“pi=%fn“,
8、 pi); ,第四章,(9)计算的近似值。,#include “stdio.h“ main() int i,j,sum;for(i=6;i=1000;i+)sum=0;for(j=1;j=i-1;j+)if(i%j=0) sum+=j;if (sum=i) printf(“%d “,i); ,第四章,(10)打印输出61000之间的所有合数。,#include “stdio.h“ #include “math.h“ main() int x,y,z;for(x=-sqrt(2000);x=sqrt(2000);x+)for(y=-sqrt(2000);y=sqrt(2000);y+)for(z
9、=-sqrt(2000);z=sqrt(2000);z+)if(x*x+y*y+z*z=2000) printf(“x=%d,y=%d,z=%dn“,x,y,z); ,第四章,(11)编程求方程x2+y2+z2=2000的所有整数解。,main() int i, j, t, n, a11=0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;for(i=0;i=0;j-) aj+1=aj;a0=t;for(i=0; i=10; i+) printf(“%d “, ai); ,第五章,(2)编程将一维数组中的元素向右循环移位N次。,#include main() int a100,
10、b100, i, j, p, count=0,n=0,t;while(count=10 ,第五章,(3)使用随机函数random产生100个2位整数放入数组a,将其中的偶数放入数组b,然后运用选择法将数组b升序排列,输出。,for(i=0; in-1; i+) p=i;for(j=i+1; jn; j+)if(bjbp) p=j;t=bp; bp=bi; bi=t;for(i=0; in; i+)printf(“%d “, bi);if(i%10=9) printf(“n“); ,第五章,#include main() int a50, count=0,t,i,n=0 ; a0=random(
11、99);while(countcount) a+count=t; for(i=0; i50; i+) printf(“%2d “, ai);if(i%10=9) printf(“n“); ,第五章,(4)使用随机函数random产生50个0-100互不相等的整数,并以一行10个数据的形式输出。,void main() int i,j,sum,a104,max,p;for(i=0;imax) p=i;printf(“No.%d Total score:%dn“,p+1,ap3); ,第五章,(6)输入10个学生的学号和三门课成绩,统计并输出三门课总分最高的学生的学号和总分。,#include v
12、oid main() char st15,str2015; int i,j,p;for(i=0;i20;i+) gets(stri);for(i=0;i20-1;i+) /* 选择法排序 */ p=i;for(j=i+1;j20;j+) if(strcmp(strj,strp)0) p=j;if(p!=i) strcpy(st,stri); strcpy(stri,strp); strcpy(strp,st); for(i=0;i20;i+) printf(“%sn“,stri); ,第五章,(9)输入20个英文单词,存入到数组str2015中,将它们按升序打印出来。,#include mai
13、n() int a10, b10, t;int n=0, m=0, i, j, f;printf(“Input Array a, end with 1:“);scanf(“%d“, ,第五章,(10)输入两个数组,每个数组不超过10个元素。,for(i=0; in; i+) /* 打印只在数组a中出现的元素 */f=1;for(j=0; jm; j+)if(ai=bj) f=0; break;if(f) printf(“%d“, ai);for(i=0; im; i+) /* 打印只在数组b中出现的元素 */f=1;for(j=0; jn; j+)if(bi=aj) f=0; break;if
14、(f) printf(“%d“, bi); ,第五章,#include main() char str81;int i=-1;printf(“Input:“);scanf(“%s“, str);while(+i80 ,第五章,(11)输入一行不超过80个字符串,将所有的字符$改作S。,#include void main() char x80,y26; int i,j,ny=0;gets(x);for(i=0;xi!=0;i+)if(xi=A,第五章,(12)输入一行不超过80个字符串,输出所有出现过的大写英文字符。,#include #include #include void main()
15、 char s80; int i=0; gets(s);while(si!=0)if(isdigit(si) strcpy (s+i,s+i+1); else i+; puts(s); ,第五章,(14)输入一行字符串,将其中所有的数字字符删除。,void main() char st80,ss20,sp20,*a=st,*b=ss,*t=sp;int i,n,m,p=-1; gets(a);gets(b);n=strlen(a); m=strlen(b);for(i=0;i=n-m+1;i+) a=st+i;strncpy(t,a,m); /*将字符指针a指向的字符串取前m个字符复制到t所指
16、的字符串中*/if(strcmp(b,t)=0) p=i; break;if(p=-1) printf(“%d“,p);else printf(“%d“,p+1); /*因数组下标从0开始,所以输出p+1*/ ,第五章,(16)输入一行字符串,将其中所有的数字字符删除。,float fe (int n, float x) float e,t; int i; e=1; t=1;for(i=1;i=n;i+) t=t*x/i;e=e+t; return(e); void main() int n;float x;scanf(“%d%f“, ,第五章,(2)求表达式的值。,void fun(int
17、*a,int n,int y) int i,p=0;while(yap ,第五章,(5)编写函数void fun(int *a,int n,int y)。,int fun(int s,int n) int i,sum=0,count=0,aver;for(i=0; iaver) count+;return count; void main() int a50; int x,p,i=0;do scanf(“%d“, ,第五章,(6)编写函数int fun(float s,int n)。,int gcd(int m,int n) if (m%n=0) return n;else return gc
18、d(n,m%n); void main() int x,y,t; if(xy) t=x; x=y; y=t;scanf(“%d,%d“, ,第五章,(7)编写递归函数计算两个整数的最大公约数。,#define PI 3.14159 #define V(r) 3.0/4*PI*r*r*r void main() float r1;scanf(“%f“, ,第六章,(1)编写一个计算球体积的带参数的宏。,#define INPUTARRAY(a, n) for(i=0;in;i+)scanf(“%d“, ,第六章,(2)编写一个程序,用宏INPUTARRAY(a,n)输入数组元素,用宏SUMARR
19、AY(a,n,sum)计算数组元素之和。最后在程序中打印。,void main() int a,b,c,*p1,*p2,*p3,*t;scanf(“%d,%d,%d“, ,第七章,(1)使用指针法,实现输入三个整数,按由小到大的顺序输出。,#define STUDENT 4 #define COURSE 5 float ave_stu(float (*p)COURSE,int n);/*计算第n个学生的平均成绩*/ float ave_cou(float (*p)COURSE,int n); /*计算第n门课程的平均成绩*/ float ave_tot(float *p,int n); /*计
20、算n个分数的总平均成绩*/ void search(float (*p)COURSE,int n); /*输出有2门及以上课程不及格学生的成绩*/ main() float scoreSTUDENTCOURSE; int i,j;printf(“nInput scores:n“);for(i=0;iSTUDENT;i+)for(j=0;jCOURSE;j+)scanf(“%f“,第七章,(4)编写一个成绩管理程序来处理4个学生、5门课程的成绩。,for(i=0;iSTUDENT;i+) printf(“%3d “,i+1);for(j=0;jCOURSE;j+) printf(“%4.1f “
21、,scoreij);printf(“n“);printf(“nAverage score of student:n“);for(i=0;iSTUDENT;i+) printf(“NO.%d %4.1fn“,i+1,ave_stu(score,i);printf(“nAverage score of course:n“);for(j=0;jCOURSE;j+) printf(“C%d %4.1fn“,j+1,ave_cou(score,j);printf(“nAverage score of total:%4.1fn“,ave_tot(*score,STUDENT*COURSE);search(
22、score,STUDENT); ,第七章,第七章,float ave_stu(float (*p)COURSE,int n) float s; int i;s=0;for(i=0;iCOURSE;i+) s+=*(*(p+n)+i);s=s/COURSE;return(s); float ave_cou(float (*p)COURSE,int n) int i; float s; s=0;for(i=0;iSTUDENT;i+) s+=*(*(p+i)+n);s=s/STUDENT;return(s); ,float ave_tot(float *p,int n) float s; int
23、i;for(i=0;i=2) printf(“%3d “,i+1);for(j=0;jCOURSE;j+) printf(“%4.1f “,*(*(p+i)+j);printf(“n“); ,第七章,第七章,#include #include #define MAX 100 main() char *s,*t; int c;s=(char *)malloc(MAX*sizeof(char);gets(s);t=s; c=0;while(*t!=0) if(*t=$)c+;t+; printf(“nThere are %d $ in “%s“n“,c,s); getch(); ,(5)输入一行文
24、本,统计其中$字符出现的次数。,第七章,#include #include void del_char(char *a,char ch) while(*a!=ch) a+;strcpy(a,a+1); main() char *s,del; del=getchar();gets(s);del_char(s,del);puts(s); ,(8)编制函数,删除字符串中指定的字符。,第八章,(1)编制程序,处理学生信息。,#include #include #define N 10 struct student long num;char name10;float score3;float ave;
25、 ;,第八章,main() void input(struct student s,int n); /*输入n个学生数据*/float average(struct student s,int n);/*计算第n个学生的平均成绩*/ int max(struct student s,int n); /*计算学生中哪个的平均成绩最高*/struct student sN; int i,m;float a=0; /*总平均成绩*/input(s,N);for(i=0;iN;i+) si.ave=average(s,i); a=a+si.ave; a=a/N;printf(“Number Name
26、Score-1 Score-2 Score-3 Averagen“);,第八章,for(i=0;iN;i+) printf(“%ld%10s%f%f%f%fn“,si.num,si.name,si.score0,si.score1,si.score2,si.ave);printf(“The total average score is %fn“,a);m=max(s,N);printf(“The max score student:n“);printf(“Number:%ldnName:%snScore 1:%fnScore 2:%fnScore 3:%fnAverage Score:%fn“
27、,sm.num,sm.name,sm.score0,sm.score1,sm.score2,sm.ave); ,第八章,void input(struct student s,int n) int i;for(i=0;in;i+) printf(“Please input student number:“);scanf(“%ld“, ,第八章,float average(struct student s,int n) int i;float a=0;for(i=0;ism.ave)m=i;return(m); ,第八章,(2)建立一个含有n个学生记录(包括学号、姓名、性别、年龄)的单向链表,然
28、后将各结点的数据打印输出。,#define NULL 0 #define LEN sizeof(struct student) struct student long num;char name10;char sex; /*F表示女,M表示男*/int age;struct student *next; ,第八章,main() struct student *creat(int n);void print(struct student *head);struct student *delete(struct student *head,int age);struct student *head
29、;int n,age;printf(“nPlease input the length of list:“);scanf(“%d“, ,struct student *creat(int n) struct student *head,*p1,*p2; int i; head=NULL;for(i=1;inum);printf(“Name:“); scanf(“%s“,p1-name);printf(“Sex:“); scanf(“%c“, ,第八章,void print(struct student *head) struct student *p;p=head;printf(“Number Name Sex Agen“);while(p!=NULL)printf(“%ld%10s%c%d“,p-num,p-name,p-sex,p-age);p=p-next; ,第八章,struct student *delete(struct student *head,int age) struct student *p1,*p2; p1=head;while(p1!=NULL)if(p1-age=age)if(p1=head) head=p1-next;else p2-next=p1-next;free(p1);p2=p1; p1=p1-next;return(head); ,第八章,