c语言利用一维数组统计

统计一门课程各分数段的人数:统计一个班级一门课程各分数段的人数,班级人数自定,成绩为百分制整数。
运行结果如下所示:

img

定义一个5个元素的数组,统计各分数段人数就行

#include <stdio.h>
int main()
{
    int score[10] = {90,85,82,57,69,88,98,62,47,75};
    int grade[5] = {0};
    int i=0;
    printf("输出原始成绩:\n");
    for(i=0;i<10;i++)
        printf("%4d",score[i]);
    printf("\n输出统计结果:\n");
    printf("%-10s%-10s%-10s%-10s%-10s\n","0~59","60~69","70~79","80~89","90~100");
    for(i=0;i<10;i++)
    {
        if(score[i] >= 90)
            grade[4]++;
        else if(score[i]>=80)
            grade[3]++;
        else if(score[i]>=70)
            grade[2]++;
        else if(score[i]>=60)
            grade[1]++;
        else
            grade[0]++;
    }
    for(i=0;i<5;i++)
        printf("%2d人%6s",grade[i]," ");
}

将班级人数设置为 30 人,分数段设置为 0-59 分、60-69 分、70-79 分、80-89 分和 90-100 分。


#include <stdio.h>

#define NUM_STUDENTS 30   // 班级人数
#define NUM_SCORE_RANGES 5   // 分数段数量

int main() {
    int i, j, score;
    int score_ranges[NUM_SCORE_RANGES] = {0, 0, 0, 0, 0};   // 存储每个分数段的人数

    // 输入每个学生的成绩,统计在不同分数段的人数
    for (i = 0; i < NUM_STUDENTS; i++) {
        printf("请输入第 %d 个学生的成绩:", i+1);
        scanf("%d", &score);

        if (score >= 0 && score < 60) {
            score_ranges[0]++;
        } else if (score >= 60 && score < 70) {
            score_ranges[1]++;
        } else if (score >= 70 && score < 80) {
            score_ranges[2]++;
        } else if (score >= 80 && score < 90) {
            score_ranges[3]++;
        } else if (score >= 90 && score <= 100) {
            score_ranges[4]++;
        }
    }

    // 输出每个分数段的人数
    printf("\n成绩分段\t人数\n");
    printf("-----------------------\n");
    for (j = 0; j < NUM_SCORE_RANGES; j++) {
        if (j == 0) {
            printf("0-59\t\t%d\n", score_ranges[j]);
        } else if (j == 1) {
            printf("60-69\t\t%d\n", score_ranges[j]);
        } else if (j == 2) {
            printf("70-79\t\t%d\n", score_ranges[j]);
        } else if (j == 3) {
            printf("80-89\t\t%d\n", score_ranges[j]);
        } else if (j == 4) {
            printf("90-100\t\t%d\n", score_ranges[j]);
        }
    }

    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7800386
  • 这篇博客你也可以参考下:博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性
  • 除此之外, 这篇博客: 初始C语言位操作符以及应用分析中的 然后呢,我们在来解决寻找单个数的plus版,数组中有两个数在数组中的个数为奇数个。具体分析过程我就写入代码中了。(注释部分) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    int main()
    {
    	int arr[10] = { 1,1,2,2,3,3,4,4,5,6 };
    	//以这个数组为例,我们发现 5 6这两个数字是我们所需要的。
    	//我们发现这次有两个单个的,那我们这个怎么进行往后进行呢??
    	//我们可不可以将这个数组分为两组,将两个单个的数字分开在两个组里面,
    	// 当然对这个数组还有啥要求呢??
    	//成对的数字应该被分到同一组里面,不然无法进行消去。
    	//就以这个数组为例,可以分为
    	// {1,1,3,3,5} {2,2,4,4,6}或者
    	// {1,1,5} {2,2,3,3,4,4,6}都可以 
    	// 只要满足我们的两个条件 1. 两个单个的数字分到两组, 2.成对的数字就放在一组
    	//那么我们应该怎样将这两个单个的数字分到两个数组呢
    	//那我们就要想到我们的操作符,哪一个操作符可以将两个不同的数字分开
    	//没错就是我们的异或 
    	//先将这两个数字异或,找到二进制位上不同的数
    	// 例如异或之后的结果为 1010 ,我们根据这个结果可以推断出 ,这两个数字(二进制表示下)第二位与第四位不同
    	// 可以作为将两个数字分开的一个依据。
    	// 但是成对的数字怎样分到两组呢???数字相同,二进制位也相同。
    	// 我们需要注意的是,我们只是需要将成对的数字分在两个数组里,至于每个数字里面分多少,我们不太关注,因为最后通过运算消去了,
    	// 只需要保证成对的数字分在一起。那怎么分呢???什么作为分组的依据呢???随缘分法吗???
    	// 其实我们可以依据前面   单独的数字的分组依据,   将这个作为依据进行分组。然后这就是大概思路
    	// 
    	// 
    	// 
    	// 来来,我们整理一下思绪  ,然后上手,
    	// 1.找到二进制位中的不同的位数
    	// 2. 按照这个不同的位数,将整个数组分成两个数组。   
    	//  需要注意的是,在2. 这个过程中,那两个  单的数字   已经分到两个边,顺带也将成对的数字分组,虽然不能保证两边数组元素
    	//  个数相同,但是能保证成对的数字都放在了一边。
    	
    
    
    	//寻找不同位数
    	int i = 0;
    	int sum = 0;
    	int sz = sizeof(arr) / sizeof(arr[0]);
    	for (i = 0; i < sz; i++)
    	{
    		sum ^= arr[i];
    	}
    	//上面的话  已经将所有的数字已经异或。
    	//接下来寻找sum中的  1 的位置  ,找到一个就可以。因为异或的话,1表示两个元素不一样  ,可以作为我们分组的依据。
    	i = 0;
    	while (((sum >> i) & 1) != 1)
    	{
    		i++;
    	}
    	//假如sum为下
    	//    sum =       00000000 00000000 00000000 00101000
    	//      1         00000000 00000000 00000000 00000001
    	//                00000000 00000000 00000000 00000000
    	//两者就进行&运算 ,当运算结果为0 时,证明此时两个数字这个二进制位相同,则将sum右移一位,
    	// 依次类推     
    	//当 ((sum >> i) & 1)  = 1 ,此时sum右移了i位,证明两个数字的第i位数据不同 ,可以将此位作为一个分组的依据。
    	
    	
    	
    	// 5  101
    	// 6  110
    	//    011
    	int arr1[10] = { 0 }, a1 = 0;//由于我们不知道两个数组每个数组分配多少元素,所以呢,尽可能的创建大的数组
    	int arr2[10] = { 0 }, a2 = 0;//
    	int a = 0;
    	for (a = 0; a < sz; a++)
    	{
    		if ((arr[a] >> i) & 1)
    		{
    			arr1[a1] = arr[a];
    			a1++;
    		}
    		else
    		{
    			arr2[a2] = arr[a];
    			a2++;
    		}
    	}
    	//通过上面的分类,已将数字分到了两个数组,接下来分别进行异或
    	i = 0;
    	int x = 0;
    	for (i = 0; i < a1; i++)
    	{
    		x = x ^ arr1[i];
    	}
    	printf("%d\n", x);
    	i = 0;
    	  x = 0;
    	for (i = 0; i < a2; i++)
    	{
    		x = x ^ arr2[i];
    	}
    	printf("%d\n", x);
    	return 0;
    }

  • 您还可以看一下 谢仁华老师的分布式集群发包框架进阶实战一课程中的 发包配置之方法定义小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632