设学生信息包括学号,姓名和五门功课的成绩,要求编写输入输出
学生信息的函数。在输入一组学生信息后,以学生成绩的总分从高
到低顺序输出学生信息。
这个相对来说比较简单,可以创建一个学生的结构体,结构体里面有三个成员:学号,姓名和五门功课的成绩。下面请看一下我的整体代码。这个思路也比较简单,主要是为了练习使用结构体。
~~~
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 200
#define SCORES 5
#define NUMLEN 10
/**
* 设学生信息包括学号,姓名和五门功课的成绩,要求编写输入输出
* 学生信息的函数。在输入一组学生信息后,以学生成绩的总分从高
* 到低顺序输出学生信息。
*/
struct student{
char number[NUMLEN]; /* 学号 */
char *name; /* 学生姓名 */
int scores[SCORES]; /* 学生五门功课的成绩 */
};
struct student stus[N];
int order[N];
int total[N];
int readstu(struct student *stu){
int len,j;
char buf[120]; //缓冲区
printf("Number : ");
if(scanf("%s",buf) == 1){
strncpy(stu->number,buf,NUMLEN-1);
}else{
return 0; //ctrl+z退出
}
printf("Name : ");
if(scanf("%s",buf) == 1){
len = strlen(buf);
stu->name = (char *)malloc(len+1);
strcpy(stu->name,buf);
}else{
return 0;
}
printf("Scores : ");
for(j = 0;j < SCORES;j++)
if(scanf("%d",stu->scores+j) != 1)
break;
if(j == 0){ //一个成绩也没有录入,清空name所占有的内存
free(stu->name);
return 0;
}
for(;j<SCORES;j++)
stu->scores[j] = 0;
return 1;
}
/* 输出学生信息 */
void writeStu(struct student *stu){
int i;
printf("Number : %s\n",stu->number);
printf("Name : %s\n",stu->name);
printf("Scores : ");
for(i = 0;i < SCORES;i++)
printf("%4d ",stu->scores[i]);
printf("\n\n");
}
int main()
{
int n,i,j,t;
//获取学生信息
for(n = 0; readstu(stus+n); n++);
for(i = 0;i < n;i++){
order[i] = i;
for(t = 0,j = 0;j < SCORES;j++){
t += stus[i].scores[j];
}
total[i] = t;
}
//冒泡排序输出
for(i = 0;i < n;i++){
for(j = 0;j < n-1;j++){
if(total[order[j]] < total[order[j+1]]){
//交换
t = order[j];
order[j] = order[j+1];
order[j+1] = t;
}
}
}
for(j = 0;j <n;j++){
writeStu(stus+order[j]);
}
return 0;
}
~~~
下面是我的输出的结果:
![这里写图片描述](https://box.kancloud.cn/2016-05-24_5743c07659f9d.jpg "")
- 前言
- 实例一:HelloWorld
- scanf函数学习
- 实数比较
- sizeof()保留字获取类型的大小
- 自增/自减学习
- C学习if条件判断和for循环
- C实现的九九乘法表
- C实现一个比较简单的猜数游戏
- 使用C模拟ATM练习switch..case用法
- 记录一个班级的成绩练习一维数组
- C数组实现矩阵的转置
- C二维数组练习
- 利用数组求前n个质数
- C实现万年历
- C实现数组中元素的排序
- C实现任意进制数的转化
- C判断一个正整数n的d进制数是否是回文数
- C使用递归实现前N个元素的和
- 钢材切割问题
- 使用指针比较整型数据的大小
- 指向数组的指针
- 寻找指定元素
- 寻找相同元素的指针
- 整数转换成罗马数字
- 字符替换
- 从键盘读入实数
- C实现字符行排版
- C实现字符排列
- C实例--判断一个字符串是否是回文数
- 通讯录的输入输出
- 扑克牌的结构定义
- 使用“结构”统计学生成绩
- 报数游戏
- 模拟社会关系
- 统计文件中字符个数
- C实现两个文件的内容输出到同一个屏幕