1、第七章 函数调用 7-1 写两个函数,分别求两个整数的最大公约数和最小公倍数, #include void main() int hcf(int,int); int lcd(int,int,int); int u,v,h,l; scanf(“%d,%d“, h=hcf(u,v); printf(“H.C.F=%dn“,h); l=lcd(u,v,h); printf(“L.C.D=%dn“,l); int hcf(int u,int v) int t,r; if (vu) t=u; u=v; v=t; while (r=u%v)!=0) u=v; v=r; return(v); int lcd
2、(int u,int v,int h) return(u*v/h); 7-2 求方程 ax*x+bx+c=0 的根,用 3 个函数分别求当 b*b-4ac 大于 0,等于 0、小于 0 时的根并输出结果。从主函数输入 abc 的值。 #include #include float x1,x2,disc,p,q; void main() void greater_than_zero(float,float); void equal_to_zero(float,float); void smaller_than_zero(float,float); float a,b,c; printf(“inp
3、ut a,b,c:“); scanf(“%f,%f,%f“, printf(“equation: %5.2f*x*x+%5.2f*x+%5.2f=0n“,a,b,c); disc=b*b-4*a*c; printf(“root:n“); if (disc0) greater_than_zero(a,b); printf(“x1=%fttx2=%fn“,x1,x2); else if (disc=0) equal_to_zero(a,b); printf(“x1=%fttx2=%fn“,x1,x2); else smaller_than_zero(a,b); printf(“x1=%f+%fit
4、x2=%f-%fin“,p,q,p,q); void greater_than_zero(float a,float b) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); void equal_to_zero(float a,float b) x1=x2=(-b)/(2*a); void smaller_than_zero(float a,float b) p=-b/(2*a); q=sqrt(-disc)/(2*a); 7-3 写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。 #include void main() int
5、 prime(int); int n; printf(“ninput an integer:“); scanf(“%d“, if (prime(n) printf(“n %d is a prime.n“,n); else printf(“n %d is not a prime.n“,n); int prime(int n) int flag=1,i; for (i=2;i*p2) swap(p1,p2); if(*p1*p3) swap(p1,p3); if(*p2*p3) swap(p2,p3); printf(“%d,%d,%dn“,a,b,c); void swap(int*p1,int
6、*p2) int p; p=*p1;*p1=*p2;*p2=p; 8-2 输入 3 个整数按有小到大的顺序输出。 #include #include void main() void swap(char *,char *); char str120,str220,str320; printf(“input three line:n“); gets(str1); gets(str2); gets(str3); if(strcmp(str1,str2)0) swap(str1,str2); if(strcmp(str1,str3)0) swap(str1,str3); if(strcmp(str2
7、,str3)0) swap(str2,str3); printf(“Now,the order is:n“); printf(“%sn%sn%sn“,str1,str2,str3); void swap(char *p1,char *p2) char p20; strcpy(p,p1); strcpy(p1,p2); strcpy(p2,p); 8-3 输入 10 个整数,将其中最小的数与第一个数对换,把最大的数与最后一 个数对换。写 3 个函数:1 输入 10 个数;2 进行处理;3 输出 10 个数 #include void main() void input(int *); void
8、max_min_value(int *); void output(int *); int number10; input(number); max_min_value(number); output(number); void input(int *number) int i; printf(“input 10 numbers:“); for (i=0;i10;i+) scanf(“%d“, void max_min_value(int *number) int *max,*min,*p,temp; max=min=number; for (p=number+1;p*max) max=p;
9、else if (*p*min) min=p; temp=number0; number0=*min; *min=temp; if(max=number) max=min; temp=number9; number9=*max; *max=temp; void output(int *number) int *p; printf(“Now,they are: “); for (p=number;pnumber+10;p+) printf(“%d “,*p); printf(“n“); 8-7 有一个字符窜,包含 n 个字符。写一个函数,将此字符窜中从 m 个字符 开始的全部字符复制成为另一个字
10、符窜。 #include #include void main() void copystr(char *,char *,int); int m; char str120,str220; printf(“input string:“); gets(str1); printf(“which character that begin to copy?“); scanf(“%d“, if (strlen(str1)m) printf(“input error!“); else copystr(str1,str2,m); printf(“result:%sn“,str2); void copystr(
11、char *p1,char *p2,int m) int n; n=0; while (nm-1) n+; p1+; while (*p1!=0) *p2=*p1; p1+; p2+; *p2=0; 8-9 写一个函数,使给定的一个 3x3 的二维整形数组转置,即行列转换。 #include void main() void move(int *pointer); int a33,*p,i; printf(“input matrix:n“); for (i=0;i3;i+) scanf(“%d %d %d“, p= move(p); printf(“Now,matrix:n“); for (i
12、=0;i3;i+) printf(“%d %d %dn“,ai0,ai1,ai2); void move(int *pointer) int i,j,t; for (i=0;i3;i+) for (j=i;j3;j+) t=*(pointer+3*i+j); *(pointer+3*i+j)=*(pointer+3*j+i); *(pointer+3*j+i)=t; 8-13 将 n 个数按输入顺序的逆序排列,用函数实现。 #include void main() void sort (char *p,int m); int i,n; char *p,num20; printf(“input
13、n:“); scanf(“%d“, printf(“please input these numbers:n“); for (i=0;in;i+) scanf(“%d“, p= sort(p,n); printf(“Now,the sequence is:n“); for (i=0;in;i+) printf(“%d “,numi); printf(“n“); void sort (char *p,int m) int i; char temp, *p1,*p2; for (i=0;im/2;i+) p1=p+i; p2=p+(m-1-i); temp=*p1; *p1=*p2; *p2=te
14、mp; 第九章 用户建立的数据类型 9-1 定义一个结构体变量(包扩年、月、日) 。计算该日在本年中的第几天, 注意闰年问题。 #include struct int year; int month; int day; date; void main() int days; printf(“input year,month,day:“); scanf(“%d,%d,%d“, switch(date.month) case 1: days=date.day; break; case 2: days=date.day+31; break; case 3: days=date.day+59; bre
15、ak; case 4: days=date.day+90; break; case 5: days=date.day+120; break; case 6: days=date.day+151; break; case 7: days=date.day+181; break; case 8: days=date.day+212; break; case 9: days=date.day+243; break; case 10: days=date.day+273; break; case 11: days=date.day+304; break; case 12: days=date.day+
16、334; break; if (date.year %4= 0 printf(“%d/%d is the %dth day in %d.n“,date.month,date.day,days,date.year); 9-2 写一个函数 days,实现第一题的计算,由主函数将年、月、日传递给 days 函数,计算后将日子数传回主函数输出。 clude struct int year; int month; int day; date; void main() int i,days; int day_tab13=0,31,28,31,30,31,30,31,31,30,31,30,31; prin
17、tf(“input year,month,day:“); scanf(“%d,%d,%d“, days=0; for(i=1;i=3) days=days+1; printf(“%d/%d is the %dth day in %d.n“,date.month,date.day,days,date.year); 9-3 编写一个函数 print,打印一个学生的成绩数组,该数组中有 5 个学生的 数据记录,每个记录包括 num.name,score3,用主函数输入这些记录,用 print 函数输出这些记录。 #include #define N 5 struct student char num
18、6; char name8; int score4; stuN; void main() void print(struct student stu6); int i,j; for (i=0;iN;i+) printf(“ninput score of student %d:n“,i+1); printf(“NO.: “); scanf(“%s“,stui.num); printf(“name: “); scanf(“%s“,stui.name); for (j=0;j3;j+) printf(“score %d:“,j+1); scanf(“%d“, printf(“n“); print(s
19、tu); void print(struct student stu6) int i,j; printf(“n NO. name score1 score2 score3n“); for (i=0;iN;i+) printf(“%5s%10s“,stui.num,stui.name); for (j=0;j3;j+) printf(“%9d“,stui.scorej); printf(“n“); 9-4 在第 3 题的基础上,编写一个函数 input,用来输入 5 个学生的数据记录。 #include #define N 5 struct student char num6; char nam
20、e8; int score4; stuN; void main() void input(struct student stu); void print(struct student stu); input(stu); print(stu); void input(struct student stu) int i,j; for (i=0;iN;i+) printf(“input scores of student %d:n“,i+1); printf(“NO.: “); scanf(“%s“,stui.num); printf(“name: “); scanf(“%s“,stui.name)
21、; for (j=0;j3;j+) printf(“score %d:“,j+1); scanf(“%d“, printf(“n“); void print(struct student stu6) int i,j; printf(“n NO. name score1 score2 score3n“); for (i=0;iN;i+) printf(“%5s%10s“,stui.num,stui.name); for (j=0;j3;j+) printf(“%9d“,stui.scorej); printf(“n“); 9-5 有 10 个学生,每个学生的数据包括学号、姓名、3 门课程的成绩,
22、从键 盘输入 10 个学生数据,要求输出 3 门课程总成绩,以及最高分的学生数 据(包括学号、姓名、3 门课程成绩、平均分数) #include #define N 10 struct student char num6; char name8; float score3; float avr; stuN; void main() int i,j,maxi; float sum,max,average; for (i=0;iN;i+) printf(“input scores of student %d:n“,i+1); printf(“NO.:“); scanf(“%s“,stui.num)
23、; printf(“name:“); scanf(“%s“,stui.name); for (j=0;j3;j+) printf(“score %d:“,j+1); scanf(“%f“, average=0; max=0; maxi=0; for (i=0;iN;i+) sum=0; for (j=0;jmax) max=sum; maxi=i; average/=N; printf(“ NO. name score1 score2 score3 averagen“); for (i=0;iN;i+) printf(“%5s%10s“,stui.num,stui.name); for (j=0;j3;j+) printf(“%9.2f“,stui.scorej); printf(“ %8.2fn“,stui.avr); printf(“average=%5.2fn“,average); printf(“The highest score is : student %s,%sn“,stumaxi.num,stumaxi.name); printf(“his scores are:%6.2f,%6.2f,%6.2f,average:%5.2f.n“, stumaxi.score0,stumaxi.score1,stumaxi.score2,stumaxi.avr);