谭浩强第六章习题答案
谭浩强的第六章是循环,拿来练练手,程序是亲手写的,不一定是最优的,但一定对。另外12、13、15感觉比较扯就没写。
下面是代码:
//1.cpp #include <stdio.h> #define MAX(m,n) (((m) > (n) ? (m) : (n))) #define MIN(m,n) (((m) < (n) ? (m) : (n))) int main(void) { int m, n; int i; int a, b; printf("Input m and n:\n"); scanf("%d %d",&m,&n); for(i=MIN(m,n);i>0;i--) { if(!(m%i) && !(n%i)) break; } a=i; for(i=MAX(m,n);;i++) { if(!(i%m) && !(i%n)) break; } b=i; printf("a=%d\tb=%d\n",a,b); return 0; }
//2.cpp #include <stdio.h> int main(void) { char c; int num=0, letter=0, blank=0, digit=0, other=0; while((c=getchar()) != '\n') { num++; if((c>='a' && c <='z') || (c>='A' && c<='Z')) letter++; else if(c>='0' && c <='9') digit++; else if(c==' ') blank++; else other++; } printf("There are %d characters,%d letters,%d digits, %d blanks,%d other characters.\n)" ,num,letter,digit,blank,other); return 0; }
//3.cpp #include <stdio.h> int main(void) { int a, n, tmp, sum; a=n=sum=tmp=0; printf("input a and n:\n"); scanf("%d %d", &a, &n); for(int i=0; i<n; i++) { tmp = tmp * 10 + a; sum += tmp; } printf("sum = %d\n", sum); return 0; }
//4.cpp #include <stdio.h> int main(void) { int n; long tmp=1, sum=0; printf("input n:\n"); scanf("%d", &n); for(int i=1; i<=n; i++) { tmp = tmp * i; sum +=tmp; } printf("sum = %d\n", sum); return 0; }
//5.cpp #include <stdio.h> int main(void) { int k, sum1=0; float sum=0; k = 100; for(int i=1; i<=k; i++) { sum1 += i; } k = 50; for(i=1; i<=k; i++) { sum1 += i * i; } k = 10; for(i=1; i<=k; i++) { sum += 1.0 / i; } sum += sum1; printf("sum = %.2f\n", sum); return 0; }
//6.cpp #include <stdio.h> int main() { int num, tmp; for(num=100; num<1000; num++) { tmp = (num/100)*(num/100)*(num/100) + (num%100/10)*(num%100/10)*(num%100/10) + (num%10)*(num%10)*(num%10); if(num == tmp) printf("%d\t",num); } printf("\n"); return 0; }
//7.cpp #include <stdio.h> int main() { int i, j, k=0; int num, sum=0; int p[5]; //先运行一次根据k的值设置数组p的元素个数 printf("Input the max num:\n"); scanf("%d",&num); for (i=1; i<=num; i++) { for (j=1; j<=i/2; j++) { if (!(i%j)) { sum += j; } if(sum > i) break; } if (sum == i) { p[k++] = i; } sum = 0; } for (i=0; i<k; i++) { printf("%d its factors are",p[i]); for (j=1; j<=p[i]/2; j++) { if (!(p[i]%j)) { printf(" %d,",j); } } printf("\n"); } //printf("k=%d",k); //printf("\n"); return 0; }
//8.cpp #include <STDIO.H> #define NUM 20 int main() { int a[NUM]={2,3}; int b[NUM]={1,2}; float sum=2.0+3.0/2; for (int i=2; i<NUM; i++) { a[i] = a[i-1] + a[i-2]; b[i] = a[i-1]; sum += (float)a[i] / b[i]; } printf("sum=%.3f\n",sum); return 0; }
//9.cpp #include <STDIO.H> #define HIGHT 100 int main() { float h=HIGHT; float sum=0.0; for (int i=0; i<10; i++) { sum += h; h = h / 2; } printf("sum=%.2fm,h=%.2fm\n",sum,h); return 0; }
//10.cpp #include <STDIO.H> int main() { int num=1; for (int i=1; i<10; i++) { num = (num + 1) * 2; } printf("num=%d\n",num); return 0; }
//11.cpp #include <math.h> #include <stdio.h> int main() { float x1,x2, a; printf("Input a:\n"); scanf("%f",&a); x1 = a / 2; x2 = (x1 + a/x1) / 2; while (fabs(x1-x2) >= 1e-5) { x1 = x2; x2 = (x1 + a / x1) / 2; } printf("x=%.3f\n",x2); return 0; }
//14.cpp #include <STDIO.H> int main() { int a,i,j,k; for (i=0; i<4; i++) { for (j=0;j<3-i;j++) printf(" "); for(k=0;k<2*i+1;k++) printf("* "); printf("\n"); } for(i=0; i<3; i++) { for (j=0; j<i+1; j++) printf(" "); for (k=0; k<5-2*i; k++) printf("* "); printf("\n"); } return 0; }