请问这个哪里出问题了,循环好像进不去,卡在输入数组的地方了,求矩阵除副对角线,最后一列和最后一行的所有元素和
以下是优化后的代码,
#include<stdio.h>
int main(){
int i, j, n, a[10][10], sum = 0;
printf("请输入为几阶方阵:");
scanf("%d",&n);
printf("请输入矩阵内的元素:");
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
scanf("%d",&a[i][j]);
}
}
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
if(i + j == n-1 || j == n-1 || i == n-1){
continue;
}
sum += a[i][j];
}
}
printf("sum=%d\n", sum);
return 0;
}
这段代码中有几个问题:
while循环条件判断有误,i和j在外层for循环中已经被赋值为n了,因此进不去while循环。而且判断条件中的!=应该改为==。
判断条件i != 3 && j != 3也有误,这样的话只有矩阵为4*4时才能计算,而并不适用于其他尺寸的方阵。
计算副对角线元素之和的代码缺失,需要加上对副对角线元素的特殊处理。
下面是修改后的代码,可以实现计算除副对角线、最后一列、最后一行的所有元素的和:
c
#include<stdio.h>
int main(){
int i,j,n,a[10][10], sum=0;
printf("请输入为几阶方阵: ");
scanf("%d",&n);
printf("请输入矩阵内的元素: ");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d" ,&a[i][j]);
}
}
// 计算除副对角线、最后一列、最后一行的所有元素的和
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(i+j != n-1 && i != n-1 && j != n-1){ // 排除副对角线、最后一列和最后一行的元素
sum += a[i][j];
}
if(i == j){ // 计算副对角线元素之和
sum -= a[i][j];
}
}
}
printf("sum=%d", sum);
return 0;
}
while 那个循环,不要那么写
应该是
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
if (i + j != i - 1 && i != n - 1 && j != n - 1)
sum+= a[i][j];
}
不知道你这个问题是否已经解决, 如果还没有解决的话:#include<stdio.h>
//x + 1;//不带副作用
//x++;//带有副作用
#define MAX(a, b) ((a) > (b) ? (a) : (b))
int main()
{
int x = 5;
int y = 8;
int z = MAX(x++, y++);
printf("x=%d y=%d z=%d\n", x, y, z);//输出的结果是什么?
return 0;
}