| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 567 人关注过本帖
标题:[求助]为什么这段C语言有时行有时不行?
只看楼主 加入收藏
zzxjk
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-1-18
收藏
 问题点数:0 回复次数:6 
[求助]为什么这段C语言有时行有时不行?

/*请大家看看,这是一段输入学生成绩的程序,
结果是自动排列大小,统计出优,中,差等级,
但到了按大小排列时就出错,为什么?*/

#include <stdio.h>
#include <string.h>
sort(int a[],int n, char style)
{
int i,j,m,k,max,min,sum,aver,e1,e2,e3,e4,e5;
printf("请输入分数\n");
for(k=0;k<n;k++)
{
scanf("%d",&a[k]);
if (a[k]<0 || a[k]>100)
{ printf("error!\n");
scanf("%d",&a[k]);
}
}
for(j=0;j<n-1;j++)
{
for(i=0;i<=j;i++)
{
if(a[i]>a[i+1])
{
m=a[i];
a[i]=a[i+1];
a[i+1]=m ;
}
}

}


if (style=='a')
{
printf("从高到低\n");
for(k=n-1;k>=0;k--)
printf("%d ",a[k]);
printf("\n");
}
else if(style=='d')
{
printf("从低到高\n");
for (k=0;k<n;k++)
printf("%d ",a[k]);
printf("\n");
}

max=a[0];
min=a[0];
sum=0;
for(i=0;i<n;i++)
{
sum=sum+a[i];
if (max <=a[i]) max=a[i];
if (min >=a[i]) min=a[i];
}
printf("sum=%d\n max=%d\n max=%d\n aver=%d\n",sum,max,min,sum);
e1=e2=e3=e4=e5=0;
for(i=0;i<n;i++)
{
if (a[i]>=90) e1=e1+1;
else if(a[i]>=80 && a[i]<90) e2=e2+1;
else if(a[i]>=70 && a[i]<80) e3=e3+1;
else if(a[i]>=60 && a[i]<70) e4=e4+1;
else if(a[i]<60) e5=e5+1;
}
printf("优=%d,良=%d,中=%d,及格=%d,不及格=%d",e1,e2,e3,e4,e5 );
}

main()
{
char x;
int z;
int s[30];
printf("请输入学生个数\n");
scanf("%d",&z);
printf("输入小写字母d为降序方式,输入小写字母a为升序方式\n");
scanf("%s",&x);
if (x!='a' && x!='d')
{
printf("出错!一定要是a或d,请修正\n");
printf("输入d为降序方式,输入a为升序方式\n");
scanf("%s",x);
}
sort(s,z,x);
}

搜索更多相关主题的帖子: C语言 时行 
2007-01-18 22:44
zzxjk
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-1-18
收藏
得分:0 
1111111111111
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

2007-01-18 23:17
神秘失恋
Rank: 1
等 级:新手上路
帖 子:663
专家分:0
注 册:2007-1-6
收藏
得分:0 
什么意思?

上帝之手.........
2007-01-19 00:22
dragonfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1024
专家分:0
注 册:2006-3-20
收藏
得分:0 
初步看了一下,排序好像有问题,改成:
for(j=0;j<n-1;j++)
{
for(i=j+1;i<n;i++)
{
if(a[j]>a[i])
{
m=a[i];
a[i]=a[j];
a[j]=m ;
}
}

}


2007-01-19 09:08
jianchinuli
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-1-19
收藏
得分:0 

大哥!!!
你写的错误也太多了点吧??!!!
一小时后我把我写的传上来吧

只是没有vc,没调试
一会你自己调试把

2007-01-19 13:13
jianchinuli
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-1-19
收藏
得分:0 

重写了一遍:
#include <stdio.h>
#include <string.h>
sort(float a[],int n, char style)
{
int i,j,t,e1,e2,e3,e4,e5;
float sum,aver,temp;
printf("请输入分数\n");
for(i=0;i<n;i++)
{
scanf("%f",&a[i]);
if (a[i]<0 || a[i]>10)
{
printf("error!\n");
i++;
printf("请重新输入第%d的学生的分数.",i);
i=i-2;
}
}


for(j=0;j<n-1;j++)
{
t=j;
for(i=j+1;i<n;i++)
{
if(a[t]>a[i]) t=i;
}
if(t!=j)
{
temp=a[j];
a[j]=a[t];
a[t]=temp;
}
}

if (style=='a')
{
printf("从高到低\n");
for(i=n-1;i>=0;i--)
printf("%f ",a[i]);
printf("\n");
}
else if(style=='d')
{
printf("从低到高\n");
for (i=0;i<n;i++)
printf("%f ",a[i]);
printf("\n");
}
sum=a[0];
for(i=1;i<n;i++)
sum+=a[i];
aver=sum/(n-1);
printf("sum=%f\n max=%f\n max=%f\n aver=%f\n",sum,a[n-1],a[0],aver);
e1=e2=e3=e4=e5=0;
for(i=0;i<n;i++)
{
if (a[i]>=90) e1++;
else if(a[i]>=80) e2++;
else if(a[i]>=70) e3++;
else if(a[i]>=60) e4++;
else e5++;
}
printf("优=%d,良=%d,中=%d,及格=%d,不及格=%d",e1,e2,e3,e4,e5 );
}

main()
{
char x;
int z;
float s[30];
printf("请输入学生个数\n");
scanf("%d",&z);
printf("输入小写字母d为降序方式,输入小写字母a为升序方式\n");
scanf("%s",&x);
if (x!='a' && x!='d')
{
printf("出错!一定要是a或d,请修正\n");
printf("输入d为降序方式,输入a为升序方式\n");
scanf("%s",x);
}
sort(s,z,x);
}

2007-01-19 14:00
jianchinuli
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-1-19
收藏
得分:0 

你写错了一些:
1.sort函数中,数组应该是单精度的,和你在主函数中声明的类型应该相同.相应的应该变i/o函数中的数据格式.
2.变量定义的够用就可以了,不要太多,容易乱.
3.在for(i=0;i<n;i++)
{
scanf("%f",&a[i]);
if (a[i]<0 || a[i]>10)
{
printf("error!\n");
i++;
printf("请重新输入第%d的学生的分数.",i);
i=i-2;
}
}
这里,输错重新输入后,应该再次检查是否输对.
4.排序.我用的是选择排序法.看你原来写的好象也是,但不正确.
5.排好序之后,最大最小就不用在判断了,直接输出数组中的值即可.排序的作用之一就是以有序的数据为基础简化一些算法.
6.平均值你没求,输出的是最大值.从你的输出一眼就可以看出来.
7.一些可以简写的没有简写,例如:+=,++等等,不过问题不大.



如果你复制上面的代码,通不过的话,如果提示 非法字符 错误,就看一下是不是半角字符.

2007-01-19 14:12
快速回复:[求助]为什么这段C语言有时行有时不行?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020890 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved