qq_58810702
2021-05-31 10:36
采纳率: 50%
浏览 40

c语言,求大佬帮帮忙,谢谢。

学生的记录由学号,得分组成,根据班级人数,将学生记录存放在结构体数组中。假设m位学生玩游戏,游戏规则如下:学生按学号顺序(升序)从2开始依次报数,报到质数得2分,其余数字得1分,求n轮后各学生的得分。要求:m,n,学号均由键盘输入。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • CSDN专家-link 2021-05-31 10:52
    已采纳

    就是做个循环啊,判断序号是否素数,人数循环,计算各人的分数

    /*
    学生的记录由学号,得分组成,根据班级人数,将学生记录存放在结构体数组中。
    假设m位学生玩游戏,游戏规则如下:学生按学号顺序(升序)从2开始依次报数,报到质数得2分,
    其余数字得1分,求n轮后各学生的得分。要求:m, n, 学号均由键盘输入。
    */
    
    typedef struct _student
    {
    	int nID;
    	int score;
    }student;
    
    bool isShusu(int n)
    {
    	for (int i = 2; i < n; i++)
    	{
    		if (n%i == 0)
    			return false;
    	}
    	return true;
    }
    
    void main()
    {
    	student stu[100];
    	int m, n,i;
    	printf("请输入班级人数:");
    	scanf_s("%d", &m);
    	printf("\n");
    	printf("请逐个输入学生学号:");
    	for (i = 0; i < m; i++)
    	{
    		scanf_s("%d", &stu[i].nID);
    		stu[i].score = 0;
    	}
    	printf("\n");
    	printf("请输入游戏轮数:");
    	scanf_s("%d", &n);
    	printf("\n");
    	for (i = 0; i < n; i++)
    	{
    		if (isShusu(i+2))
    			stu[i % m].score += 2;
    		else
    			stu[i % m].score++;
    	}
    	for (i = 0; i < m; i++)
    	{
    		printf("学号%d的学生得分:%d\n", stu[i].nID, stu[i].score);
    	}
    
    }
    
    打赏 评论
  • CSDN专家-张老师 2021-05-31 10:52
    #include<stdio.h>
    #define M 10
    typedef struct
    {
    char num[10];
    double s;
    }SCORE;
    double fun(SCORE*C,SCORE*l,int*n)
    {
    	double aver=0.0;
    	int i,j=0;
    	for(i=0;i<M;i++)
    		aver+=C[i].s;
    	aver/=M;
    	for(i=0;i<M;i++)
    		if(C[i].s<=aver)
    		{
    			*(l+j)=C[i];
    			j++;
    		}
    	*n=j;
    	return aver;
    }
    main()
    {
    	SCORE stu[M]={{"03",76},{"02",69},
    	{"04",85},{"01",91},{"07",72},
    	{"08",64},{"06",87},{"09",60},
    	{"11",79},{"12",73}};
    	SCORE low[M],t;
    	FILE*out;
    	int i,j,n;
    	double ave;
    	ave=fun(stu,low,&n);
    	printf("The %d student data which is lower than %7.3f:\n",n,ave);
    	for(i=0;i<n;i++)
    		printf("%s %4.1f\n",low[i].num,low[i].s);
    	printf("\n");
    	out=fopen("outfile.dat","w");
    	fprintf(out,"%d\n%7.3f\n",n,ave);
    	for(i=0;i<n-1;i++)
    		for(j=i+1;j<n;j++)
    			if(low[i].s<low[j].s)
    			{
    				t=low[i];
    				low[i]=low[j];
    				low[j]=t;
    			}
    	for(i=0;i<n;i++)
    		fprintf(out,"%4.1f\n",low[i].s);
    	fclose(out);
    }
    
    打赏 评论
  • 有问必答小助手 2021-05-31 16:43

    您的问题已经有小伙伴解答了,请点击【采纳】按钮,采纳帮您提供解决思路的答案,给回答的人一些鼓励哦~~

    ps:开通问答VIP,享受5次/月 有问必答服务,了解详情↓↓↓

    【电脑端】戳>>>  https://vip.csdn.net/askvip?utm_source=1146287632
    【APP 】  戳>>>  https://mall.csdn.net/item/52471?utm_source=1146287632

    打赏 评论

相关推荐 更多相似问题