/*改错题:只回答红色字符部分的修改*/ 求一个3*3矩阵第二行元素之和。 #include <stdio.h> int main() {int a[3][3],sum=0; int i,j; for(i=0;i<3;i++) /*found*/ for(j=0;j<=3;j++) scanf("%d",&a[i][j]); for(i=0;i<3;i++) /*found*/ sum=sum+a[i][i]; printf("he = %d",sum); }
时间: 2024-04-27 14:23:04 浏览: 92
求一个3*3矩阵第二行元素之和。
#include <stdio.h>
int main() {
int a[3][3],sum=0;
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++) // 将 j<=3 修改为 j<3
scanf("%d",&a[i][j]);
for(j=0;j<3;j++) // 将 i 修改为 j
sum=sum+a[1][j]; // 第二行的行下标为 1
printf("he = %d",sum);
}
相关问题
程序改错: #include <string.h> #include <stdio.h> void fun(char p[ ]) {char max; int i=0,t=0; max=p[i]; /***********ERROR***********/ while(p[i]!='\n') { /***********ERROR***********/ if(max>p[i]) {max=p[i]; t=i;} i++;} printf("ASCII最大的字符:%c,位于:%d\n",max,t); } main() {char str[80]; printf("给数组元素赋值:\n"); /***********ERROR***********/ gets(str[i]); printf("\n输出数组: \n"); puts(str); /***********ERROR***********/ fun(str) }
程序改错:
```c
#include <string.h>
#include <stdio.h>
void fun(char p[]) {
char max;
int i=0,t=0;
max=p[i];
while(p[i]!='\0') {
if(max<p[i]) {
max=p[i];
t=i;
}
i++;
}
printf("ASCII最大的字符:%c,位于:%d\n",max,t);
}
int main() {
char str[80];
printf("给数组元素赋值:\n");
gets(str);
printf("\n输出数组: \n");
puts(str);
fun(str); // 添加分号
return 0;
}
```
代码说明:
该程序定义了一个函数 `fun`,它的作用是查找字符串中 ASCII 码最大的字符,并输出该字符及其位置。该函数的参数是一个字符数组,表示要查找的字符串。函数中使用两个变量 `max` 和 `t`,分别表示当前找到的最大字符和其位置。在遍历字符串时,如果当前字符比 `max` 大,则更新 `max` 和 `t` 的值。最后输出找到的最大字符及其位置。
在 `main` 函数中,首先定义一个长度为 80 的字符数组 `str`,并使用 `gets` 函数从标准输入中读入一个字符串。接着输出该字符串,并调用 `fun` 函数对其进行处理。注意在调用 `fun` 函数前需要加上分号。最后返回值 0,表示程序正常结束。该程序的错误包括:
1. `while` 循环中的终止条件应为 `\0` 而非 `\n`;
2. `gets` 函数应该直接读入字符串,而不是读入字符;
3. 在调用 `fun` 函数前需要加上分号。
1、改错题:在改错时,不得删除改错标志(如:“/******1******/”等),请在该改错标志下方的下一行,根据程序功能改错;调试运行程序,且不得加行、减行、加句、减句。 程序功能:(源程序13_1.c) 输入n,再输入n个点的平面坐标,则输出那些距离坐标原点不超过5的点的坐标值。 源程序(有错误的程序) #include <stdio.h> #include <math.h> #include <stdlib.h> void main() { int i,n; struct axy { float x,y;}; /***** 1 *****/ struct axy a; /***** 2 *****/ scanf("%d",n); a=(struct axy*) malloc(n*sizeof(struct axy)); for(i=0;i<n;i++) scanf("%f%f",&a[i].x,&a[i].y); /***** 3 ******/ for(i=1;i<=n;i++) if(sqrt(pow(a[i].x,2)+pow(a[i].y,2))<=5) { printf("%f,",a[i].x); /*************** 4 **************/ printf("%f\n",a+i->y); } }
改正后的程序如下:
```
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main() {
int i, n;
struct axy {
float x, y;
};
struct axy *a; // 1. 修改结构体指针的定义
scanf("%d", &n);
a = (struct axy*)malloc(n * sizeof(struct axy));
for (i = 0; i < n; i++)
scanf("%f%f", &a[i].x, &a[i].y);
for (i = 0; i < n; i++) { // 2. 修改循环条件
if (sqrt(pow(a[i].x, 2) + pow(a[i].y, 2)) <= 5) {
printf("%f,", a[i].x);
printf("%f\n", a[i].y); // 3. 修改打印语句
}
}
free(a); // 4. 释放动态分配的内存
return 0;
}
```
改错说明:
1. 修改结构体指针的定义,指向动态分配的内存空间。
2. 修改循环条件,下标从 0 开始,应该循环到 `n-1`。
3. 修改打印语句,应该打印 `a[i].y`,而不是 `a+i->y`。
4. 在程序结束前,需要释放动态分配的内存空间。
阅读全文