C语言编程问题

 我来答
洛学智栗芬
2020-04-12 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:32%
帮助的人:725万
展开全部
程序运行时先进入第一个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,即输出一个"&",两次输出后显示在屏幕上的当然就是"#&"了
犹畴莘焱
2020-04-12 · TA获得超过2.9万个赞
知道大有可为答主
回答量:1.1万
采纳率:33%
帮助的人:749万
展开全部
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)

................................

则不会有任何输出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
善幻天亓杰
2020-04-06 · TA获得超过2.9万个赞
知道大有可为答主
回答量:1.1万
采纳率:32%
帮助的人:915万
展开全部
#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;
}
我运行了没问题。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
巨欣禚思菱
2020-04-13 · TA获得超过3921个赞
知道大有可为答主
回答量:3133
采纳率:31%
帮助的人:237万
展开全部
1、
A
第一个是
八进制
的,第二个是
十六进制
的,第三个是
十进制
的啊。
2、
B
e的ascall码比b的
大三
啊,输出的格式是整型,所以是三,后者就相当于把
小写
的变大写吗,A和a相差是等于D和d相差的啊。
强烈建议这种问题自己调试就好了,不懂再问吗,要知道只是是靠自己慢慢积累的、
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
茂甜利谷之
2020-05-30 · TA获得超过3972个赞
知道大有可为答主
回答量:3179
采纳率:28%
帮助的人:393万
展开全部
#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语言很锻炼逻辑思维能力,利用好基本算法几乎就能学好了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式