求大家帮我详细点解析一下这几道简单的C语言填空选择题

6.14若变量已正确定义,在执行以下while语句时,输入字符A后,ch的值是:while(ch=getchar()=='A');答案是06.4C语言中,下列不合法的字符... 6.14 若变量已正确定义,在执行以下while语句时,输入字符A后,ch的值是:
while(ch=getchar()=='A');
答案是 0

6.4 C语言中,下列不合法的字符常量是
A '\xff' B '\65' C '&' D '\028'
答案 D

6.10 有以下程序:
#include<stdio.h>
main()
{ int c;
while((c=getchar())!='\n')
{ switch(c-'2')
{ case 0 :
case 1 :putchar(c+4);
case 2 :putchar(c+4);break;
case 3 :putchar(c+3);
default :putchar(c+2);break;
}
} printf("\n");
}
从第一列开始输入数据:2473<CR>,<CR>代表Enter键,程序的输出结果是:668977
展开
 我来答
hanjing5570
2011-03-06 · 超过18用户采纳过TA的回答
知道答主
回答量:26
采纳率:0%
帮助的人:46.9万
展开全部
第一题:while中的条件表达是ch=getchar()=='A',按照运算符优先级先做getchar()=='A',输入字符'A'时表达式的值为真,也就是1,再做ch=1,ch得到时值为1,同时表达式1,继续循环,继续计算条件ch=getchar()=='A',接下来应是回车键,getchar()=='A',结果为假,也就是0,ch=0,同时表达式为0,循环结束,所以最终ch的值为0,注意这题无论如何输入,循环结束后ch都为0.
第二题: 考的是转义字符,注意转义字符有三种,一种\号后跟一个字母,转义为一个其它字符,一种是\后跟0再跟1到3位的八进制数,转义为此八进制数ASCII码所代表的字符,一种是\后跟x再跟1到2位的十六进制数,转义为此十六进制数ASCII码所代表的字符,D选项应属于第二种情况,但0后跟的应是八进制数,但28是非法的八进制数(所用的数码应是0——7)。
第三题:此题的while条件表达式为(c=getchar())!='\n',括号优先级高,先执行c=getchar()(将输入的字符赋给c),再判断c的值是不是!='\n',不等于'\n'继续,否则结束循环,(注意用getchar()输入的是字符)第一个输入'2',执行循环体内语句,switch('2'-'2'),从case 0入口,putchar('2'+4)(输出字符6),putchar('2'+4)(输出字符6),break结束switch语句,继续执行下一次循环。以后具体执行情况不再分析了,请自己分析。
sun_siliang
2011-03-06 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:5554万
展开全部
6.14 while(ch=getchar()=='A')表示getchar()的返回值与'A'比较,将比较结果赋给ch,若输入字符A后,getchar()返回'A',与'A'相等,ch的值是1。可以用下面程序检验。
#include<stdio.h>
void main ()
{
char ch;
while(ch=getchar()=='A')
{
printf("ch=%d",ch);
}
}
6.4 '\028'中0表示8进制,8进制的数符是0~7,没有8。

6.10
输入2,执行
case 0 :
case 1 :putchar(c+4);
case 2 :putchar(c+4);break;
输出66

输入4,执行
case 2 :putchar(c+4);break;
输出8

输入7,执行
default :putchar(c+2);break;
输出9

输入3,执行
case 1 :putchar(c+4);
case 2 :putchar(c+4);break;
输出77
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fzy范忠云
2011-03-06 · TA获得超过459个赞
知道小有建树答主
回答量:117
采纳率:100%
帮助的人:76.8万
展开全部
6.14
输入A的时候,while(ch=getchar()=='A');A等于A,执行while后面的 ; ,";"是空语句,程序什么都不干,然后你输入回车的时候 ,程序继续把(getchar()='\n')=='A'的值赋给ch,显(getchar()='\n')=='A'是不成立的,所以ch=0了
6.4
D '\028' 以0开头的是八进制数的表示方式,八进制数中不能出现8,因此D答案错误
6.10
#include<stdio.h>
main()
{ int c;
while((c=getchar())!='\n')
{ switch(c-'2')
{ case 0 :
case 1 :putchar(c+4);
case 2 :putchar(c+4);break;
case 3 :putchar(c+3);
default :putchar(c+2);break;
}
} printf("\n");
}
c=getchar()语句是单个字符读入的,因为getchar()函数每次只能读进一个字符,而且读进的都是char型数据。当你输入2473回车的时候,程序是这样执行的,先读入第一个字符2,执行到switch语句的时候程序选择
case 0 :
case 1 :putchar(c+4);语句执行,因为'2'-'2'=0,执行输入的结果是2+4=6
但由于以上没有加break;所以程序继续执行
case 2 :putchar(c+4);break;语句 2+4=6,就再次输出了一个6
再读第二个字符4,'4'-'2'=2,执行
case 2 :putchar(c+4);break; 输出4+4=8
再读第三个字符7,'7'-'2'=5 执行
default :putchar(c+2);break;语句,输出7+2=9
再读入第四个字符3 '3'-'2'=1 执行
case 1 :putchar(c+4); 输出3+4=7但因为这里也没有break;语句,所以会继续执行到
case 2 :putchar(c+4);break; 语句,就再一次输出7
等读入第五个字符的时候是回车,while语句结束,
所以程序输出来的结果就是668977了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
longwei111_
2011-03-06
知道答主
回答量:21
采纳率:0%
帮助的人:17.8万
展开全部
6.14 输入时实际上是输了一个'A‘和一个回车键其ASCⅡ值为10;而getchar()是从键盘缓冲区读一个字符;因此第一次循环时ch=1,第二次循环时回车键不等于'A',ch=0同时结束循环,即ch=0。
6.4 '\028' 其中\0表示该数为八进制 而八进制数中是没有8的,所以不合法。
6.10 当输入2是为case 0 因其后没有 break;语句,所以执行case1 输出6,还是没有break;语句
执行case2输出6,有break了返回循环体;其他数的输出同理。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式