这道编程题用c语言怎样写?
这道题目,方法很多,True和False输入的是字符串,计算的其实是0和1,所以只要用1个字节记录每次输入的0和1就可以了。我这里代码用动态创建的字符串数组来记录输入,每一个字符串表示一组输入,每一个字符的值(0或者1)对应(True或者False)。包含输入验证。
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define DSIZE 2 //数据的组数,表示有几组数据的输入,题目演示中是2组,想改修改该值
int main()
{
int i,j,n,s;
char inStr[6];
char **list=NULL,*nlist=NULL;
//=================input============================
list=(char **)malloc(sizeof(char *)*DSIZE);
if(!list)
return 0;
for(i=0;i<DSIZE;i++)
{
n=0;
while(n<1 || n>100)
scanf("%d",&n);
nlist=(char *)malloc(sizeof(char)*(n+1));
if(!nlist)
return 0;
nlist[n]=0;
for(j=0;j<n;j++)
while(1)
{
scanf("%s",inStr);
if(!strcmp(inStr,"True"))
nlist[j]=1;
if(!strcmp(inStr,"False"))
nlist[j]=0;
if(strcmp(inStr,"True") && strcmp(inStr,"False"))
printf("无效输入!必须输入True或者False!\n");
else
break;
}
list[i]=nlist;
}
//===============output=======================
for(i=0;i<DSIZE;i++)
{
s=0;
n=strlen(list[i]);
for(j=0;j<n;j++)
s+=list[i][j];
printf("%d\n",s);
}
return 0;
}
您可以先不考虑输入别的情况,只考虑true和false的方式,稍微简化一下吗?。我不太看得懂
输入验证就只是一个if而已,strcmp是C语言内部函数,比较两个字符串相同返回0.
不考虑其他输入,你就把下面这句删掉。
if(strcmp(inStr,"True") && strcmp(inStr,"False"))
printf("无效输入!必须输入True或者False!\n");
else
其他都是基本语句。题目每组包含输入多个True和False,这个代码就是当你输入True的时候,在字符串的一个元素中保存1,输入False的首行保存0。
比如题目图中的输入:
2
true
false
1
false
那么代码就会创建一个字符串数组,包含2个字符串“10”和“0”,这两个字符串分别对应上面两组输入,每个字符串长度就是上面的2和1,每个字符串的内容就是上面的true和false。
这样做,最后输出True的个数也就简单了,只要把字符里所有元素累加就可以了。
这样能听懂么。