课程号和成绩为随机数生成的,想要根据课程号来排序,既允许只改变课程号顺序而不改变成绩顺序,如(课程号:50,成绩:60,课程号:24,成绩:70 改为 课程号:24,成绩:60,课程号:50,成绩:70)
也允许根据课程号顺序同时更改成绩顺序。如(课程号:50,成绩:60,课程号:24,成绩:70 改为 课程号:24,成绩:70,课程号:50,成绩:60)
但是为什么我这样写就会显示读取访问权限冲突呢
完整代码如下
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <string>
#include <time.h>
struct conncet //学生-课程成绩信息
{
int num_1; //学号
int num_2[10]; //课程号
int grade[10]; //成绩
struct conncet* next;
};
void jiemian()
{
int i = 0;
printf("*********************************************************\n");
printf("** **\n");
printf("** 请输入你想要执行的操作: **\n");
printf("** 1:输出学生-课程信息 **\n");
printf("*********************************************************\n");
}
void connect(int x)
{
int i, j, x_1, x_2, temp, a, b;
conncet* head = NULL, * p1, * p2;
conncet* head_1;
p1 = p2 = (conncet*)malloc(sizeof(conncet));
unsigned int times = (unsigned int)time(NULL);
for (i = 0; i < x; i++)
{
p1->num_1 = i + 1;
if (i == 0)
{
head = p1;
}
for (j = 0; j < 10; j++)
{
srand(times * ((i + 1) * (j + 1)));
x_1 = rand() % 50 + 1;
x_2 = rand() % 40 + 60;
p1->num_2[j] = x_1;
p1->grade[j] = x_2;
}
p2->next = p1;
p2 = p1;
p1 = (conncet*)malloc(sizeof(conncet));
printf("学号为:%-3d\n", p2->num_1);
for (j = 0; j < 10; j++)
{
printf("课程号为:%-3d", p2->num_2[j]);
printf("成绩为:%-3d\n", p2->grade[j]);
}
}
p2->next = NULL;
head_1 = head;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10 - i - 1; j++)
{
if (head_1->num_2[j] > head_1->num_2[j + 1]) //相邻元素之间比较
{ //大的元素向右移动
temp = head_1->num_2[j]; //每一轮比较最大的元素在最后
head_1->num_2[j] = head_1->num_2[j + 1];
head_1->num_2[j + 1] = temp;
}
}
head_1 = head_1->next;
}
}
int main()
{
int num_1 = 1, x;
int control;
jiemian();
scanf("%d", &x);
switch (x)
{
case 1:
printf("请输入想要生成学生的数量:");
scanf("%d", &control);
connect(control);
break;
default:
printf("error\n");
break;
}
return 0;
}