第七章 函数
7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。 maxyueshu(m,n) int m,n; { int i=1,t;
for(;i<=m&&i<=n;i++) {if(m%i==0&&n%i==0) t=i; }
return(t); }
minbeishu(m,n) int m,n; {int j;
if(m>=n) j=m; else j=n;
for(;!(j%m==0&&j%n==0);j++); return j; }
main()
{int a,b,max,min;
printf(\ scanf(\ max=maxyueshu(a,b); min=minbeishu(a,b);
printf(\ }
7.2求方程 的根,用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。 #include\ float yishigen(m,n,k) float m,n,k; {float x1,x2;
x1=(-n+sqrt(k))/(2*m); x2=(-n-sqrt(k))/(2*m);
printf(\ }
float denggen(m,n) float m,n; {float x; x=-n/(2*m);
printf(\ }
float xugen(m,n,k) float m,n,k; {float x,y; x=-n/(2*m);
y=sqrt(-k)/(2*m);
printf(\ }
main()
{float a,b,c,q;
printf(\
scanf(\ printf(\ q=b*b-4*a*c;
if(q>0) yishigen(a,b,q); else if(q==0) denggen(a,b); else xugen(a,b,q); }
7.3写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。 psushu(m) int m; {int i=2,t;
for(;i<=m;i++)
if(m%i==0&&i main() {int a,s; printf(\ scanf(\ s=psushu(a); if(s==1) printf(\ else printf(\ } 7.4写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。 int zhuangzhi(b) int b[3][3]; {int i,j,t; for(i=0;i<3;i++) for(j=0;j>=i&&j<3-i;j++) {t=b[i][j];b[i][j]=b[j][i];b[j][i]=t;} } main() {int a[3][3];int i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(\ for(i=0;i<3;i++) {for(j=0;j<3;j++) printf(\ printf(\ zhuangzhi(a); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf(\ printf(\ } 7.5写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。 main() {char str0[100]; gets(str0); fanxu(str0); puts(str0); } fanxu(str1) char str1[100]; {int i,t,j; char str2[100];strcpy(str2,str1); t=strlen(str1); for(i=0,j=t-1;j>-1;i++,j--) str1[i]=str2[j]; } 7.6写一函数,将两个字符串连接。 lianjie(a,b) char a[100],b[100]; {strcat(a,b); } main() {char str1[100],str2[100]; gets(str1);gets(str2); lianjie(str1,str2); puts(str1); } 8.7写一函数,将两个字符串中的元音字母复制到另一个字符串,然后输出。 fuzhi(a,b) char a[100],b[100]; {int i,j=0; for(i=0;a[i]!=’\\0’;i++) if(a[i]==97||a[i]==101||a[i]==105||a[i]==111||a[i]==117||a[i]==65|| a[i]==69||a[i]==73||a[i]==85) {b[j]=a[i];j++;} } main() {char str1[100],str2[100]; gets(str1); fuzhi(str1,str2); puts(str2); } 7.8写一函数,输入一个四位数字,要求输出这四个数字字符,但每两个数字间空格。如输入1990,应输出\。 char f(b) char b[4]; {int i=0; for(;i<4;i++) {printf(\ printf(\ printf(\ } main() {int a,u,v,w,t;char c[4]; scanf(\ u=a*0.001;v=0.01*(a-1000*u);w=(a-1000*u-100*v)*0.1;t=a-1000*u-100*v-10*w; c[0]=u+48; c[1]=v+48; c[2]=w+48; c[3]=t+48; f(c); } 7.9编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 char tongji(str0,b) char str0[100]; int b[4]; {int i; for(i=0;str0[i]!=’\\0’;i++) {if(str0[i]>=65&&str0[i]<=90||str0[i]>=97&&str0[i]<=122) b[0]++; else if(str0[i]>=48&&str0[i]<=57) b[1]++; else if(str0[i]==32) b[2]++; else b[3]++;} } main() {char str1[100];static int i,a[4]; gets(str1); tongji(str1,a); printf(\ for(i=0;i<4;i++) printf(\ } 7.10写一函数,输入一行字符,将此字符串中最长的单词输出。 cechang(str1,word0) char str1[100],word0[15]; {int i=0,j=0,t=0; static char word1[15]; for(;str1[i]!=’\\0’;i++) {if(!(str1[i]>=97&&str1[i]<=122||str1[i]>=65&&str1[i]<=90)) {t=j;j=0;continue;} word1[j]=str1[i];j++; if(j>=t) strcpy(word0,word1);} } main() {char str0[100],longword[15]; gets(str0); cechang(str0,longword); puts(longword); } 7.11写一函数用起泡法对输入的个字符按由小到大的顺序排列。 int paixu(x) int x[]; {int i,j,t; for(j=1;j<10;j++) for(i=0;i<=9-j;i++) if(x[i]>x[i+1]) {t=x[i+1];x[i+1]=x[i];x[i]=t;} } main() {int y[10];int i; for(i=0;i<10;i++) scanf(\ paixu(y); for(i=0;i<10;i++) printf(\ printf(\ } 7.12用牛顿迭代法求根。方程为: ,系数a,b,c,d由主函数输入。求X在1附近的一个实根。求出后由主函数输出。 double qigen(s,t,u,v) int s,t,u,v;