int main() { int n; scanf("%d", &n); char** arr; arr = (char**)malloc(n * sizeof(char*)); for (int i = 0; i < n; i++){ arr[i] = (char*)malloc(sizeof(char)); } for (int i = 0; i < n; i++) { scanf("%s", arr[i]); } solution(n, arr); return 0; }
时间: 2024-03-28 19:39:23 浏览: 154
这段代码中,我们首先从标准输入中读入一个整数 n,然后动态分配一个 char 类型的二维数组 arr,它有 n 行,每行只有一个字符,读入 n 个字符串后调用了函数 solution。
不过需要注意的是,每次调用 malloc 分配内存时,应该给出所需内存大小,而不是固定的 1。因此,第 7 行中应该改为 `arr[i] = (char*)malloc((MAX_LENGTH + 1) * sizeof(char));`,其中 MAX_LENGTH 是字符串的最大长度。
相关问题
typedef struct student { char name[16]; double scoreC; double scoreM; }STU; STU* scan(STU* arr12, int n) { int i; arr12=(STU *)malloc(n*sizeof(STU)); for(i=0;i<n;i++) { scanf("%s",arr12[i].name); scanf("%lf,%lf",&arr12[i].scoreC,&arr12[i].scoreM); } return arr12; } int findMax(STU* arr, int n) { int i,k=0; for(i=1;i<5;i++) if(arr12[k].scoreC<arr12[i].scoreC) k=i; return k; } int main(void) { STU * arr0529;//STU arr12[5]; int max; int n; scanf("%d",&n); arr0529=scan(arr, n); max = findMax(arr,5); }
这段代码中有一些问题,第一个问题是在函数scan中,arr12指针是作为参数传递的,函数内部对其进行了动态内存的分配,但是没有返回分配后的指针,也没有把分配后的指针赋值给传入的arr12指针,导致在main函数中使用这个指针时会出现错误。可以修改为如下代码:
```c
STU* scan(int n) {
int i;
STU* arr12 = (STU*)malloc(n * sizeof(STU));
for (i = 0; i < n; i++)
{
scanf("%s", arr12[i].name);
scanf("%lf,%lf", &arr12[i].scoreC, &arr12[i].scoreM);
}
return arr12;
}
int main(void) {
STU* arr0529;
int max;
int n;
scanf("%d", &n);
arr0529 = scan(n);
max = findMax(arr0529, n);
// ...
}
```
第二个问题是在函数findMax中,应该使用参数n代替数字5,因为传入的数组长度可能不是5。可以修改为如下代码:
```c
int findMax(STU* arr, int n) {
int i, k = 0;
for (i = 1; i < n; i++)
if (arr[k].scoreC < arr[i].scoreC)
k = i;
return k;
}
```
根据上文补全代码。#include<stdio.h> struct student { char number[15]; char name[20]; int score; }; void sort(struct student *p,int n) { /*********Begin*********/ /*********End**********/ } int main(void) { struct student arr[200],t; int n,i,j; scanf("%d",&n); /*********Begin*********/ /*********End**********/ sort(arr,n); for(i=0;i<n;i++) printf("%s %s %d\n",arr[i].number,arr[i].name,arr[i].score); return 0; }
好的,下面是代码的补全部分:
```c
#include<stdio.h>
struct student {
char number[15];
char name[20];
int score;
};
void sort(struct student *p, int n) {
int i, j;
struct student temp;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if ((p + i)->score < (p + j)->score) {
temp = *(p + i);
*(p + i) = *(p + j);
*(p + j) = temp;
}
}
}
}
int main(void) {
struct student arr[200], t;
int n, i, j;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s %s %d", arr[i].number, arr[i].name, &arr[i].score);
}
sort(arr, n);
for (i = 0; i < n; i++) {
printf("%s %s %d\n", arr[i].number, arr[i].name, arr[i].score);
}
return 0;
}
```
该程序中,我们定义了一个结构体 `student` 来存储每个学生的信息,包括学号、姓名、成绩。在 `main()` 函数中,我们先输入学生的数量 `n`,然后使用 `for` 循环输入每个学生的信息。接下来调用 `sort()` 函数进行排序,最后输出排序后的学生信息。在 `sort()` 函数中,我们使用了简单的选择排序算法,按照成绩从高到低排序。需要注意的是,在函数中使用 `p + i` 和 `p + j` 来访问结构体数组中的元素,使用 `*(p + i)` 和 `*(p + j)` 来访问结构体数组中的元素的值。
阅读全文