请问下面C程序哪错了?
答案:6 悬赏:30 手机版
解决时间 2021-11-26 21:42
- 提问者网友:战皆罪
- 2021-11-26 11:20
请问下面C程序哪错了?
最佳答案
- 五星知识达人网友:底特律间谍
- 2021-11-26 12:47
哥们,帮你改好了,你的冒泡排序法有问题,改后代码如下
#include
void main()
{
int i,j,tmp,n=0,score[100];
for(i=0;;i++)
{
printf("请输入第%d个学生的成绩:",++n);
scanf("%d",&score[i]);
if(score[i]>=999)
break;
}
for(j=0;j for(i=0;i if(score[i] {
tmp=score[i+1];
score[i+1]=score[i];
score[i]=tmp;
}
printf("经排序后的成绩为:\n");
for(i=0;i printf("%d\t",score[i]);
printf("\n");
}
#include
void main()
{
int i,j,tmp,n=0,score[100];
for(i=0;;i++)
{
printf("请输入第%d个学生的成绩:",++n);
scanf("%d",&score[i]);
if(score[i]>=999)
break;
}
for(j=0;j
tmp=score[i+1];
score[i+1]=score[i];
score[i]=tmp;
}
printf("经排序后的成绩为:\n");
for(i=0;i
printf("\n");
}
全部回答
- 1楼网友:一把行者刀
- 2021-11-26 18:10
貌似你用的是冒泡排序?你两个for循环设置的条件出错了,你换成
for(j=1;j for(i=0;i if(score[i]>score[i+1])
{
tmp=score[i+1];
score[i+1]=score[i];
score[i]=tmp;
}
试试看,第一个循环的j代表要比较的次数,因为有n个数,所以做多要比较n-1次,而i代表每一轮比较时,数组的下标。当下标较小的数组值大于较大的数组值时,将两个数调换顺序。经排序后数组就为递升的有序数组了。
for(j=1;j
{
tmp=score[i+1];
score[i+1]=score[i];
score[i]=tmp;
}
试试看,第一个循环的j代表要比较的次数,因为有n个数,所以做多要比较n-1次,而i代表每一轮比较时,数组的下标。当下标较小的数组值大于较大的数组值时,将两个数调换顺序。经排序后数组就为递升的有序数组了。
- 2楼网友:从此江山别
- 2021-11-26 16:58
错误主要在于排序算法。。。你设想一下啊,如果你输入的是 288 1000,,此时 n 为3,数组里面只有两个元素 288和1000,那么:
for(j=1;j for(i=j+1;i if(score[i] {
tmp=score[i+1];
score[i+1]=score[i];
score[i]=tmp;
}
升序可改为:
for(j=0;j for(i=j+1;i if(score[ j ]>score[ i ])
{
tmp=score[ i ];
score[ i ]=score[ j ];
score[ j ]=tmp;
}
降序可改为:
for(j=0;j for(i=j+1;i if(score[ j ] {
tmp=score[ i ];
score[ i ]=score[ j ];
score[ j ]=tmp;
}
for(j=1;j
tmp=score[i+1];
score[i+1]=score[i];
score[i]=tmp;
}
升序可改为:
for(j=0;j
{
tmp=score[ i ];
score[ i ]=score[ j ];
score[ j ]=tmp;
}
降序可改为:
for(j=0;j
tmp=score[ i ];
score[ i ]=score[ j ];
score[ j ]=tmp;
}
- 3楼网友:等灯
- 2021-11-26 15:55
#include
void main()
{
int i,j,tmp,n=1,score[1000]; ===》n 为什么不从0开始?从零开始的话,后面代码需要跟着调整。看这样的代码好累!我也是C初学者。
for(i=0;;i++)
{
printf("请输入第%d个学生的成绩:",n++);
scanf("%d",&score[i]);
if(score[i]>=999) ===》姑且称之为“准死循环”,一不小心就改写score[1000]及后面的内存!!!应为if(i<1000)
break;
}
for(j=1;j for(i=j+1;i if(score[i] {
tmp=score[i+1];
score[i+1]=score[i];
score[i]=tmp;
}
printf("经排序后的成绩为:\n");
for(i=0;i printf("%d\t",score[i]);
printf("\n");
}
void main()
{
int i,j,tmp,n=1,score[1000]; ===》n 为什么不从0开始?从零开始的话,后面代码需要跟着调整。看这样的代码好累!我也是C初学者。
for(i=0;;i++)
{
printf("请输入第%d个学生的成绩:",n++);
scanf("%d",&score[i]);
if(score[i]>=999) ===》姑且称之为“准死循环”,一不小心就改写score[1000]及后面的内存!!!应为if(i<1000)
break;
}
for(j=1;j
tmp=score[i+1];
score[i+1]=score[i];
score[i]=tmp;
}
printf("经排序后的成绩为:\n");
for(i=0;i
printf("\n");
}
- 4楼网友:拾荒鲤
- 2021-11-26 14:21
看了你的代码,发现错误有3:
1.不能if(score[i]>=999) break;而应该是if(i>=999) break;
2.for(j=1;j 3.for(i=j+1;i
1.不能if(score[i]>=999) break;而应该是if(i>=999) break;
2.for(j=1;j
- 5楼网友:空山清雨
- 2021-11-26 13:49
#include
int main()
{
int i,j,tmp,n=1,score[1000]={0};
for(i=0;i<1001;i++) // 这里对好加一个 1<1001 ,因为score[]长度最大为1000
{
printf("请输入第%d个学生的成绩:",n++);
scanf("%d",&score[i]);
if(score[i]>=999)
break;
}
for(j=0;j for(i=j+1;i if(score[i] {
tmp=score[j];
score[j]=score[i];
score[i]=tmp;
}
printf("经排序后的成绩为:\n");
for(i=0;i printf("%d\t",score[i]);
printf("\n");
return 0;
}
运行结果:
请输入第1个学生的成绩:89
请输入第2个学生的成绩:67
请输入第3个学生的成绩:99
请输入第4个学生的成绩:85
请输入第5个学生的成绩:96
请输入第6个学生的成绩:100
请输入第7个学生的成绩:10000
经排序后的成绩为:
67 85 89 96 99 100
请按任意键继续. . .
int main()
{
int i,j,tmp,n=1,score[1000]={0};
for(i=0;i<1001;i++) // 这里对好加一个 1<1001 ,因为score[]长度最大为1000
{
printf("请输入第%d个学生的成绩:",n++);
scanf("%d",&score[i]);
if(score[i]>=999)
break;
}
for(j=0;j
tmp=score[j];
score[j]=score[i];
score[i]=tmp;
}
printf("经排序后的成绩为:\n");
for(i=0;i
printf("\n");
return 0;
}
运行结果:
请输入第1个学生的成绩:89
请输入第2个学生的成绩:67
请输入第3个学生的成绩:99
请输入第4个学生的成绩:85
请输入第5个学生的成绩:96
请输入第6个学生的成绩:100
请输入第7个学生的成绩:10000
经排序后的成绩为:
67 85 89 96 99 100
请按任意键继续. . .
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