#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int n, a,p[100]; void sort(int p[], int n); scanf("请输入数组中元素的个数:%d", &n); scanf("请输入你想添加的数:%d", &a); for (int i = 0; i < n; i++) { scanf("%d", &p[i]); } p[n] = a; for (int i = 0; i < n; i++) { printf("%d", p[i]); } printf("\n"); printf("添加排序后的数组为:"); sort(p, n); } void sort(int p[],int n) { for (int i = 0; i < n; i++) { int k = i; for (int q = i + 1; q < n + 1; q++) { if (p[q] < p[k]) { int t = p[q]; p[q] = p[k]; p[k] = t; } } } for (int i = 0; i < n + 1; i++) { printf("%d", p[i]); } }
时间: 2024-01-13 09:02:32 浏览: 33
这段代码的作用是在一个已经有序的数组中插入一个元素,并且保持数组有序。但是,代码中存在一些问题:
1. scanf 函数的格式字符串中应该去掉无用的提示信息,只保留占位符 %d;
2. 在向数组中添加新元素时,数组下标应该是 n,而非 n+1;
3. 在 sort 函数中,最外层循环的终止条件应该是 n-1,而非 n;
4. 在输出数组元素时,应该在每个元素后面加上一个空格。
下面是修正后的代码:
```
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void sort(int p[], int n);
int main()
{
int n, a, p[100];
printf("请输入数组中元素的个数:");
scanf("%d", &n);
printf("请输入你想添加的数:");
scanf("%d", &a);
for (int i = 0; i < n; i++) {
scanf("%d", &p[i]);
}
p[n] = a;
printf("原始数组为:");
for (int i = 0; i < n; i++) {
printf("%d ", p[i]);
}
printf("\n");
printf("添加并排序后的数组为:");
sort(p, n + 1);
return 0;
}
void sort(int p[], int n)
{
for (int i = 0; i < n - 1; i++) {
int k = i;
for (int q = i + 1; q < n; q++) {
if (p[q] < p[k]) {
int t = p[q];
p[q] = p[k];
p[k] = t;
}
}
}
for (int i = 0; i < n; i++) {
printf("%d ", p[i]);
}
}
```