C语言 n个布尔变量输出他们所有的真值组合。下面的程序哪里有问题?就用这个方法。不要说其他的办法。

#include<stdio.h>#defineMax_size100structlist{charstr[10];}list_1[Max_size];voidvalue... #include<stdio.h>
#define Max_size 100
struct list
{ char str[10];
}list_1[Max_size];
void value(list_1.str,int i,int n)
{ int j;
if(i==n+1)
{ for(j=0;j<=n;j++)
printf("%s ",list_1[j].str);
printf(" ");

}
else
{ list_1[i].str="True";
value(list_1.str,i+1,n);
list_1[i].str="False";
value(list_1,i+1,n);
}
}
void main(void)
{ int n,k;
printf("input the number of booleans:\n");
scanf("%d",&n);
if(n<1||n>Max_size)
{ printf("\nInproper Number n!\n");
exit(1);
}
for(k=0;k<n;k++)
list_1[k].str="True";
value(list_1,0,n-1);
}
展开
 我来答
匿名用户
2011-10-21
展开全部
修改如下:

//---------------------------------------------------------------------------

#include<stdio.h>
#include <string.h> //注意这里
#define Max_size 100
struct list
{ char str[10];
}list_1[Max_size];

void value(struct list *list_1,int i,int n) //注意这里
{ int j;
if(i==n+1)
{ for(j=0;j<=n;j++)
printf("%s ",list_1[j].str);
putchar('\n'); //此处用换行符似乎更好一些
//printf(" ");

}
else
{ strcpy(list_1[i].str,"True"); //注意这里
value(list_1,i+1,n); //注意这里
strcpy(list_1[i].str,"False"); //注意这里
value(list_1,i+1,n);
}
}
void main(void)
{ int n,k;
printf("input the number of booleans:\n");
scanf("%d",&n);
if(n<1||n>Max_size)
{ printf("\nInproper Number n!\n");
exit(1);
}
for(k=0;k<n;k++)
strcpy(list_1[k].str,"True"); //注意这里
value(list_1,0,n-1);
return 0;
}
//---------------------------------------------------------------------------
追问
追问1、strcpy(list_1[i].str, "True");语句为什么不能用list_1[i].str=="True";替换呢?
追问2、value()函数参数有list_1这个参数怎么就错了呢?
追答
C语言中除了在定义变量时初始化时可以用这种形式为字符数组赋值之外,其它的时候是不能这样为字符数组赋值的,要么用strcpy()函数,要么逐字符复制。一个字符串常量会被编译器看成一个指针(指向这个字符数组常量的指针)。

在声明(或者定义)函数时,参数列表中不能只出现参数名称,这是C语言的规定,必须写明参数的类型,而在原程序中没有写出参数的类型。

应该看看C语言的基础教程,这些都是C语言的基础知识。
tang5131298
2011-10-22
知道答主
回答量:6
采纳率:0%
帮助的人:1.1万
展开全部
看不怎么懂啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
terranlong
2011-10-21 · TA获得超过7295个赞
知道大有可为答主
回答量:2660
采纳率:66%
帮助的人:4280万
展开全部
已改,看是否符合
#include<stdio.h>
#define Max_size 100
struct list
{
char str[10];
}list_1[Max_size];
void value(int i,int n)
{
int j;
if(i==n+1)
{
for(j=0;j<=n;j++)
printf("%s ",list_1[j].str);
printf(" ");
}
else
{
strcpy(list_1[i].str, "True");
value(i+1,n);
strcpy(list_1[i].str, "False");
value(i+1,n);
}
}
void main(void)
{
int n,k;
printf("input the number of booleans:\n");
scanf("%d",&n);
if(n<1||n>Max_size)
{
printf("\nInproper Number n!\n");
exit(1);
}
for(k=0;k<n;k++)
strcpy(list_1[k].str, "True");
value(0,n-1);
}
追问
追问1、strcpy(list_1[i].str, "True");语句为什么不能用list_1[i].str=="True";替换呢?
追问2、value()函数参数有list_1这个参数怎么就错了呢?
追答
字符串赋值不能直接用=来赋值,一定要strcpy
你看看你的函数是怎么写的,而且,那已经是全局变量了,不需要通过参数传递进去
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-10-29
展开全部
#include<stdio.h>
#define Max_size 100
struct list
{
char str[10];
}list_1[Max_size];
void value(int i,int n)
{
int j;
if(i==n+1)
{
for(j=0;j<=n;j++)
printf("%s ",list_1[j].str);
printf(" ");
}
else
{
strcpy(list_1[i].str, "True");
value(i+1,n);
strcpy(list_1[i].str, "False");
value(i+1,n);
}
}
void main(void)
{
int n,k;
printf("input the number of booleans:\n");
scanf("%d",&n);
if(n<1||n>Max_size)
{
printf("\nInproper Number n!\n");
exit(1);
}
for(k=0;k<n;k++)
strcpy(list_1[k].str, "True");
value(0,n-1);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式