第七章习题答案 1.1选择题 1.B2.B3.D4.D 2.2编程题 L.已有变量第一和函数调用语句:intx=57,.isprime(x函数isprime()用来判断一个整型数a 是否为素数,若是素数,函数返回1,否则返回0。请编写程序。 main() intx=57. printf("%d",isprime(x)): int isprime(inta) (int flag=1,i: for(i-2.i=n))1ag=l, else flag=0: return flag: 2.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并 输出结果,两个整数由键盘输入。 int fl(int u.int y) t=u;u=v;v=t; while((r=u%v)!=0) uv:v=r: return v. int (int uint v.inth) return u*v/h: 1 intu.v.h.l. scanf("%d%d"&uv); h=fl(uv): 最大公约数是:%db =2(u,vh printf(“最小公倍数是:%d”, 3.写一函数,用“起泡法”对输入10个字符按由小到大顺序排列。 #definen5
第七章习题答案 1.1 选择题 1.B 2.B 3.D 4.D 2.2 编程题 1.已有变量第一和函数调用语句:int x=57;isprime(x);函数 isprime( )用来判断一个整型数 a 是否为素数,若是素数,函数返回 1,否则返回 0。请编写程序。 main() { int x=57; printf (“%d”,isprime(x)); } int isprime(int a) {int flag=1,i; for(i=2;i=n) flag =1; else flag=0; return flag; } 2.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并 输出结果,两个整数由键盘输入。 int f1( int u,int v) { int t,r; if(v>u) {t=u;u=v;v=t;} while((r=u%v)!=0) {u=v;v=r;} return v; } int f2( int u,int v,int h) { return u*v/h; } main( ) { int u,v,h,l; scanf(“%d %d”,&u,&v); h=f1(u,v); printf(“最大公约数是:%d”,h); l=f2(u,v,h); printf(“最小公倍数是:%d” ,l); } 3.写一函数,用“起泡法”对输入 10 个字符按由小到大顺序排列。 #define n 5
main( int a(n]: intij.t fl(n); int fl(int n) printf("input nnumbers:n"). for(i=0:i=ali+1l) {t=aUJ:aU]=aL+1].a[j+1}-t) printf("the sorted numbers:\n); for(i=1;i<=n;i++) printf(%dr”,afi]s 4.编写一个函数,计算下面算式的100项之值,并将计算结果返回到主调函数。 S=1+3-5+9 int sum(intn) (inti.s-0,flag=1,num-0. for(i=1:num<=n:i+=2) {s=sti+flag: flag-flag num++;) return s. } main() int n=100. printf(“sum=%d”,sum(n)y *附加题: 用数组处理Fibonacei数列问腿 main( int i; long int a2]=(1.1); for(i=2:i<20:i++) {iri9% 0)printf(" printf("%12d"a]);
main() { int a[n]; int i,j,t; f1(n); } int f1( int n) printf(“input n numbers:\n”); for (i=0;i=a[j+1]) { t=a[j];a[j]=a[j+1];a[j+1]=t;} printf(“the sorted numbers:\n”); for (i=1;i<=n;i++) printf(“%d”,a[i]); } 4.编写一个函数,计算下面算式的 100 项之值,并将计算结果返回到主调函数。 S=1+3-5+-9+. int sum(int n) {int i,s=0,flag=1,num=0; for(i=1;num<=n;i+=2) {s=s+i*flag; flag=-flag; num++;} return s; } main() { int n=100; printf (“sum=%d”,sum(n)); } /*附加题:*/ 用数组处理 Fibonacei 数列问题。 main() { int i; long int a[20]={1,1}; for(i=2;i<20;i++) a[i]=a[i-2]+a[i-1]; for(i=0;i<20;i++) { if(i%5==0) printf("\n"); printf("%12d",a[i]); }
运行结果为: 8 3 21 34 89 144 233 377 1597 2584 4181 用函数求Fibonacci数列12项的和 1 (=1) fibn)=〈1 (n=2) fib(n-1 )+fib (n-2) fib(int n) int f if(n==1n==2) fl; else f=fb(n-1)+fib(n-2方 return f; main() int i.s=0. for(-l;i=12,i+) s=stfib (i); printf("n-12.s-%d".s). 2.反向输出一个整数(非数值问题) 程序如下: include main() void printn(int x); int n: printfi"input n="方 scanf("%d"&n): if(n<0) n=-n: putchar(.'方
} 运行结果为: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 用函数求 Fibonacci 数列 12 项的和 1 (n=1) fib( n ) = 1 (n=2) fib( n –1 )+fib (n –2) (n>2) fib ( int n ) { int f; if ( n = =1 || n = =2 ) f=1; else f= fib (n –1 ) +fib (n – 2 ); return f; } main ( ) { int i,s=0; for (i=1; i main ( ) { void printn( int x); int n; printf("input n="); scanf("%d",&n); if(n<0) { n= -n; putchar ( ‘-‘); } printn ( n ); }
void printn int x) { if(x>=0&&x<=9) printf("%d"x); else printf ("%d",x%10); printn(x/10); } 3.3阅读程序,写出程序运行结果 程序一:6 程序二:9 程序三:15 程序四:817
void printn ( int x) { if( x >=0 && x<=9 ) printf("%d",x); else { printf ("%d",x%10); printn(x/10); } } 3.3 阅读程序,写出程序运行结果 程序一:6 程序二: 9 程序三:15 程序四:817