黑马程序员技术交流社区
标题:
c程序小习题练习(结构体)
[打印本页]
作者:
a380vs747`
时间:
2015-3-24 15:47
标题:
c程序小习题练习(结构体)
/*
题目: 从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由
高到低输出字母和出现次数。
*/
#import <stdio.h>
// 首先typedef一个结构体,包含名字和计数。
typedef struct
{
char name; //名称(A、B、C、D)
int count; //计数次数
} Letter; //结构体名
int main()
{
char s[100] = {'\0'}; // 定义一个字符串数组,用来接收输入的字符串
printf("请输入一大堆字符串:"); // 提示输入
gets(s); // 获得字符串,赋值给s(这里不能用scanf)
Letter letter[4] = {{'A',0},{'B',0},{'C',0},{'D',0}}; //初始化结构体数组。
for (int i = 0; s[i] != '\0'; i++)
{
switch (s[i])
{
case 'A':
letter[0].count += 1; //分别计数出现的次数
break;
case 'B':
letter[1].count += 1;
break;
case 'C':
letter[2].count += 1;
break;
case 'D':
letter[3].count += 1;
break;
default:
break;
}
}
for (int j = 0; j <= 3; j++) // 双循环,冒泡进行排序,按照计数变量从大到小,将结构体数组重新排序
{
for (int k = 0; k <= 3-j-1; k++) // 这里应该是k<=3-j-1,一开始没有-1,导致输出结果不对(好久没看c,都忘了)
{
Letter change; // 定义第三方变量,用以调换数组中两个变量的值。
if (letter[k].count <= letter[k+1].count)
{
change = letter[k];
letter[k]= letter[k+1];
letter[k+1] = change;
}
}
}
printf("字母出现次数由高到低排列:\n");
for (int m = 0; m <= 3; m++) // 从letter[0]开始打印就可以了。
{
printf("字母%c出现%d次\n",letter[m].name, letter[m].count);
}
return 0;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2