PART 1 結構體類型及編程應用編程
1-2編程語言
#include <stdio.h>
#include <string.h>
const int N = 10;函數
// 定義結構體類型struct student,並定義其別名爲STU
typedef struct student {
long int id;
char name[20];
float objective; /*客觀題得分*/
float subjective; /*操做題得分*/
float sum;
char level[10];
}STU; spa
// 函數聲明
void input(STU s[], int n);
void output(STU s[], int n);
void process(STU s[], int n);3d
int main() {
STU stu[N];
printf("錄入%d個考生信息: 准考證號,姓名,客觀題得分(<=40),操做題得分(<=60)\n", N);
input(stu, N);
printf("\n對考生信息進行處理: 計算總分,肯定等級\n");
process(stu, N);
printf("\n打印考生完整信息: 准考證號,姓名,客觀題得分,操做題得分,總分,等級\n");
output(stu, N);
return 0;
} code
// 錄入考生信息:准考證號,姓名,客觀題得分,操做題得分
void input(STU s[], int n) {
// 補足代碼
int i;
for(i=0;i<n;i++)
scanf("%ld %s %f %f", &s[i].id, s[i].name, &s[i].objective, &s[i].subjective);
}blog
//輸出考生完整信息: 准考證號,姓名,客觀題得分,操做題得分,總分,等級
void output(STU s[], int n) {
// 補足代碼
int i;
for(i=0;i<n;i++)
printf("%ld %s %.2f %.2f %.2f %s\n",s[i].id, s[i].name, s[i].objective, s[i].subjective, s[i].sum, s[i].level);排序
}內存
// 對考生信息進行處理:計算總分,排序,肯定等級
void process(STU s[], int n) {
// 補足代碼
int i,j,k;
STU temp;
for(i=0;i<n;i++)input
s[i].sum=0.4*s[i].objective+0.6*s[i].subjective;//獲得總成績
//開始排序從大到小
for(j=0;j<n-1;j++)
{
for(k=0;k<n-j-1;k++)
{
if(s[k].sum<s[k+1].sum)
{
temp=s[k];
s[k]=s[k+1];
s[k+1]=temp;
}
}
}
//以上排序完成,開始定義等級 level
i=0;
for(i=0;i<n;i++)
{
if(i==0)
strcpy(s[i].level,"優秀");
else if(i>=1&&i<=4)
strcpy(s[i].level,"合格");
else if(i>=5&&i<=9)
strcpy(s[i].level,"不合格");
}
}
結果截圖:
採坑:這道題我作了好半天,一開始輸出結果各項成績都是0;我也忘記我怎麼東修修西改改的了,試了半天,終於開始顯示正確數字了。後來總成績和等級總是輸不出來,我檢查了我後面等級斷定的步驟,以爲沒問題啊,若是再出錯確定是output出錯了,果不其然我回去一看,我只讓輸了學號姓名成績,總成績和等級沒有寫上去,多是輸出這個函數寫在等級斷定以前,因此我壓根沒留意要把後面函數算出來的值也輸進去。
PART 2
共用體結構體類型的區別:
共用體是結構數據類型,它使幾個不一樣類型的變量共佔一段內存(相互覆蓋),每次只有一個能使用;
結構體中每一個成員都有存儲空間,能夠一塊兒使用
PART 3
枚舉類型適合描述哪一類數據:
在C語言等計算機編程語言中是一種構造數據類型 。它用於聲明一組命名的常數,當一個變量有幾種可能的取值時,能夠將它定義爲枚舉類型。枚舉能夠根據Integer、Long、Short或Byte中的任意一種數據類型來建立一種新型變量。這種變量能設置爲已經定義的一組之中的一個,有效地防止用戶提供無效值。
能夠直接輸入輸出