关于#C语言#的问题,如何解决?

n轮,m人,第一个人报2其他人继续,报质数的得2分,其他的得1分

#include<stdio.h>
#define N 100
struct student{
long int number;
int score;
};
void main()
{ struct student stu[N];
int i,m,j,t,n;
int exchange=0;
printf("人数:");
scanf("%d",&m);
printf("轮数:");
scanf("%d",&n);
for(i=0;i<m;i++)
{
printf("学号:");
scanf("%ld",&stu[i].number);
stu[i].score=0;

}
for(i=0;i<m-1;i++)
{
exchange=0;
for(j=0;j<m-1-i;j++)
{
if(stu[i].number>stu[i+1].number)
{
t=stu[i].number;
stu[i].number=stu[i+1].number;
stu[i+1].number=t;
exchange=1;
}
}
if(!exchange)
break;
}
for(i=0;i<m;i++)
{
printf("%ld",stu[i].number);
printf("\n");
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if((j+2)%2==0)
stu[j].score++;
else
stu[j].score+=2;
}
}
for(i=0;i<m;i++)
printf("%d\n",stu[i].score);

}

题目是报质数的得2分,质数是除了1和自身之外不能被其它数整除的数,你需要写一个函数isprime()判断是不是质数,报数计数需要一个num变量初始为2, 每次循环+1, 不能用j+2否则下一轮又从2开始了
排序要用内循环变量j, 不是i

你题目的解答代码如下:

#include <stdio.h>
#define N 100
struct student
{
    long int number;
    int score;
};

int isprime(int n)
{
    int i;
    if(n<2) return 0;
    for(i=2;i<n;i++)
        if(n%i==0) return 0;
    return 1;
}

void main()
{
    struct student stu[N];
    int i, m, j, t, n,num=2;
    int exchange = 0;
    printf("人数:");
    scanf("%d", &m);
    printf("轮数:");
    scanf("%d", &n);
    for (i = 0; i < m; i++)
    {
        printf("学号:");
        scanf("%ld", &stu[i].number);
        stu[i].score = 0;
    }
    for (i = 0; i < m - 1; i++)
    {
        exchange = 0;
        for (j = 0; j < m - 1 - i; j++)
        {
            // 排序要用内循环变量j, 不是i
            if (stu[j].number > stu[j + 1].number)
            {
                t = stu[j].number;
                stu[j].number = stu[j + 1].number;
                stu[j + 1].number = t;
                exchange = 1;
            }
        }
        if (!exchange)
            break;
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            if (isprime(num))
                stu[j].score += 2;
            else
                stu[j].score++;
            num++;
        }
    }
    for (i = 0; i < m; i++)
        printf("学号:%d  得分:%d\n", stu[i].number, stu[i].score);
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

中间的for循环排序没用啊,而且题目要求的是报质数的得2分,质数是除了1和自身之外不能被其它数整除的数,你求质数的代码也不对。
你题目的具体要求是什么?每轮到最后一个人了继续从头开始报数吗?
排序的地方感觉没什么用,是要根据学号进行排序吗?代码修改如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define N 100
//判断质数
int prime(int n)
{
    int i = 2;
    if (n < 2) return 0;
    for (i = 2; i < n - 1; i++)
    {
        if (n % i == 0)
            return 0;
    }
    return 1;
}


struct student {
    int number;
    int score;
};
void main()
{
    struct student stu[N],tmp;
    int i, m, j, t, n;
    int exchange = 0;
    printf("人数:");
    scanf("%d", &m);
    printf("轮数:");
    scanf("%d", &n);
    for (i = 0; i < m; i++)
    {
        printf("学号:");
        scanf("%ld", &stu[i].number);
        stu[i].score = 0;
    }
    
    //根据学号排序
    for (i = 0; i < m - 1; i++)
    {
        for (j = 0; j < m - 1 - i; j++)
        {
            if (stu[j].number > stu[j + 1].number)
            {
                tmp = stu[j];
                stu[j] = stu[j + 1];
                stu[j + 1] = tmp;
            }
        }
    }



    t = 2;//从2开始报数
    for (i = 1; i <= n; i++) //n轮
    {
        for (j = 0; j < m; j++)
        {
            if (prime(j + t))
                stu[j].score += 2; //报质数的得2分
            else
                stu[j].score += 1; //其它得1分
            t++; //继续报数
        }
    }

    //输出学号和对应的得分
    for (i = 0; i < m; i++)
        printf("%d %d\n", stu[i].number, stu[i].score);

}



你可以参考下这篇文章:C语言#贪吃蛇#自动寻路