首页 > 试题广场 >

以下能补全程序,正确功能的选项是

[单选题]
以下程序统计给定输入中每个大写字母的出现次数(不需要检查输入合法性)
void AlphabetCounting(char a[],int n){
  int count[26] = {}, i, kind = 10;
  for(i = 0;i < n;++i) (1);
  for(i = 0;i < 26;++i){
    if(++kind > 1) putchar(';');
    printf("%c=%d", (2));
   }
}
以下能补全程序,正确功能的选项是()
  • ++count[a[i]-'Z'];'Z'-i,count['Z'-i]
  • ++count['A'-a[i]];'A'+i,count[i]
  • ++count[i];i,count[i]
  • ++count['Z'-a[i]];'Z'-i,count[i]
  • ++count[a[i]];'A'+i,count[a[i]]
推荐
题意为输入设定全部是大写(ASCII码A-Z为65-90,递增),所以有两种情况:
一、count[0;25]存储A-Z的个数,即count[0]存储A的个数,于是(1)++count[a[i]-'A'];(2)'A'+i,count[i];
二、count[0;25]存储Z-A的个数,即count[0]存储Z的个数,于是(1)++count['Z'-a[i]];(2)'Z'-i,count[i]。
所以答案为D。
编辑于 2016-04-16 15:46:58 回复(4)
对应的ASCII码:
小写字母:97-122
大写字母:65-90
发表于 2016-12-11 19:55:30 回复(0)
int count[26] 初始化26个0元素的数组,对应着每个大写字母的个数
++count['Z'-a[i]]  'Z'-a[i] 计算ascii码差,即数组中的位置,然后找到对应字母的个数加一
最后从Z-A输出个数
实现从A-Z输出的代码
void AlphabetCounting(char a[], int n) {
	int count[26] = {}, i, kind = 0;
	for (i = 0; i < n; ++i) {  
		++count[a[i] - 'A'];
	}
	for (i = 0; i < 26; ++i) {
		if (++kind > 1) putchar(';');
		printf("%c=%d", 'A' + i, count[i]);
	}
}



发表于 2020-11-23 18:01:41 回复(2)
B中的第一空改为++count[a[i]- 'A' ];那么B也正确
发表于 2016-05-27 21:35:32 回复(0)
在实现中,我们需要对每个字符a[i]进行计数。因此,在循环体中,我们可以使用++count['Z' - a[i]]来将对应字母的计数值加一。这里通过'Z' - a[i]将字母映射到数组下标,以实现对应字母计数值的增加。
count是按照Z-A的顺序计数

在输出结果时,与其它选项相同,我们需要遍历整个字母表,并对每个字母进行处理。因此,在第二个for循环中,可以使用(char)('A' + i)来得到当前字母,并使用count['Z' - i]来获得对应的计数值。

发表于 2023-10-19 20:51:19 回复(0)
我好笨啊, 我以为题目意思是大小写混合输入,然后我看了半天没看懂。
++count['Z'-a[i]]
的作用是把输入的大写字符从Z-A计数,如输入Z,count[0] = 1;
然后遍历count数组,延续上述假设,i=0时,count[0]=1记录了'Z'出现的次数1,'Z'-i还是'Z', 则输出为:Z = 1。
printf("%c=%d", 'Z'-i,count[i]);

没看懂的就是这个kind是啥?
发表于 2022-10-11 17:47:54 回复(1)
D

发表于 2016-04-19 17:05:04 回复(0)
#include <stdio.h>
//统计给定输入中每个大写字母的出现次数(不需要检查输入合法性)
void AlphabetCounting(char a[], int n)
{
int count[26] = {}, i, kind = 0;
for (i = 0;i < n;++i)
{
if (a[i] >= 'a'&&a[i]<='z')  //完善输入是小写的情况
{
a[i] = a[i] - 32;
}
++count['Z' - a[i]];
}
for (i = 0;i<26;++i) 
{
/*if (++kind>1) 
putchar(';');*/
printf("%c=%d", 'Z'-i,count[i]);
printf(";");
}
}
//题意为输入设定全部是大写(ASCII码A - Z为65 - 90,递增),所以有两种情况:
//一、count[0;25]存储A - Z的个数,即count[0]存储A的个数,于是(1)++count[a[i] - 'A'];(2)'A' + i,count[i];
//二、count[0;25]存储Z - A的个数,即count[0]存储Z的个数,于是(1)++count['Z' - a[i]];(2)'Z' - i,count[i]。

void main()   //测试主程序
{
char str[80];
printf("请输入合法字符串:\n");
for (int i = 0;i < 10;i++)
{
scanf_s("%c",&str[i]);
}
AlphabetCounting(str, 10);
}
发表于 2015-10-18 21:10:46 回复(1)
int n 用于控制字符串的长度
发表于 2020-03-05 03:28:38 回复(0)
AB选项下标可能为负的, 直接排除, C选项没有分别出各个字母, E选项下标并非从0开始, 改为
++count[a[i]- 'A'];'A'+i,count[i]
也是对的, 相对于D选项, 这个是从A到Z顺序存储.
发表于 2020-03-02 21:02:25 回复(0)
写了个类似的程序:
#include<stdio.h>
#include<string.h>

#define CNT_CHAR_NUM 2*26

void AlphabetCounter( char a[], int n){

    int count[CNT_CHAR_NUM] = {0};
    //int kind = 10;

    for(int i = 0 ; i<n; ++i){
        if(a[i]-'A' >= 0) ++count[a[i]-'A'];
    }

    for(int i= 0; i<CNT_CHAR_NUM; ++i){
        //if(++kind > 1) putchar(';');
        if(count[i] > 0) printf("%c=%d \n", 'A'+ i, count[i]);
    }
}

int main(){
    char str[20] = "helloccFF";
    printf("strlen = %ld \n", strlen(str));
    AlphabetCounter(str, strlen(str));
    return 0;
}
编辑于 2024-03-15 18:29:47 回复(0)
kind初始化为0才对
发表于 2023-03-02 20:05:33 回复(0)
kind是什么?
发表于 2022-05-10 00:13:14 回复(0)
++count[];是啥意思😳
发表于 2017-10-21 23:48:26 回复(0)
D
发表于 2016-04-19 18:13:15 回复(0)
D
发表于 2015-09-16 23:44:08 回复(0)
B
发表于 2015-09-11 02:17:22 回复(1)