學生資訊包括姓名、年齡、3門課(數理化)成績,實作如下運算(100)
*************************************
1、資料錄入;
2、列印總分最高學生;
3、列印單科最高分學生 (輸入科目);
4、列印單科掛科學生及人數(輸入科目);
5、按平均分降序輸出;
6、按分數段(平均分)查詢并列印學生資訊
0、退出
uj5u.com熱心網友回復:
使用結構體陣列?使用鏈表?uj5u.com熱心網友回復:
結構體


uj5u.com熱心網友回復:
抽空定了段代碼,供參考,有能力自已再優化一下
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
typedef struct student
{
char name[20];
int age;
int math;
int physics;
int chermistry;
int total;
float average;
}STU;
//輸入
void inputSTU(STU *arr, int n)
{
int i = 0;
for ( i = 0; i < n; i++ )
{
printf("輸入第%d個學生的姓名 年齡 數學 物理 化學成績:\n", i + 1);
scanf("%s%d%d%d%d", arr[i].name, &arr[i].age, &arr[i].math, &arr[i].physics, &arr[i].chermistry);
arr[i].total = arr[i].math + arr[i].physics + arr[i].chermistry;
arr[i].average = arr[i].total * 1.0 / 3;
getchar();
}
}
//最高分
void maxSTU(STU *arr, int n, const char *str)
{
int i = 0, j = 0, max = 0;
if (strcmp(str, "總分") == 0)
{
for (i = 0; i < n; i++)
{
if ( max < arr[i].total )
{
max = arr[i].total;
j = i;
}
}
printf("\n姓名\t年齡\t數學\t物理\t化學\t總分\t平均分\n");
printf("%s\t%d\t%d\t%d\t%d\t%d\t%.2f\n", arr[j].name, arr[j].age, arr[j].math,
arr[j].physics, arr[j].chermistry, arr[j].total, arr[j].average);
}
else if ( strcmp(str, "數學") == 0 )
{
for ( i = 0; i < n; i++ )
{
if ( max < arr[i].math )
{
max = arr[i].math;
j = i;
}
}
printf("\n姓名\t年齡\t數學\t物理\t化學\t總分\t平均分\n");
printf("%s\t%d\t%d\t%d\t%d\t%d\t%.2f\n", arr[j].name, arr[j].age, arr[j].math,
arr[j].physics, arr[j].chermistry, arr[j].total, arr[j].average);
}
else if ( strcmp(str, "物理") == 0 )
{
for ( i = 0; i < n; i++ )
{
if ( max < arr[i].physics )
{
max = arr[i].physics;
j = i;
}
}
printf("\n姓名\t年齡\t數學\t物理\t化學\t總分\t平均分\n");
printf("%s\t%d\t%d\t%d\t%d\t%d\t%.2f\n", arr[j].name, arr[j].age, arr[j].math,
arr[j].physics, arr[j].chermistry, arr[j].total, arr[j].average);
}
else if ( strcmp(str, "化學") == 0 )
{
for ( i = 0; i < n; i++ )
{
if ( max < arr[i].chermistry )
{
max = arr[i].chermistry;
j = i;
}
}
printf("\n姓名\t年齡\t數學\t物理\t化學\t總分\t平均分\n");
printf("%s\t%d\t%d\t%d\t%d\t%d\t%.2f\n", arr[j].name, arr[j].age, arr[j].math,
arr[j].physics, arr[j].chermistry, arr[j].total, arr[j].average);
}
}
//掛科
void failSTU(STU *arr, int n)
{
int i = 0, count = 0;
char course[10];
printf("\n輸入要查詢的掛科科目:\n\n");
scanf("%s", course);
if (strcmp(course, "數學") == 0)
{
printf("\n姓名\t年齡\t數學\t物理\t化學\t總分\t平均分\n");
for (i = 0; i < n; i++)
{
if (arr[i].math < 60)
{
printf("%s\t%d\t%d\t%d\t%d\t%d\t%.2f\n", arr[i].name, arr[i].age, arr[i].math,
arr[i].physics, arr[i].chermistry, arr[i].total, arr[i].average);
count++;
}
}
printf("%s掛科的人數:%d", course, count);
}
else if ( strcmp(course, "物理") == 0 )
{
printf("\n姓名\t年齡\t數學\t物理\t化學\t總分\t平均分\n");
for ( i = 0; i < n; i++ )
{
if ( arr[i].physics < 60 )
{
printf("%s\t%d\t%d\t%d\t%d\t%d\t%.2f\n", arr[i].name, arr[i].age, arr[i].math,
arr[i].physics, arr[i].chermistry, arr[i].total, arr[i].average);
count++;
}
}
printf("%s掛科的人數:%d", course, count);
}
else if ( strcmp(course, "數學") == 0 )
{
printf("\n姓名\t年齡\t數學\t物理\t化學\t總分\t平均分\n");
for ( i = 0; i < n; i++ )
{
if ( arr[i].chermistry < 60 )
{
printf("%s\t%d\t%d\t%d\t%d\t%d\t%.2f\n", arr[i].name, arr[i].age, arr[i].math,
arr[i].physics, arr[i].chermistry, arr[i].total, arr[i].average);
count++;
}
}
printf("%s掛科的人數:%d", course, count);
}
}
//平均分降序
void sortSTU(STU *arr, int n)
{
STU temp;
int i = 0, j = 0;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (arr[j].average < arr[j+1].average)
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
printf("\n\n姓名\t年齡\t數學\t物理\t化學\t總分\t平均分\n");
for ( i = 0; i < n; i++ )
{
printf("%s\t%d\t%d\t%d\t%d\t%d\t%.2f\n", arr[i].name, arr[i].age, arr[i].math,
arr[i].physics, arr[i].chermistry, arr[i].total, arr[i].average);
}
}
//按分數段查詢
void scoreSTU(STU *arr, int n)
{
int i = 0, score = 0;
printf("\n\n輸入要查詢的分數段:\n\n");
scanf("%d", &score);
if (score < 60)
{
printf("\n姓名\t年齡\t數學\t物理\t化學\t總分\t平均分\n");
for (i = 0; i < n; i++)
{
if (arr[i].average < 60)
{
printf("%s\t%d\t%d\t%d\t%d\t%d\t%.2f\n", arr[i].name, arr[i].age, arr[i].math,
arr[i].physics, arr[i].chermistry, arr[i].total, arr[i].average);
}
}
}
else if ( score >= 60 && score < 70 )
{
printf("\n姓名\t年齡\t數學\t物理\t化學\t總分\t平均分\n");
for ( i = 0; i < n; i++ )
{
if ( arr[i].average >= 60 && arr[i].average < 70 )
{
printf("%s\t%d\t%d\t%d\t%d\t%d\t%.2f\n", arr[i].name, arr[i].age, arr[i].math,
arr[i].physics, arr[i].chermistry, arr[i].total, arr[i].average);
}
}
}
else if ( score >= 70 && score < 80 )
{
printf("\n姓名\t年齡\t數學\t物理\t化學\t總分\t平均分\n");
for ( i = 0; i < n; i++ )
{
if ( arr[i].average >= 70 && arr[i].average < 80 )
{
printf("%s\t%d\t%d\t%d\t%d\t%d\t%.2f\n", arr[i].name, arr[i].age, arr[i].math,
arr[i].physics, arr[i].chermistry, arr[i].total, arr[i].average);
}
}
}
else if ( score >= 80 && score < 90 )
{
printf("\n姓名\t年齡\t數學\t物理\t化學\t總分\t平均分\n");
for ( i = 0; i < n; i++ )
{
if ( arr[i].average >= 80 && arr[i].average < 90 )
{
printf("%s\t%d\t%d\t%d\t%d\t%d\t%.2f\n", arr[i].name, arr[i].age, arr[i].math,
arr[i].physics, arr[i].chermistry, arr[i].total, arr[i].average);
}
}
}
else if ( score >= 90 && score < 100 )
{
printf("\n姓名\t年齡\t數學\t物理\t化學\t總分\t平均分\n");
for ( i = 0; i < n; i++ )
{
if ( arr[i].average >= 90 && arr[i].average < 100 )
{
printf("%s\t%d\t%d\t%d\t%d\t%d\t%.2f\n", arr[i].name, arr[i].age, arr[i].math,
arr[i].physics, arr[i].chermistry, arr[i].total, arr[i].average);
}
}
}
else
{
printf("\n超出范圍!\n");
return;
}
}
int main(void)
{
STU myArray[N];
int num = 0;
char str[10];
printf("輸入學生人數:\n");
scanf("%d", &num);
//輸入
inputSTU(myArray, num);
//總分最高分
maxSTU(myArray, num, "總分");
//單科最高分
printf("\n輸入要查詢最高分的單科:\n\n");
scanf("%s", str);
maxSTU(myArray, num, str);
//單科掛科
failSTU(myArray, num);
//平均分降序輸出
sortSTU(myArray, num);
//按分數段查詢
scoreSTU(myArray, num);
getchar();
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/50763.html
標籤:C語言
上一篇:DLL加密問題
