tceic.com
学霸学习网 这下你爽了
赞助商链接
当前位置:首页 >> 教育学 >>

C语言程序设计第三版谭浩强课后习题答案完整版


C 语言程序设计第三版谭浩强 课后习题答案完整版 第一章 1.5 请参照本章例题,编写一个 C 程序,输出以下信息: ************************** Very Good! ************************** 解: mian() {printf(“**************************”); printf(“\n”); printf(“Very Good!\n”); printf(“\n”); printf(“**************************”); } 1.6 编写一个程序, 输入 a、 c 三个值, b、 输出其中最大值。 解: mian() {int a,b,c,max; printf(“请输入三个数 a,b,c:\n”); scanf(“%d,%d,%d”,&a,&b,&c); max=a; if(max<b) max=b; if(max<c) max=c; printf(“最大数为: “%d”,max); } 第三章 3.6 写出以下程序运行的结果。 main() {char c1=?a?,c2=?b?,c3=?c?,c4=?\101?,c5=?\116?; printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3); printf(“\t\b%c %c”,c4,c5); } 解: aa ㄩ bb ㄩㄩㄩ cc ㄩㄩㄩㄩㄩㄩ abc AㄩN 3.7 要将"China"译成密码,译码规律是:用原来字母后 面的第 4 个字母代替原来的字母.例如,字母"A"后面第 4 个 字 母 是 "E" . "E" 代 替 "A" 。 因 此 , "China" 应 译 为 "Glmre"。请编一程序,用赋初值的方法使 cl、c2、c3、c4、 c5 五个变量的值分别为, ’C’’h’’i’’n’’a’ 、 、 、 、 ,经过 运算,使 c1、c2、c3、c4、c5 分别变为’G’’l’’m’’ 、 、 、 r’’e’ 、 ,并输出。

解: #include <stdio.h> main() { char c1=?C?,c2=?h?,c3=?i?,c4=?n?,c5=?a?; c1+=4; c2+=4; c3+=4; c4+=4; c5+=4; printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5); } 运行结果: 密码是 Glmre 3.9 求下面算术表达式的值。 (1)x+a%3*(int)(x+y)%2/4 设 x=2.5,a=7,y=4.7 (2)(float)(a+b)/2+(int)x%(int)y 设 a=2,b=3,x=3.5,y=2.5 (1)2.5 (2)3.5 3.10 写出程序运行的结果。 main() {int i,j,m,n; i=8; j=10; m=++i; n=j++; printf(“%d,%d,%d,%d”,i,j,m,n); } 解: 9,11,9,10 3.12 写出下面表达式运算后 a 的值,设原来 a=12。设 a 和 n 都已定义为整型变量。 (1)a+=a (2) a-=2 (3) a*=2+3 (4)a/=a+a (5) a%=(n%=2),n 的值等于 5 (6)a+=a-=a*=a 解: (1) 24 (2) 10 (3) 60 (4) 0 (5) 0 (6) 0 第四章 4.4 若 a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274, n=128765,c1=’a’ ,c2=’b’ 。想得到以下输出格式和结 果,请写出程序(包括定义变量类型和设计输出) 。 a=_3_ _b=_4_ _c=_5 x=1.200000,y=2.400000,z=-3.600000 x+y=_3.600_ _y+z=-1.20_ _z+x=-2.40 c1=ˊaˊ_or_97(ASCII)
1

