c语言求教!需要详细解答!

17.统计从终端输入的字符中每个大写字母的个数。用#号作为输入结束标志,请填空。#include 〈stdio.h〉#include 〈ctype.h... 17.统计从终端输入的字符中每个大写字母的个数。用#号作为输入结束标志,请填空。

#include 〈stdio.h〉

#include 〈ctype.h〉
void main( )
{
   int num[26],i; 

   char c,*p=&c;

   for(i=0; i<26; i++)  num[i]=0;

   while( ( ① =getchar())!=‘#‘)   /* 统计从终端输入的大写字母个数 */

      if(isupper(*p)) ② ;

   for(i=0;i<26;i++)               /* 输出大写字母和该字母的个数 */

      if(num[i]) printf("%c: %d\n", i+’A‘, ③ );

}
A.① c ② num[i]++ ③ num[i]
B.① c ② num[c-'A']++ ③ num[i]
C.① p ② num[c-'A']++ ③ num[i]
D.① *p ② num[i]++ ③ num[i]
展开
 我来答
百度网友f3b3e02
2017-12-27 · TA获得超过2156个赞
知道小有建树答主
回答量:821
采纳率:90%
帮助的人:584万
展开全部
本题需弄清楚的是数组num的下标问题,从最后的输出:
for(i=0;i<26;i++) /* 输出大写字母和该字母的个数 */
if(num[i]) printf("%c: %d\n", i+’A‘, ③ );
可以看出,num[i]中的i的取值范围是0-25,也就是说,num[0]内存的是字母‘A’的个数,num[1]内存的是字母‘B’的个数,......,以此类推。我们就会发现,num下标变量i和字符变量c作下标时的对应压关系,应该是每一个具体的i的值对应c-'A',我们暂时称之为“结论1”。
这样,也就不难看出,③的内容应该是字母表中‘A’后第i个字母的个数,也就是num[i]。
另外需要弄清楚的是变量c和p,
根据定义:char c,*p=&c;我们很容易知道:c是字符变量,而p是指针变量,且指向变量c的地址,也就是*p的值就是变量c的值。我们暂时称之为“结论2”。
由 while( ( ① =getchar())!=‘#‘) /* 统计从终端输入的大写字母个数 */
因为getchar()的返回值是一个字符,我们暂时称之为“结论3”。①处可以填入的内容就应该是 c 或者 *p(两种写法均可,但不能是 p,因为p是指针,存的是地址,而不是字符 ) 。
再由if(isupper(*p)) ② ;
我们可以知道,此处应该是对输入的字符进行统计(num做加1运算),我们暂时称之为“结论4”。
再综合“结论1”和“结论4”,我们就会得出②处应该是: num[c-'A']++。
综上所述,答案为B
White_MouseYBZ
2017-12-27 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6645万
展开全部
B正确,选B。
① c——把输入的字符赋给c
② num[c-'A']++——在if(isupper(*p))成立时c-'A'即是大写字母的顺序下标
③ num[i]——i==0时num[0]是'A'的个数,依此类推。这一项4个选项一样,所以实际上此题只有①②两个判断
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式