設學生信息包括學號,姓名和五門功課的成績,要求編寫輸入輸出
學生信息的函數。在輸入一組學生信息后,以學生成績的總分從高
到低順序輸出學生信息。
這個相對來說比較簡單,可以創建一個學生的結構體,結構體里面有三個成員:學號,姓名和五門功課的成績。下面請看一下我的整體代碼。這個思路也比較簡單,主要是為了練習使用結構體。
~~~
#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;
}
~~~
下面是我的輸出的結果:

- 前言
- 實例一: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實現兩個文件的內容輸出到同一個屏幕