c2=ˊbˊ_or_98(ASCII) main() {int a=3,b=4,c=5; long int u=51274,n=128765; float x=1.2,y=2.4,z=3.6; char c1=?a?,c2=?b?; printf("a=%2d b=%2d c=%2d\n",a,b,c); printf("x=%f,y=%f,z=%f\n",x,y,z); printf("x+y=%5.2f y+z=%5.2f z+x=%5.2f\n",x+y,y+z,z+x); printf("u=%6ld n=%9ld\n",u,n); printf("%s %s %d%s\n","c1=?a?","or",c1,"(ASCII)"); printf("%s %s %d%s\n","c2=?a?","or",c2,"(ASCII)"); } 4.7 用 scanf 下面的函数输入数据,使 a=3,b=7,x=8.5, y=71.82,c1=ˊAˊ,c2=ˊaˊ,问在键盘上如何输入? main() { int a,b;float x,y;char c1c2; scanf("a=%d_b=%d",&a,&b) ; scanf("_x=%f_y=%e",&x,&y) ; scanf("_c1=%c_c2=%c",&c1,&c2) ; } a=3_b=7 _x=8.5_y=71.82 _c1=A_c2=a 4.8 设圆半径 r=1.5,圆柱高 h=3,求圆周长、圆面积、圆 球表面积、圆球体积、圆柱体积。用 scanf 输入数据,输出 计算结果,输出时要求文字说明,取小数点后两位数字。 请编程序。 main() {float r,h,C1,Sa,Sb,Va,Vb; scanf("%f,%f",&r,&h); C1=2*3.14*r; Sa=3.14*r*r; Sb=4*Sa; Va=4*3.14*r*r*r/3; Vb=Sa*h; printf("C1=%.2f\n",C1); printf("Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n",Sa,Sb,Va, Vb); } 4.9 输入一个华氏温度,要求输出摄氏温度。公式为 c=5(F-32)/9 输出要求有文字说明,取位 2 小数。 main()

{float F,c; scanf("%f",&F); c=5*(F-32)/9; printf("c=%.2f",c); } 4.10 编程序,用 getchar 函数读入两个字符给 c1、c2,然 后分别用函数和函数输出这两个字符。并思考以下问题: (1)变量 c1、c2 应定义为字符型或整形?抑二者皆可? (2)要求输出 c1 和 c2 值的 ASCII 码,应如何处理?用 putchar 函数还是 printf 函数?(3)整形变量与字符变量 是否在任何情况下都可以互相代替?如: char c1,c2; 与 int c1,c2; 是否无条件的等价? #include"stdio.h" main() {char c1,c2; c1=getchar();c2=getchar(); putchar(c1);putchar(?\n?);putchar(c2);putchar(?\n?); } #include"stdio.h" main() {char c1,c2; c1=getchar();c2=getchar(); printf("c1=%d c2=%d\n",c1,c2); printf("c1=%c c2=%c\n",c1,c2); } 第五章 5.1 什么是算术运算?什么是关系运算?什么是逻辑运 算? 解:略。 5.2 C 语言中如何表示“真”和“假”?系统如何判断一 个量的“真”和“假”? 解:设有一个逻辑表达式,若其结果为“真” ,则以 1 表示; 若其结果为“假” ,则以 0 表示。但是判断一个逻辑量的值 时,以 0 代表“真” ,以非 0 代表“假” 。例如 3&&5 的值 为“真” ,系统给出 3&&5 的值为 1。 5.3 写出下面各逻辑表达式的值。设 a=3,b=4,c=5。 (1) a+b>c&&b==c (2) a||b+c&&b-c
2

(3) !(a>b)&&!c||1 (4) !(x=a)&&(y=b)&&0 (5) !(a+b)+c-1&&b+c/2 解: (1) 0 (2) 1 (3) 1 (4) 0 (5) 1 5.4 有 3 个整数 a、b、c,由键盘输入,输出其中最大的 数。 解: 方法一 #include <stdio.h> main() { int a,b,c; printf("请输入 3 个整数:"); scanf("%d,%d,%d",&a,&b,&c); if(a<b) if(b<c) printf("max=%d\n",c); else printf("max=%d\n",b); else if(a<c) printf("max=%d\n",c); else printf("max=%d\n",a); }

main() {int x,y; printf("输入 x:"); scanf("%d",&x); if(x<1) /* x<1 */ { y=x; printf("x=%3d, y=x=%d\n",x,y); } else if (x<10) /* 1≤x-10 */ { y=2*x-1; printf("x=%3d, y=2*x-1=%d\n",x,y); } else /* x≥10 */ { y=3*x-11; printf("x=%3d, y=3*x-11=%d\n",x,y); } }

方法二:使用条件表达式,可以使程序更加简明、清晰。 程序如下: #include <stdio.h> main() { int a,b,c,temp,max; printf("请输入 3 个整数:"); scanf("%d,%d,%d",&a,&b,&c); temp=(a>b)?a:b; /* 将 a 和 b 中的大者存人 temp 中 */ max=(temp>c)?temp:c; /* 将 a 和 b 中的大者与 c 比较, 取最大者*/ printf("3 个整数的最大数是%d\n”,max); }

