1.:例题:
【题目描述】
在商业和科学研究中,人们经常需要对数据进行分析并将结果以直方图的形式显示出来,这会大大增加这些数据的直观性,也便于数据的分析与对比。下面以顾客对餐饮服务打分为例,输入一个正整数repeat (0 输入一个正整数n(1≤n≤20),表示有n个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为1~5这5个等级(1表示最低分,5表示最高分),试统计调查结果,并用*打印出如下形式的统计结果直方图。 【输入格式】 第1个整数repeat为数据组数,一共有repeat组数据,请分别处理每组数据,每组数据输出一个直方图。 接下来为repeat组数据,每组数据的第1个数为打分人数n,接下来为这n个人的n个打分。 【输出格式】 按输出样例的样式输出结果。 2.经验分享:笔者爆肝四天才做对,求个赞赞╮(๑•́ ₃•̀๑)╭,下面开始分析了! 1.看一看题目吧:1.大胆猜想篇之函数:真的有必要吗?增加函数的主要目的为简化大量重复性工作,此题是否有大量重复性工作呢? 2.大胆猜想篇之输入与输出的主体:分析题目特点:需要多次输入多个值,那么解决问题的主体就是循环加数组。 3。问题发现篇之打表:不难发现这个直方图是竖起来的,打几行合适呢?如何判断一个数打几行呢? 那么无论如何,先试一试吧! 2.启动了,但没有完全启动! 1.说好的循环输入数组元素,为啥输入数不能作为数组长度呢? A:因为数组只能由常量充当数组长度,变量是不可以的哦!ᕙ(`▿´)ᕗ 2.为啥我输入完数据后循环没有结束啊? 3.如何启动成功呢? P1:设置一个多变量的数组,你不输入让它直接补0就行了嘛,评分也没有零分啊!(难道所有的评分都没有0颗星是这个原因啊(ᕑᗢᓫ∗)˒) P2:在输入完成的时候换行!换行?难道是回车?那么如何判断呢?(不会用getchar的小伙伴看看笔者之前的文章吧!₍ᐢ.ˬ.⑅ᐢ₎) A:作为一个萌新,你从各路大佬处学到了字符串比较并记在了小本本上,但实操的时候你发现程序根本运行不了!是时候启动gpt了! 那么,让我们换个思路,难道计数操作必须用字符串吗? 想想之前在写循环结构的时候是怎么计数的? 想起来了!直接定义变量,每出现一次就加一呗! int j = 0; int o = 0; 于是,你写出来了这么一大串,虽然丑,但它居然是能运行的!(在出现未知问题的时候,想想如何使用最简单的方法拿捏它!) 现在,该比较了,那么方法也显而易见,利用循环数组的方法比较即可! 5.打表了,如何把表竖起来呢? 根据题目,这又是一项“* ”与“ ”之间的经典问题,看看笔者之前是如何练习的!传送门:空心菱形 · 王赫辰/c语言 - 码云 - 开源中国 (gitee.com) 那么如何打如何不打,如何让打过的一直打?你又困惑了,记住,大道至简!简单的选择循环判断,即可解决这个看上去吓人一跳的问题! int h = max[0]; for (max[0]; max[0] != 0; max[0]--)//(打印每一行的数据) if (p >= h) if (q >= h) if (r >= h) if (s >= h) printf("1 2 3 4 5\n"); 还是经典的又长右丑,但是可以运行!(注意\n哦❛‿˂̵✧) 这是成品: #include { int i = 0; for (i = 0; i < b; i++) scanf("%d", &arr[i]); n = n + 1; int j = 0; int o = 0; for (max[0]; max[0] != 0; max[0]--)//(打印每一行的数据) if (p >= h) if (q >= h) if (r >= h) if (s >= h) printf("1 2 3 4 5\n"); 最后的最后,编者有话说! 为了解这道题,编者连续四天熬夜到凌晨一点,前三天基本毫无进展,这或许就是IT行业的魅力吧。无论是未来的展望还是儿时的梦想让你走上了这条路,请你坚持码字刷题,偷偷努力然后惊艳所有人!ᕕ( ᐛ )ᕗ ps:再求个赞赞!ଘ(੭ˊ꒳ˋ)੭
int p = 0;
int q = 0;
int r = 0;
int s = 0;
int x = 0;
for (x; x < n; x++)//(分别记录各个分数出现的次数)
{
if (arr[x] == 1)
{
o = o + 1;
}
if (arr[x] == 2)
{
p = p + 1;
}
if (arr[x] == 3)
{
q = q + 1;
}
if (arr[x] == 4)
{
r = r + 1;
}
if (arr[x] == 5)
{
s = s + 1;
}
}
int g;
{
if (o >= h)
{
printf("* ");
}
else
{
printf(" ");
}
{
printf("* ");
}
else
{
printf(" ");
}
{
printf("* ");
}
else
{
printf(" ");
}
{
printf("* ");
}
else
{
printf(" ");
}
{
printf("* ");
}
else
{
printf(" ");
}
printf("\n");
h = h - 1;
}
}
int main()
int arr[50];
int a;
int b;
int n = 0;
int f = 0;
scanf("%d", &a);
for (f = 0; f < a; f++)
{
scanf("%d", &b);
{
if (getchar() == '\n') //(在元素输入完毕后终止读取)
{
break;
}
}
int p = 0;
int q = 0;
int r = 0;
int s = 0;
int x = 0;
for (x; x < n; x++)//(分别记录各个分数出现的次数)
{
if (arr[x] == 1)
{
o = o + 1;
}
if (arr[x] == 2)
{
p = p + 1;
}
if (arr[x] == 3)
{
q = q + 1;
}
if (arr[x] == 4)
{
r = r + 1;
}
if (arr[x] == 5)
{
s = s + 1;
}
}
int max[5] = { o,p,q,r,s };
int v;
for (v = 0; v < 3; v++)//(将分数由大到小排序以确定打印行数)
{
if (max[v] < max[v + 1])
{
int u;
u = max[v];
max[v] = max[v + 1];
max[v + 1] = u;
}
}
int h = max[0];
int g;
{
if (o >= h)
{
printf("* ");
}
else
{
printf(" ");
}
{
printf("* ");
}
else
{
printf(" ");
}
{
printf("* ");
}
else
{
printf(" ");
}
{
printf("* ");
}
else
{
printf(" ");
}
{
printf("* ");
}
else
{
printf(" ");
}
printf("\n");
h = h - 1;
}
}
}