C语言程序,运行提示:需要逻辑0或非0在MAIN函数中 20

#include"stdio.h"#include"math.h"#include"stdlib.h"structswith{intsignal[10];doublenh... #include "stdio.h"
#include"math.h"
#include"stdlib.h"
struct swith
{
int signal[10];
double nh[10];
}
main()
{
int i,j,k=10,signal[10]={0,1,0,0,1,1,0,0,0,1};
double nh[10];
struct swith p[10],s;
for(i=0;i<k;i++)
{
nh[i]=(double)rand()/(RAND_MAX+1.0);
;
printf("%f",nh[i]);
}
for(i=0;i<k;i++)
{
;
p[i].signal=signal[i];
p[i].nh=nh[i];
}
for(i=0;i<k;i++)
{
for(j=0;j<k;j++)
{
if(p[i].nh>p[j].nh)
{
s=p[i];
p[i]=p[j];
p[j]=s;
}
}
printf("%d",p[i].signal);
}
getch();
}
展开
 我来答
_whales
2013-02-27 · TA获得超过2279个赞
知道大有可为答主
回答量:1814
采纳率:85%
帮助的人:495万
展开全部
1)if(p[i].nh>p[j].nh) 这个地方产生 " 运行提示:需要逻辑0或非0在MAIN函数中"的错误!!!

修改为if(greaterThan( p[i].nh,p[j].nh,10))
然后定义函数
int greaterThan( int *a,int *b,int n){
for(i=0;i<n;i++)
if(a[i]>b[i]return 1;
else if(a[i]<b[i])return 0;
return 0;
};

2)p[i].signal=signal[i];p[i].nh=nh[i]; 这个地方,不对,编译不过去。
修改为p[i].signal[i]=signal[i];p[i].nh=nh[i];
3)printf("%d",p[i].signal);不对,改为for(i=0;i<10;i++)printf("%d ",p[i].signal[i]);

4)main(){} 这个地方不规范,标准为 int main(){ ...... return 0;}
5)struct swith
{
int signal[10];
double nh[10];
} 这个地方加分号,不然 会变成main函数的返回值类型;
6) printf("%f",nh[i]);虽然可能不会出错,但是格式是不对的,应改为printf("%lf",nh[i]);

double <===> long float 所以 格式为 %lf, float 格式为%f
修改后大约如下

#include "stdio.h"
#include"math.h"
#include"stdlib.h"
struct swith{
int signal[10];
double nh[10];
};
/*int greaterThan( int *a,int *b,int n)
比较两个数组的大小;返回1 表示 a>b,0 表示a<=b

从第一个开始,比较前n个元素;
出现第一个大于,真; 返回 1;
第一个小于,假; 返回 0;
一直等于,假; 返回 0;

一直相等,见到第一个大于,后面不要再判断了,就是greaterThan 返回 1(真)
一直相等,见到第一个小于,后面不要再判断了,绝对不是greaterThan 返回 0(假)

永远相等,一定不是greaterThan, 返回 0(假)
*/
int greaterThan( int *a,int *b,int n){
for(i=0;i<n;i++)
if(a[i]>b[i]return 1; /*第一个大于,返回 1(真) */

else if(a[i]<b[i])return 0; /*见到第一个小于,返回 0(假) */
return 0; /* 永远相等,返回 0(假) */
};
int main()
{
int i,j,k=10,signal[10]={0,1,0,0,1,1,0,0,0,1};
double nh[10];
struct swith p[10],s;
for(i=0;i<k;i++){
nh[i]=(double)rand()/(RAND_MAX+1.0);
printf("%lf",nh[i]);
}
for(i=0;i<k;i++){
p[i].signal[i]=signal[i];
p[i].nh[i]=nh[i];
}
for(i=0;i<k;i++)
{
for(j=0;j<k;j++)
{
if(greaterThan(p[i].nh,p[j].nh,10))
{
s=p[i];
p[i]=p[j];
p[j]=s;
}
}
for(j=0;j<10;j++)
printf("%d",p[i].signal[j]);
}
getch();
return 0;
}
傲世修罗王
2011-07-08 · TA获得超过1085个赞
知道小有建树答主
回答量:1034
采纳率:0%
帮助的人:734万
展开全部
你这么写main函数不标准,标准的写法是:
int main(void)
{
// 你的代码
return 0 ;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sayersyang
2011-07-08 · TA获得超过205个赞
知道答主
回答量:69
采纳率:0%
帮助的人:72万
展开全部
主函数用int main(void),在结尾加return 0;
或者直接用void main().
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tdfzq
2011-07-08 · TA获得超过839个赞
知道小有建树答主
回答量:771
采纳率:75%
帮助的人:196万
展开全部
p[i].signal=signal[i]; p[i].nh=nh[i];改为p[i].signal[i]=signal[i];
p[i].nh[i]=nh[i];
void main().
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式