5.5 有一函数: 写一程序,输入 x 值,输出 y 值。 解: #include <stdio.h>

5.6 给一个百分制成绩,要求输出等级’A’’B’’C’’ 、 、 、 D’’E’ 、 。90 分以上为’A’ ,80~90 分为’B’ ,70~79 分 为’C’ ,60 分以下为’D’ 。 解: 程序如下: #include <stdio.h> main() { float score; char grade; printf("请输入学生成绩:"); scanf("%f",&score); while(score>100||(score<0) { printf("\n 输入有误,请重新输入:"); scanf("%f",&score); } switch((int)(score/10)) { case 10: case 9: grade=?A?;break; case 8: grade=?B?;break; case 7: grade=?C?;break; case 6: grade=?D?;break; case 5: case 4: case 3: case 2: case 1: case 0: grade=?E?; } printf("成绩是%5.1f,相应的等级是%c。\n",score,grade);
3

} 说明:对输入的数据进行检查,如小于 0 或大于 100,要求 重新输入。 (int)(score/10)的作用是将 (score/10) 的值进行强 制类型转换,得到一个整型值。 5.7 给定一个不多于 5 位的正整数,要求:① 求它是几位 数;② 分别打印出每一位数字;③ 按逆序打印出各位数 字。例如原数为 321,应输出 123。 } 解: #include <stdio.h> main() { long int num; int indiv,ten,hundred,thousand,ten_thousand,place; /*分别代表个位、十位、百位、千位、 万位和位数*/ printf("请输入一个整数(0~99999) :"); scanf("%ld",&num); if (num>9999) place=5; else if(num>999) place=4; else if(num>99) place=3; else if(num>9) place=2; else place=1; printf("place =%d\n", place); ten_thousand=num/10000; thousand=num/1000%10; hundred=num/100%10; ten=num%100/10; indiv=num%10; switch(place) { case 5: printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,te n,indiv); printf("\n 反序数字为;"); printf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,ten_tho usand); break; case 4: printf("%d,%d,%d,%d",thousand,hundred,ten,indiv); printf("\n 反序数字为:"); printf("%d%d%d%d\n",indiv,ten,hundred,thousand); break; case 3: printf("%d,%d,%d",hundred,ten,indiv); printf("\n 反序数字为:"); printf("%d%d%d\n",indiv,ten,hundred); }

break; case 2: printf("%d,%d",ten,indiv); printf("\n 反序数字为:"); printf("%d%d\n",indiv,ten); break; case 1: printf("%d",indiv); printf("\n 反序数字为:"); printf("%d\n",indiv); break;

5.8 企业发放的奖金根据利润提成。利润 I 低于或等于 10 万元时,奖金可提成 10% ;利润高于 10 万元,低于 20 万元(100000<I≤200000)时,其中 10 万元按 10%提成, 高于 10 万元的部分, 可提成 7.5% ; 200000<I≤400000 时, 其中 20 万元仍按上述办法提成(下同) ,高于 20 万元的部 分按 5%提成;400000<I≤600000 时,高于 40 万元的部分 按 3%提成;600000〈I≤1000000 时,高于 60 万的部分按 1.5%提成; I>1000000 时, 超过 100 万元的部分按 1%提成。 从键盘输入当月利润 I,求应发放奖金总数。要求:(1)用 if 语句编程序;(2)用 switch 语句编程序。 解:计算利润时,要特别注意不同利润的不同提成比例。 例如,利润为 15 万元,其中有 10 万元按 10%的比例提成, 另外 5 万元则按 7.5%提成。 (1) 用 if 语句编程序。 #include <stdio.h> main() { long i; float bonus,bon1,bon2,bon4,bon6,bon10; bon1=100000*0.1; /*利润为 10 万元时的 奖金*/ bon2=bon1+100000*0.075; /*利润为 20 万元时的 奖金*/ bon4=bon2+200000*0.05; /*利润为 40 万元时的 奖金*/ bon6=bon4+200000*0.03; /*利润为 60 万元时的 奖金*/ bon10=bon6+400000*0.015; /*利润为 100 万元时的 奖金*/ printf("请输入利润 i:"); scanf("%ld",&i); if(i<=100000) bonus=i*0.1; /*利润在 10 万元以内按 0.1 提成奖金*/ else if(i<=200000)
4

bonus=bon1+(i-100000)*0.075; 时的奖金*/ else if(i<=400000) bonus=bon2+(i-200000)*0.05; 时的奖金*/ else if(i<=600000) bonus=bon4+(i-400000)*0.03; 时的奖金*/ else if(i<=1000000) bonus=bon6+(i-600000)*0.015; 元时的奖金*/ else bonus=bon10+(i-1000000)*0.01; 的奖金*/ printf(”奖金是%10.2f\n",bonus); }

/*利润在 10 万至 20 万元

/*利润在 20 万至 40 万元

/*利润在 40 万至 60 万元

/*利润在 60 万至 100 万

/*利润在 100 万元以上时

此题的关键在于正确写出每一区间的奖金计算公式。例如 利润在 10 万元至 20 万时,奖金应由两部分组成:①利润 为 10 万元时应得的奖金。即 100000ⅹ0.1;②10 万元以上 部分应得的奖金。即(num-100000)ⅹ0.075。同理,20 万~ 40 万这个区间的奖金也应由两部分组成: ①利润为 20 万元 时应得的奖金,即 100000ⅹ0.1ⅹ10 万ⅹ0.075;②20 万元 以上部分应得的奖金,即(num-200000)ⅹ0.05。程序中先把 10 万、20 万、40 万、60 万、100 万各关键点的奖金计算出 来,即 bon1、bon2、bon4、bon6、hon10;然后再加上各区 间附加部分的奖金。 (2) 用 switch 语句编程序。 输入利润 i,确定相应的提成等级 branch 根据 branch 确定奖金值 0 奖金=i*0.1 1 奖金=bon1+(i-105)*0.075 2 奖金=bon2+(i-2*105)*0.05 3 4 奖金=bon4+(i-4*105)*0.03 5 6 奖金=bon6+(i-6*105)*0.015 7 8 9 10 奖金=bon10+(i-106)*0.01 输出奖金 #include <stdio.h> main() { long i;

float bonus, bon1, bon2, bon4, bon6, bon10; int c; bon1=100000*0.1; bon2=bon1+100000*0.075; bon4=bon2+200000*0.05; bon6=bon4+200000*0.03; bon10=bon6+400000*0.015; printf("请输入利润 i:"); scanf("%ld",&i); c=i/100000; if(c>10) c=10; switch(c) { case 0: bonus=1*0.1;break; case 1: bonus=bon1+(i-100000)*0.075;break; case 2 : case 3: bonus=bon2+(i-200000)*0.05; break; case 4: case 5: bonus=bon4+(i-400000)*0.03;break; case 6: case 7: case 8: case 9: bonus=bon6+(i-600000)*0.015;break; case 10: bonus=bon10+(i-1000000)*0.01; } printf("奖金是%10.2f",bonus); } 5.9 输入 4 个整数,要求按由大到小的顺序输出。 解:此题采用依次比较的方法排出其大小顺序。在学习了 循环和数组以后,可以有更多的排序方法。 #include <stdio.h> main() { int t,a,b,c,d; printf("请输入 4 个整数:"); scanf("%d,%d,%d,%d",&a,&b,&c,&d); printf("\n a=%d,b=%d,c=%d,d=%d\n",a,b,c,d); if(a>b) {t=a; a=b; b=t;} if(a>c) {t=a; a=c; c=t;} if(a>d) {t=a; a=d; d=t;} if(b>c) {t=a; b=c; c=t;} if(b>d) {t=b; b=d; d=t;} if(c>d) {t=c; c=d; d=t;} printf("排序结果如下:\n"); printf("%d, %d, %d, %d\n",a,b,c,d); }
5

5.10 有 4 个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、 (-2,-2),圆半径为 1。这 4 个塔的高度分别为 10m。塔以 外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔 外的高度为零)。 程序如下: #include <stdio.h> main() { int h=10; float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=-2,y4=-2,x,y,d1,d2,d3, d4; printf("请输入一个点(x,y):"); scanf("%f,%f",&x,&y); d1=(x-x1)*(x-x1)+(y-y1)*(y-y1); /*求该点到各中心 点的距离*/ d2=(x-x2)*(x-x2)+(y+y2)*(y+y2); d3=(x+x3)*(x+x3)+(y-y3)*(y-y3); d4=(x+x4)*(x-x4)*(y+y4)*(y+y4); if(d1>1&&d2>1&&d3>1&&d4>1) h=0; /*判断该点 是否在塔外*/ printf("该点高度为%d\n",h); } 第六章 循环控制

printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l); } 6.3 求 Sn=a+aa+aaa+?+aa?aaa(有 n 个 a)之值,其中 a 是一个数字。例如:2+22+222+2222+22222(n=5) 由键 ,n 盘输入。 #include"math.h" main() {int n,sum=0,i=1,s=2; scanf("%d",&n); while(i<=n) {sum=sum+s;s=s+2*pow(10,i); i++;} printf("sum=%d\n",sum); } 6.4 求 , (即求 1!+2!+3!+4!+5!+?+20!) main() {int n,i=1;long sum=0,s=1; scanf("%d",&n); while(i<=n) {s=s*i;sum=sum+s;i++;} printf("sum=%ld\n",sum); } 6.5 求 main() {double i=1,j=1,k=1,s1=0,s2=0,s3=0,sum; for(;i<=100;i++) s1=s1+i; for(;j<=50;j++) s2=s2+j*j; for(;k<=10;k++) s3=s3+1/k; sum=s1+s2+s3; printf("sum=%f\n",sum); } 6.6 打印出所有"水仙花数", 所谓"水仙花数"是指一个三位 数,其各位数字立方和等于该本身。例如:153 是一个水仙 花数,因为 153=1^3+5^3+3^3。 #include"math.h" main() {int x=100,a,b,c; while(x>=100&&x<1000) {a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b; if(x==(pow(a,3)+pow(b,3)+pow(c,3))) printf("%5d",x);x++;} } 6.7 一个数如果恰好等于它的因子之和,这个数就称为"完 数"。例如,6 的因子为 1、2、3,而 6=1+2+3,因此 6 是" 完数"。编程序找出 1000 之内的所有完数,并按下面格式
6

6.1 输入两个正整数 m 和 n, 求其最大公约数和最小公倍数。 main() {long m,n,i=1,j,s; scanf("%ld,%ld",&m,&n); for(;i<=m&&i<=n;i++) {if(m%i==0&&n%i==0) s=i;} if(m>=n) j=m; else j=n; for(;!(j%m==0&&j%n==0);j++); printf("s=%ld,j=%ld\n",s,j); } 6.2 输入一行字符,分别统计出其中英文字母、空格、数字 和其他字符的个数。 #include"stdio.h" main() {char c;int i=0,j=0,k=0,l=0; while((c=getchar())!=?\n?) {if(c>=65&&c<=90||c>=97&&c<=122) i++; else if(c>=48&&c<=57) j++; else if(c==32) k++; else l++;}

