算法设计学习2
实验目的及要求:
1.熟悉结构体的构建。
2.了解数据的排序及插入。
实验设备环境:
1.微型计算机
2.DEV C++(或其他编译软件)
实验步骤:
任务:建学生结构体,包含(学号,姓名,性别,年龄,总分),最多可存放100名学生信息,录入10名学生信息,输出。按照总分从高到低排序,输出。在录入一名学生信息,插入到合适位置,保持总分顺序。
解题思路:
构建结构体,然后将数据依次输入结构体中,随后进行排序输出。
算法代码如下:
#include<stdio.h>
#include <iostream>
#include<string.h>
struct student{
char sno[20], name[20];
char sex[20];
int old;
float sum;
};
void print(struct student stu[100],int n){
for (int i = 0; i < n;i++){
printf("%s %s %s %d %.2f\n", stu[i].sno, stu[i].name, stu[i].sex, stu[i].old, stu[i].sum);
}
}
void sort(struct student s[100],int n){
struct student a[100];
for (int i = 1; i < n;i++){
for (int j = 0; j < n - i;j++){
if(s[j].sum<s[j+1].sum){
a[j] = s[j];
s[j] = s[j + 1];
s[j + 1] = a[j];
}
}
}
}
int add(struct student s[100],int n){
int m;
printf("数量:\n");
scanf("%d", &m);
for (int i = n; i < m + n;i++){
printf("输入第%d位学生的信息:\n",i+1);
scanf("%s %s %s %d %f", &s[i].sno, s[i].name, s[i].sex, s[i].old, s[i].sum);
}
return m;
}
int main(void){
int n;
printf("请输入需要录入学生的数量:\n");
scanf("%d",&n);
struct student s[100];
for(int i=0;i<n;i++){
printf("请输入第%d个学生的信息:\n",i+1);
scanf("%s %s %s %d %f",&s[i].sno,&s[i].name,&s[i].sex,&s[i].old,&s[i].sum);
}
printf("排序前:\n");
print(s,n);
sort(s,n);
printf("排序后:\n");
print(s,n);
printf("是否继续添加学生信息,yes或no?\n");
char a[10];
scanf("%s",&a);
if(strcmp(a,"yes")==0){
int m = add(s,n);
for(int i=0;i<m;i++){
printf("请输入第%d个学生的信息:\n",i+1);
scanf("%s %s %s %d %f",&s[i].sno,&s[i].name,&s[i].sex,&s[i].old,&s[i].sum);
}
sort(s,m+n);
printf("添加再次排序后:\n");
print(s,n+m);
printf("程序运行结束!");
}
else if(strcmp(a,"no")==0) {
printf("程序运行结束!");
}
return 0;
}