编程:往一个递增的数列中插入一个数。问题:但是在边界处就不行了,求改
问题描述:
设口W 帮助H)
AI lglobal membersy
main
区
#include<stdio.h> X
uoidmain()
inta[11],i=0,key,j;
printf('please enterten numbers\n');
for(i=0;1<10;i++)
scanf(%d',&a[i]);
printf('pleaseenteranumber\n');
scanf(d',&key);
for(1=0;1<10;1++)
if(key>a[i-1]&&key<a[i])
for(j=11;j>i;j--)
a[j]=a[j-1];
a[i]=key;
I
For(i=0;1<11:i++)
printf(%d”,a[i]);
数组改错
leView
error(s), warning(s)
武入在文件1中香找
答
修改如下,供参考:
#include <stdio.h>
void main()
{
int a[11], i = 0, key, j;
printf("please enter ten numbers\n");
for (i = 0; i < 10; i++)
scanf("%d", &a[i]);
printf("please enter a number\n");
scanf("%d", &key);
for (i = 0; i < 10; i++){
if (key >= a[9])
{
a[10] = key;
break;
}
else{
if(key < a[i]){
for (j = 10; j > i; j--)
a[j] = a[j - 1];
a[i] = key;
break;
}
}
}
for (i = 0; i < 11; i++)
printf("%d ", a[i]);
}
答
使用动态分配 有用请采纳
#include<stdio.h>
#include<stdlib.h>
int main(){
int size = 10; // 初始空间
int count = 0; // 记录数组中当前元素个数
int* nums;
nums = (int*)malloc(sizeof(int) * size); // 动态分配空间
// 假设初始只有10个排好序的数
for(int i = 0; i < 10; i++){
scanf("%d", &nums[i]);
count += 1;
}
int otherN; // 输入的要插入到有序序列中的数
while (scanf("%d", &otherN) && otherN != -1){ // 以-1作为输入的结束条件
count += 1;
if(count > size){
size += 10; // 增大十个数的空间
nums = (int*)realloc(nums, sizeof(int) * size); // 重新分配空间
}
// 移动数据
int i;
for(i = count - 2; i >= 0; i--){
if (nums[i] > otherN)
nums[i + 1] = nums[i];
else // 找到小于otherN的第一个位置
break;
}
nums[i + 1] = otherN;
for(int j = 0; j < count; j++)
printf("%d ", nums[j]);
printf("\n");
}
}