C语言程序设计(第四版)谭浩强版 课后答案 第七章 函数
1、辗转相除法
#include<stdio.h> int commond(int a,int b){ int i; while(b!=0){ i = a%b; a=b; b=i; } printf("%d\n",a); } int commonm(int a,int b){ int i; int y=b,x=a; while(b!=0){ i = a%b; a=b; b=i; } printf("%d\n",x*y/a); } int main(){ int a,b; printf("please input two menbers:"); scanf("%d%d",&a,&b); commond(a,b); commonm(a,b); return 0; }
2、求方程根
#include<stdio.h> #include<math.h> double positive(double a,double b,double c){ double x1,x2; x1 = (-b+sqrt(b*b-4*a*c))/2; x2 = (-b-sqrt(b*b-4*a*c))/2; printf("the equation's roots are:%f %f\n",x1,x2); } double negative(double a,double b,double c){ double x1,y1,n; n = fabs(b*b-4*a*c); y1 = sqrt(n)/(2*a); x1 = -b/(a*2); printf("the equation's roots are:%fi+%f,",y1,x1); printf("%lfi-%lf\n",y1,x1); } double zero(double a,double b,double c) { printf(" the equation's roots are:%f %f\n",(-b)/2*a,b/(a*2)); } int main(){ double a,b,c,d; scanf("%lf%lf%lf",&a,&b,&c); d = b*b-4*a*c; if(d>0){ positive(a,b,c); } else if (d<0) { negative(a,b,c); } else zero(a,b,c); return 0; }
3、如何定义函数的返回,一开始并不想用int型,而是用void,但是不知道if执行怎么结束返回,所有用了int型,直接return 0。如果用void可以用exit(0)让程序结束退出
#include<stdio.h> int isprime(int a){ int i; for(i=2;i<a;i++){ if(a%i==0){ printf("it's not a prime number!\n"); return 0; } } printf("this number is a prime number\n"); return 0; } int main(){ int i; printf("please input a number:"); scanf("%d",&i); isprime(i); return 0; }
4、3*3数组转置
#include<stdio.h> void T(int array[][3]){ int i,j,t; for(i=0;i<3;i++){ for(j=i;j<3;j++){ t=array[i][j]; array[i][j]=array[j][i]; array[j][i]=t; } } for(i=0;i<3;i++){ for(j=0;j<3;j++){ printf("%d ",array[i][j]); } printf("\n"); } } int main(){ void T(int array[][3]); int a[3][3]; int i,j; printf("please input numbers:"); for(i=0;i<3;i++){ for(j=0;j<3;j++){ scanf("%d",&a[i][j]); } } for(i=0;i<3;i++){ for(j=0;j<3;j++){ printf("%d ",a[i][j]); } printf("\n"); } T(a); return 0; }
5、无返回类型
#include<stdio.h> #include<string.h> void anti(char b[20]){ int l,i,j,t; l = strlen(b); for(i=0,j=l-1;i<l/2;i++){ t=b[i]; b[i]=b[j]; b[j]=t; j--; } puts(b); } int main(){ void anti(char b[20]); char a[20]; printf("please input string:"); scanf("%s",a); anti(a); return 0; }
返回指针类型
#include<stdio.h> #include<string.h> char* anti(char b[20]){ int l,i,j,t; l = strlen(b); for(i=0,j=l-1;i<l/2;i++){ t=b[i]; b[i]=b[j]; b[j]=t; j--; } return b; } int main(){ char* anti(char b[20]); char *b; char a[20]; printf("please input string:"); scanf("%s",a); b=anti(a); puts(b); return 0; }
6、连接字符串
#include<stdio.h> #include<string.h> int main(){ char *linkstring(char array1[20],char array2[20] ); char a[40],b[20]; char *c; printf("please input first string:"); gets(a); printf("please input second string:"); gets(b); c=linkstring(a,b); puts(c); return 0; } char *linkstring(char array1[20],char array2[20]){ int i = 0,n=0; while(array1[n]!='\0'){ n++; } while(array2[i]!='\0'){ array1[n+i]=array2[i]; i++; } array1[n+i]='\0'; return array1; }
7、
#include<stdio.h> int main(){ char *funda(char a[30]); char a[30]; char *c; printf("please input a string:"); gets(a); //funda(a); c= funda(a); puts(c); return 0; } char *funda(char a[30]){ static char b[30]; int i=0,j=0; while(a[i]!='\0'){ if(a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u'){ b[j]=a[i]; j++; } i++; } b[j]='\0'; // puts(b); return b; }
8、输入四个数,每两个数之间有空格
#include<stdio.h> int main(){ char *addblank(char a[10]); char a[10]; char *p; printf("please input four numbers:"); gets(a); p = addblank(a); puts(p); return 0; } char *addblank(char a[20]){ int i =0,j,count=3; for(i=3;i>0;i--){ a[2*i]=a[i]; a[2*i-1]=' '; } a[7]='\0'; return a; }
9、输出字符串中,各种符号的个数。
int c = 0; int o = 0; while(array[i]!='\0'){ if(array[i]>='A'&&array[i]<='z') a++; else if((int)array[i]==32) b++; else if (array[i]>='0'&&array[i]<='9') c++; else o++; i++; } printf("The number of letter is:%d\n",a); printf("The number of blank is:%d\n",b); printf("The number of figure is:%d\n",c); printf("The number of other is:%d\n",o); } int main(){ char a[20]; gets(a); every(a); return 0; }
10、一串字符串,找最大的单词
<stdio.h> #include<string.h> int main(){ void longstr(char a[30]); char a[30]; printf("please input some words:"); fgets(a,30,stdin); longstr(a); return 0; } void longstr(char a[30]){ int len = strlen(a); int i,start=0,end=0,maxlen=0; int x=0,y; for(i=0;i<len+1;i++){ if(a[i]==' '||a[i]=='\0'){ y=i-1; if((y-x)>maxlen){ maxlen=y-x +1; start =x; end=y; } x=i+1; } } for(int i=start;i<=end;i++){ printf("%c",a[i]); } }
11、冒泡算法
#include<stdio.h> int main(){ void bubble(char a[11]); char a[11]; for(int i=0;i<10;i++){ scanf("%c",&a[i]); } bubble(a); return 0; } void bubble(char a[11]){ int i=0,j=0; char max,t; for(i=0;i<9;i++){ for(j=0;j<9-i;j++){ if(a[j]>a[j+1]){ t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } fputs(a,stdout); printf("\n"); }
12、牛顿二分法
#include<stdio.h> #include<math.h> int main(){ void equtionroot(int,int,int,int); int a,b,c,d; scanf("%d%d%d%d",&a,&b,&c,&d); equtionroot(a,b,c,d); return 0; } void equtionroot(int a,int b,int c,int d){ float x,x1=1; while(fabs(x1-x)>=pow(10,-5)){ x=x1; x1= x-(a*x*x*x+b*x*x+c*x+d)/(a*3*x*x+2*b*x+c); printf("x1=%f\n",x1); } }
13、求勒让德多项式
#include<stdio.h> int main(){ float legend(int,int); int n,x; float p; scanf("%d%d",&n,&x); p = legend(n,x); printf("%f\n",p); } float legend(int a,int b){ float p; if(a==0) p=1; else if(a==1) p=b; else{ p = ((2*a-1)*b -legend(a-1,b)-(a-1)*legend(a-2,b))/a; } return p; }
14、求各种学生成绩平均值
#include<stdio.h> void Savarage(int a[][5]){ int i; float ave; for(i=0;i<10;i++){ ave = (float)(a[i][0]+a[i][1]+a[i][2]+a[i][3]+a[i][4])/5; printf("第%d位的平均成绩为:%f\n",i+1,ave); } } void Caverage(int a[][5]){ int i,j,sum=0; float ave; for(i=0;i<5;i++){ for(j=0;j<10;j++){ sum+=a[j][i]; } ave = (float)sum/10; printf("第%d门课的平均成绩为:%f\n",i+1,ave); } } void high(int a[][5]){ int i,j,max,x,y; max=a[0][0]; for(i=0;i<10;i++){ for(j=0;j<10;j++){ if(max<a[i][j]){ max=a[i][j]; x=i+1; y=j+1; } } } printf("the most high score is%d,student is %d , class is %d\n",max,x,y); } float sum1(float b[10]){ float a=0; for(int i=0;i<10;i++){ a+=b[i]*b[i]; } return a; } float sum2(float b[10]){ float a=0; for(int i=0;i<10;i++){ a+=b[i]; } return a; } void variance(int a[][5]){ int i; float b[10]; float ave,var; for(i=0;i<10;i++){ ave = (float)(a[i][0]+a[i][1]+a[i][2]+a[i][3]+a[i][4])/5; b[i]=ave; } var=sum1(b)/10-pow(sum2(b)/10,2); printf("the variance is %f",var); } int main(){ int a[10][5]; int i,j; for(i=0;i<10;i++){ for(j=0;j<5;j++){ scanf("%d",&a[i][j]); } } Saverage(a); Caverage(a); high(a); variance(a); return 0; }
15、
16、16进制转10进制,先把所有的字母换成数字大小,依次16*+。
#include<stdio.h> #include<string.h> void conversion(char str[]) { int i = 0, j=0,num = 0, sum = 0,len=0; //int len = strlen(str);//这种方法会将非16进制数记录在内 while ((str[i] >= 'a' && str[i] <= 'f') || (str[i] >= 'A' && str[i] <= 'F') || (str[i] >= '0' && str[i] <= '9')) { len++; i++; } i = 0; while (str[i] != '\0') { //字符转数字 if (str[i] >= '0' && str[i] <= '9') num = str[i] - '0'; else if (str[i] >= 'a' && str[i] <= 'f') num = str[i] - 'a' + 10; else if (str[i] >= 'A' && str[i] <= 'F') num = str[i] - 'A' + 10; else break;//遇到'\0'之前的第一个非十六进制数就停止循环 for (j = 0; j < len - 1; j++) { num = num * 16; } sum += num; i++; len--;//每读取一位就使长度-1 } printf("%d\n", sum); } int main(){ char a[10]; fgets(a,10,stdin); conversion(a); return 0; }
17、将一个整数n转换成字符串,数字怎么换成字符?
#include<stdio.h> #include<math.h> void trans(int a){ char b[10]; char t; int i=0,j,n; if(a<10) { b[i]=(48+a); b[i+1]='\0'; } else{ while(a%10!=0){ b[i]=(48+(a%10)); a = a/10; i++; } if((a/pow(10,i))!=0) b[i]=(48+a/pow(10,i)); b[i+1]='\0'; } n=i; for(j=0;j<(i+1)/2;j++){ t=b[j]; b[j]=b[n]; b[n]=t; n--; } puts(b); } int main(){ int a; scanf("%d",&a); trans(a); return 0; }
18、给出年月日判断该日是该年的第几天
#include<stdio.h> int main() { int count(int y, int m, int d); int year, month, day, i; printf("请输入年,月,日:"); scanf_s("%d,%d,%d", &year, &month, &day); i = count(year, month, day); printf("是这一年的第%d天", i); return 0; } int count(int y, int m, int d) { int i = 0,j=0,n; int a[12] = { 0,31,28,31,30,31,30,31,31,30,31,30 }; for (n = 0; j < m; j++) { n = n + a[j]; } i = n + d; if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) { if (m > 2) i = i + 1; } return (i); }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)