C语言编程问题
7个回答
展开全部
程序运行时先进入第一个switch语句,即switch(a>0),你可能认为它是值是2,所以直接执行default了吧?其实它的值不是2,而是1,因为a>0是一个表达式,它返回的是真或假的值,因为a=2,是大于0的,所以这个式子成立,所以返回的值为真,在C中"真"用1表示,所以当a=2时switch(a>2)就等价于switch(1),执行第二个switch语句,即执行switch(b<0)因为b=7,是不小于0的,返回值为假(C中用0表示),所以这个语句等价于switch(0),而这个switch里没有case
0,所以跳出这个switch,不过要注意switch(a>0)中的case
1:中是一个switch语句,而这个语句后面是没有break的,所以它要再执行
case
0:
switch(c==5)
{
case
0: printf("*");
break;
case
1: printf("#");
break;
case
2: printf("$");
break;
}
这个部分,c==5的返回值是1,所以输出一个"#",而case
0:switch(c==0)这个语句后面还是没有break,所以就要再执行default,即输出一个"&",两次输出后显示在屏幕上的当然就是"#&"了
0,所以跳出这个switch,不过要注意switch(a>0)中的case
1:中是一个switch语句,而这个语句后面是没有break的,所以它要再执行
case
0:
switch(c==5)
{
case
0: printf("*");
break;
case
1: printf("#");
break;
case
2: printf("$");
break;
}
这个部分,c==5的返回值是1,所以输出一个"#",而case
0:switch(c==0)这个语句后面还是没有break,所以就要再执行default,即输出一个"&",两次输出后显示在屏幕上的当然就是"#&"了
展开全部
switch后面是个返回bool的表达式,在这里a>0,所有返回为true,而在c,c++里面bool的true是1,false是0,比如你可以用int
i
=
(a>0),设断点的话可以得到i的值为1.
在题目中switch(a>0)后与case
1符合,所以接着执行后面的语句而不是default.由于后面的switch(b<0)没用对应的case,而在case
1:
switch(b<0)
后没有break,所以会执行到case
0,c=5成立,执行case
1: printf("#");
break;输出了#,同样case
0:
switch(c==5)这个也没有break,会继续执行到default:
printf("&");输出了&,所以输出结果为#&。
如果在case
1:
switch(b<0)
的后面加break,即改为
switch(a>0)
{
case
1:
switch(b<0)
{
case
1: printf("@");
break;
case
2:
printf("!"); break;
}
break;----------------------------->此处添加break
case
0:
switch(c==5)
................................
则不会有任何输出。
i
=
(a>0),设断点的话可以得到i的值为1.
在题目中switch(a>0)后与case
1符合,所以接着执行后面的语句而不是default.由于后面的switch(b<0)没用对应的case,而在case
1:
switch(b<0)
后没有break,所以会执行到case
0,c=5成立,执行case
1: printf("#");
break;输出了#,同样case
0:
switch(c==5)这个也没有break,会继续执行到default:
printf("&");输出了&,所以输出结果为#&。
如果在case
1:
switch(b<0)
的后面加break,即改为
switch(a>0)
{
case
1:
switch(b<0)
{
case
1: printf("@");
break;
case
2:
printf("!"); break;
}
break;----------------------------->此处添加break
case
0:
switch(c==5)
................................
则不会有任何输出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include
<stdio.h>
int
main
()
{
char
a[30]
=
{0},
s;
int
n
=
0,
m
=
0,
i
=
0;
gets(a);
scanf("%c",
&s);
for
(i
=
0;
a[i]
!=
0;
i++)//计算字符串的长度
n++;
for
(i
=
0;
a[i];
i++)
if(a[i]
==
s)//计算出现s的次数
m++;
printf("%d
%d\n",
n,
m);
return
0;
}
我运行了没问题。。
<stdio.h>
int
main
()
{
char
a[30]
=
{0},
s;
int
n
=
0,
m
=
0,
i
=
0;
gets(a);
scanf("%c",
&s);
for
(i
=
0;
a[i]
!=
0;
i++)//计算字符串的长度
n++;
for
(i
=
0;
a[i];
i++)
if(a[i]
==
s)//计算出现s的次数
m++;
printf("%d
%d\n",
n,
m);
return
0;
}
我运行了没问题。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、
A
第一个是
八进制
的,第二个是
十六进制
的,第三个是
十进制
的啊。
2、
B
e的ascall码比b的
大三
啊,输出的格式是整型,所以是三,后者就相当于把
小写
的变大写吗,A和a相差是等于D和d相差的啊。
强烈建议这种问题自己调试就好了,不懂再问吗,要知道只是是靠自己慢慢积累的、
A
第一个是
八进制
的,第二个是
十六进制
的,第三个是
十进制
的啊。
2、
B
e的ascall码比b的
大三
啊,输出的格式是整型,所以是三,后者就相当于把
小写
的变大写吗,A和a相差是等于D和d相差的啊。
强烈建议这种问题自己调试就好了,不懂再问吗,要知道只是是靠自己慢慢积累的、
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
int
main()
{
int
digit,letter,space,other;
char
ch;
digit=letter=space=other=0;
ch=getchar();
while(ch!='\n')
{
if(ch>='0'&&ch<='9')
digit++;
else
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
letter++;
else
if(ch=='
')
space++;
else
other++;
ch=getchar();
}
printf("%d
%d
%d
%d",letter,digit,space,other);
return
0;
}
仔细看哦,只加了一行==|||
分给楼上吧,ta比我快,我来说明原因吧,
getchar()函数一次只能输入一个字符,而你统计的是一个字符串的类型个数,所以吧这个函数加载到循环语句,用循环来依次统计字符数据
c语言很锻炼逻辑思维能力,利用好基本算法几乎就能学好了
int
main()
{
int
digit,letter,space,other;
char
ch;
digit=letter=space=other=0;
ch=getchar();
while(ch!='\n')
{
if(ch>='0'&&ch<='9')
digit++;
else
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
letter++;
else
if(ch=='
')
space++;
else
other++;
ch=getchar();
}
printf("%d
%d
%d
%d",letter,digit,space,other);
return
0;
}
仔细看哦,只加了一行==|||
分给楼上吧,ta比我快,我来说明原因吧,
getchar()函数一次只能输入一个字符,而你统计的是一个字符串的类型个数,所以吧这个函数加载到循环语句,用循环来依次统计字符数据
c语言很锻炼逻辑思维能力,利用好基本算法几乎就能学好了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询