输出其因子: 6 its factors are 1、2、3 main() {int m,i,j,s; for(m=6;m<10000;m++) {s=1; for(i=2;i<m;i++) if(m%i==0) s=s+i; if(m-s==0) {printf("%5d its fastors are if(m%j==0) printf("%d ",j);printf("\n");} } } 或 main() {int m,i,j,s; for(m=6;m<1000;m++) {s=m-1; for(i=2;i<m;i++) if(m%i==0) s=s-i; if(s==0) {printf("%5d its fastors are if(m%j==0) printf("%d ",j);printf("\n");} } } 6.8 有一分数序列:

1

",m);for(j=2;j<m;j++)

6.10 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃 了一半,还不过瘾,又多吃了一个。第二天早上又将剩下 的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一 天剩下的一半零一个。到第 10 天早上想再吃时,见只剩下 一个桃子了。求第一天共摘多少桃子。 main() {int i=1,sum=0; for(;i<=10;sum=2*sum+1,i++); printf("sum=%d\n",sum); } 6.11 用迭代法求 。求平方根的迭代公式为: 要求前后两次求出的得差的绝对值少于 0.00001。 #include"math.h" main() {float x0,x1,a; scanf("%f",&a); x1=a/2; do {x0=x1;x1=(x0+a/x0)/2;} while(fabs(x0-x1)>=0.00001); printf("%.3f\n",x1); } 6.12 用牛顿迭代法求方程在 1.5 附近的根。 main() {double x,y;x=1.5; do{y=2*x*x*x-4*x*x+3*x-6; x=x-y/(6*x*x-8*x+3);} while(y!=0); printf("x=%.3f\n",x); } 6.13 用二分法求方程在(-10,10)之间的根 main() {double x1,x2,y1,y2;x1=-10;x2=10; do{y1=2*x1*x1*x1-4*x1*x1+3*x1-6; x1=x1-y1/(6*x1*x1-8*x1+3);} while(y1!=0); do {y2=2*x2*x2*x2-4*x2*x2+3*x2-6; x2=x2-y2/(6*x2*x2-8*x2+3);} while(y2!=0); printf("x1=%.3f,x2=%.3f\n",x1,x2);
7

1

",m);for(j=2;j<m;j++)

求出这个数列的前 20 项之和。 main() {int i=1,n;double t,x=1,y=2,s,sum=0; scanf("%ld",&n); while(i<=n) {s=y/x;sum=sum+s;t=y;y=y+x;x=t;i++;} printf("%f\n",sum); } 6.9 一球从 100 米高度自由下落,每次落地后返回原高度的 一半,再落下。求它在第 10 次落地时共经过多少米?第 10 次反弹多高? main() {int i,n;double h=100,s=100; scanf("%d",&n); for(i=1;i<=n;i++) {h*=0.5;if(i==1) continue;s=2*h+s;} printf("h=%f,s=%f\n",h,s); }

} 6.14 打印以下图案 * * * * * * * * * * * * * * * * * * * * * * * #include"math.h" main() {int i,j,k;

*

*

for(i=0;i<=3;i++) {for(j=0;j<=2-i;j++) printf(" "); for(k=0;k<=2*i;k++) printf("*"); printf("\n"); } for(i=0;i<=2;i++) {for(j=0;j<=i;j++) printf(" "); for(k=0;k<=4-2*i;k++) printf("*"); printf("\n"); } } 第七章 7.1 用筛法求之内的素数。 main() { int i,j,a[100]; for(i=2;i<100;i++) { a[i]=i; for(j=2;j<=i;j++) {if(j<i) if(a[i]%j==0) break; if(a[i]-j==0) printf("%5d",a[i]); } } printf("\n"); } 或 #include"math.h" main() 数组

{static int i,j,k,a[98]; for(i=2;i<100;i++) {a[i]=i;k=sqrt(i); for(j=2;j<=a[i];j++) if(j<k) if(a[i]%j==0) break; if(j>=k+1) printf("%5d",a[i]); } printf("\n"); } 7.2 用选择法对 10 个整数从小到大排序。 main() { int i,j,a[10],t; for(i=0;i<10;i++) scanf("%d",&a[i]); for(j=1;j<10;j++) for(i=0;i<=9-j;i++) if(a[i]>a[i+1]) {t=a[i+1];a[i+1]=a[i];a[i]=t;} for(i=0;i<10;i++) printf("%5d",a[i]); } 或 main() {static int a[10],i,j,k,t; for(i=1;i<11;i++) scanf("%d",&a[i]); for(j=1;j<10;j++) for(i=1;i<=10-j;j++) if (a[i]>a[i+1]) {t=a[i+1];a[i+1]=a[i];a[i]=t;} for(i=1;i<11;i++) printf("%d",a[i]); printf("\n"); } 7.3 求一个 3×3 矩阵对角线元素之和。 main() {int i=0,j=0,a[3][3],s1,s2; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); s1=a[0][0]+a[1][1]+a[2][2]; s2=a[0][2]+a[1][1]+a[2][0]; printf("s1=%d,s2=%d\n",s1,s2); } 或
8

main() { static int i,j,s1,s2,a[3][3]; for(i=1;i<=3;i++) for(j=1;j<=3;j++) scanf("%d",&a[i][j]); s1=a[1][1]+a[2][2]+a[3][3]; s2=a[1][3]+a[2][2]+a[3][1];