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();
} 展开
#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();
} 展开
展开全部
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;
}
修改为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;
}
展开全部
你这么写main函数不标准,标准的写法是:
int main(void)
{
// 你的代码
return 0 ;
}
int main(void)
{
// 你的代码
return 0 ;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
主函数用int main(void),在结尾加return 0;
或者直接用void main().
或者直接用void main().
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p[i].signal=signal[i]; p[i].nh=nh[i];改为p[i].signal[i]=signal[i];
p[i].nh[i]=nh[i];
void main().
p[i].nh[i]=nh[i];
void main().
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询