16,548
社区成员




#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef int ScoreType;
//学生结构体
typedef struct
{
int no;
ScoreType score[5];
float ave;
}Student;
//冒泡排序法
void BubbleSort(Student *a,int n)
{
int i,j,flag=1;
Student t;
for(i=1;i<n&&flag==1;i++)
{
flag=0;
for(j=0;j<n-i;j++)
{
if(a[j].ave<a[j+1].ave)
{
flag=1;
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
//用直接选择排序法对数组a[]进行排序
void SelectSort(Student *a,int n)
{
int i,j,s;
Student t;
for(i=0;i<n-1;i++)
{
s=i;//设第i个数据元素关键字最小
for(j=i+1;j<n;j++)//寻找关键字最小的数据元素
if(a[j].ave>a[s].ave) s=j;//记住最小元素下标
if(s!=i)//当最小元素下标不为i时交换位置
{
t=a[i];
a[i]=a[s];
a[s]=t;
}
}
}
//成绩生成函数
void count(Student *a)
{
int i,j;
srand((unsigned)time(NULL));
//rand()产生的随机数是依靠一个初始值产生的
//加srand((unsigned)time(NULL))是改变这个初始值,使每次产生的随机数都不一样。;
for(i=0;i<45;i++)//第i个学生的各科成绩
{
for(j=0;j<5;j++)
a[i].score[j]=rand()%101;
}
}
//平均成绩计算函数
void aver(Student *a)
{
int i,j;
for(i=0;i<45;i++)
{
a[i].ave=0;
for(j=0;j<5;j++)
a[i].ave=a[i].ave+a[i].score[j];
a[i].ave=a[i].ave/5;
}
}
//学号
void num(Student *a)
{
int i;
for(i=0;i<45;i++)
a[i].no=2016120000+i+1;
}
void main(void)
{
Student *a,*b;
int i,j;
a=(Student *)calloc(45,sizeof(int));
b=(Student *)calloc(45,sizeof(int));
count(a);//数组赋值
num(a);
aver(a);
b=a;
printf("1班学生的未排名各科成绩\n");
printf("学号 score1 score2 score3 score4 score5\n");
for(i=0;i<45;i++)
{
printf("%d ",a[i].no+1*100);
for(j=0;j<5;j++)
printf("%5d ",a[i].score[j]);
printf("\n");
}
printf("\n");
SelectSort(a,45);
printf("1班学生的排名后成绩\n");
printf("直接选择排序:\n");
printf("学号 score1 score2 score3 score4 score5 aver\n");
for(i=0;i<45;i++)
{
printf("%d ",a[i].no+1*100);
for(j=0;j<5;j++)
printf("%5d ",a[i].score[j]);
printf("%f ",a[i].ave);
printf("\n");
}
BubbleSort(b,45);
printf("冒泡排序:\n");
printf("学号 score1 score2 score3 score4 score5 aver\n");
for(i=0;i<45;i++)
{
printf("%d ",b[i].no+1*100);
for(j=0;j<5;j++)
printf("%5d ",b[i].score[j]);
printf("%f ",b[i].ave);
printf("\n");
}
printf("\n");
free(a);
free(b);
}
问题签名:#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]
srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
b[(a=rand()%11)]=0;
Sleep(100);
b[(a=rand()%11)]=1;
Sleep(100);
b[(a=rand()%11)]=2;
Sleep(100);
b[(a=rand()%11)]=3;
Sleep(100);
b[(a=rand()%11)]=4;
Sleep(100);
}
return 0;
}