c語言錄入學生成績信息
⑴ 用c語言編寫輸入一學生成績,和相應優秀,良好,不及格信息
#include<stdio.h>
#include<stdlib.h>
#include"windows.h"
intmain(intargc,char*argv[])
{
intcj;
do{
system("cls");
printf("請輸入成績:");
scanf("%d",&cj);
if(cj>0&&cj<101)
{
if(cj>=90&&cj<=100)
printf("
優秀
");
elseif(cj>=70&&cj<=89)
printf("
良好
");
elseif(cj>=60&&cj<=69)
printf("
及格
");
elseif(cj>=0&&cj<=59)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|_RED);
printf("
不及格
");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN);
}
}
else
{
printf("
error
");
}
printf("
如果要繼續請按y
");
fflush(stdin);
cj=_getch();
}
while(cj=='y');
return0;
}
⑵ 編寫一個c語言程序,實現錄入學生學號和姓名信息的功能
#include<stdio.h>
#include<stdlib.h>
intmain(void)
{
chars[10];//姓名
intnum;//學號
printf("請輸入姓名: ");
gets(s);
printf("請輸學號: ");
scanf("%d",&num);
printf("姓名是:%s 學號是:%d ",s,num);
system("pause");
return0;
}
(2)c語言錄入學生成績信息擴展閱讀
c語言建立學生檔案
#include<stdio.h>
#include<string.h>
結構學生
{
整數
字元名稱[10];
智
intEng;
墊子;
};
//s_number-檢索的學號
//numebr-文檔已經存儲的學號
//按學號查找
布爾搜索(chars_New[],charNew[])
{
如果(strcmp(s_New,New))
{
返回true;//查找成功
}
其他
{
returnfalse;//查找失敗
}
}
無效menu()
{
printf(「----------------------------------------------------------- 「);
printf(「菜單: 」);
printf(「 1。建立學生檔案 」);
printf(「 2。讀取所有學生記錄 」);
printf(「 3。在文件尾添加學生記錄 」);
printf(「 4。查詢學生姓名 」);
printf(「 5。結束程序 」);
printf(「----------------------------------------------------------- 「);
}
無效menu_2()
{
printf(「----------------------------------------------------------- 「);
printf(「查找選擇菜單: 」);
printf(「 1。按名字查找 」);
printf(「 2。按學號查找 」);
printf(「請選擇: 」);
printf(「----------------------------------------------------------- 「);
}
intmain()
{
而(1)
{
菜單();
法官
printf(「請輸入你的選項:」);
判斷=scanf(「%d」,&n);
如果(判斷==0)
{
printf(「輸入格式錯誤! 」);
}
開關(n)
{
情況1:
{
FILE*pf=fopen(「Student.txt」,「w+」);
字元標志='Y';
while(flag=='Y'|flag=='y')
{
學生stu;//創建學生結構體
printf(「請輸入學生的學號: 」);
scanf(「%d」,&stu.number);
getchar();//吃掉以上一個輸入的回車符
printf(「請輸入學生的姓名: 」);
scanf(「%s」,stu.name);
printf(「請輸入學生的語文成績: 」);
scanf(「%d」,&stu.Chi);
printf(「請輸入學生的英語成績: 」);
scanf(「%d」,&stu.Eng);
printf(「請輸入學生的數學成績: 」);
scanf(「%d」,&stu.Mat);
//把學生檔案導入Student.txt文檔
fprintf(pf,「#姓名:%s 學號:%d 語言成績:%d 英語成績:%d 數學成績:%d 」,stu.name,stu.number,stu.Chi,stu.Eng,stu.Mat);
getchar();//吃掉以上一個輸入的回車符
printf(「是否繼續輸入學生檔案?(是或否) 」);
判斷=scanf(「%c」,&flag);
如果(判斷==0)
{
printf(「輸入格式錯誤! 」);
}
}
fclose(pf);
打破;
}
⑶ 編寫C語言程序:學生成績管理系統輸入學生信息1、輸出所有學生信息(學號,姓名,年齡,成績(C語言,數學
#include <stdio.h>
#include <stdlib.h>
//定義學生信息
typedef struct
{
char name[20];
char no[12];
double math;
double computer;
double average;
double total;
}STUDENT;
//學生人數
#define STUNUM 4
void inputGrade(STUDENT *p,int len);
void outputGrade(STUDENT *p,int len);
void sort(STUDENT *p,int len);
int main(void)
{
int choice;
STUDENT stu[STUNUM];
do
{
printf("1.輸入信息.\n");
printf("2.求平均分和總成績\n");
printf("3.成績排序.\n");
printf("4.查找.\n");
printf("5.成績輸出.\n");
printf("0.退出.\n");
printf("請輸入你的選擇(0-5):");
if(1!=scanf("%d",&choice))
{
fflush(stdin);
printf("請輸入-5\n");
system("cls");
continue;
}
switch(choice)
{
case 1:
printf("請輸入學生數據:\n");
inputGrade(stu,STUNUM);
break;
case 2:
printf("2\n");
break;
case 3:
printf("3\n");
break;
case 4:
printf("4\n");
break;
case 5:
printf("學生成績:\n");
outputGrade(stu,STUNUM);
break;
case 0:
exit(0);
break;
default:
break;
}
system("pause");
system("cls");
} while (1);
system("pause");
return 0;
}
void inputGrade(STUDENT p[],int len)
{
int i;
for (i=0;i<len;i++)
{
scanf("%s%s%lf%lf",p[i].name,p[i].no,
&p[i].math,&p[i].computer);
p[i].total= p[i].math + p[i].computer;
p[i].average = p[i].total/2;
}
}
/*
函數名:outputGrade
函數功能:輸出成績
函數參數:p 成績數組,len數組長度
函數返回值:無
*/
void outputGrade(STUDENT *p,int len)
{
int i;
for (i=0;i<len;i++)
{
printf("%s %s %g %g %g %g\n",p[i].name,p[i].no
,p[i].math,p[i].computer,p[i].total,p[i].average);
}
}
⑷ 用C語言做一個學生成績管理系統 輸入學生人數,錄入學生成績
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
using namespace std;
/*定義學生結構體*/
struct Student
{
char ID[20];
char Name[20];
float Mark1;
float Mark2;
float Mark3;
float Average;
};
/*聲明學生數組及學生數量*/
struct Student students[1000];
int num=0;
/*求平均值*/
float Avg(struct Student stu)
{
return (stu.Mark1+stu.Mark2+stu.Mark3)/3;
}
/*通過學號返回數組下標*/
int Student_SearchByIndex(char id[])
{
int i;
for (i=0;i<num;i++)
{
if (strcmp(students[i].ID,id)==0)
{
return i;
}
}
return -1;
}
/*通過姓名返回數組下標*/
int Student_SearchByName(char name[])
{
int i;
for (i=0;i<num;i++)
{
if (strcmp(students[i].Name,name)==0)
{
return i;
}
}
return -1;
}
/*顯示單條學生記錄*/
void Student_DisplaySingle(int index)
{
printf("%10s%10s%8s%8s%8s%10s\n","學號","姓名","成績","成績","成績","平均成績");
printf("-------------------------------------------------------------\n");
printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[index].ID,students[index].Name,
students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average);
}
/*插入學生信息*/
void Student_Insert()
{
while(1)
{
printf("請輸入學號:");
scanf("%s",&students[num].ID);
getchar();
printf("請輸入姓名:");
scanf("%s",&students[num].Name);
getchar();
printf("請輸入成績:");
scanf("%f",&students[num].Mark1);
getchar();
printf("請輸入成績:");
scanf("%f",&students[num].Mark2);
getchar();
printf("請輸入成績:");
scanf("%f",&students[num].Mark3);
getchar();
students[num].Average=Avg(students[num]);
num++;
printf("是否繼續?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
/*修改學生信息*/
void Student_Modify()
{
//float mark1,mark2,mark3;
while(1)
{
char id[20];
int index;
printf("請輸入要修改的學生的學號:");
scanf("%s",&id);
getchar();
index=Student_SearchByIndex(id);
if (index==-1)
{
printf("學生不存在!\n");
}
else
{
printf("你要修改的學生信息為:\n");
Student_DisplaySingle(index);
printf("-- 請輸入新值--\n");
printf("請輸入學號:");
scanf("%s",&students[index].ID);
getchar();
printf("請輸入姓名:");
scanf("%s",&students[index].Name);
getchar();
printf("請輸入成績:");
scanf("%f",&students[index].Mark1);
getchar();
printf("請輸入成績:");
scanf("%f",&students[index].Mark2);
getchar();
printf("請輸入成績:");
scanf("%f",&students[index].Mark3);
getchar();
students[index].Average=Avg(students[index]);
}
printf("是否繼續?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
/*刪除學生信息*/
void Student_Delete()
{
int i;
while(1)
{
char id[20];
int index;
printf("請輸入要刪除的學生的學號:");
scanf("%s",&id);
getchar();
index=Student_SearchByIndex(id);
if (index==-1)
{
printf("學生不存在!\n");
}
else
{
printf("你要刪除的學生信息為:\n");
Student_DisplaySingle(index);
printf("是否真的要刪除?(y/n)");
if (getchar()=='y')
{
for (i=index;i<num-1;i++)
{
students[i]=students[i+1];//把後邊的對象都向前移動
}
num--;
}
getchar();
}
printf("是否繼續?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
/*按姓名查詢*/
void Student_Select()
{
while(1)
{
char name[20];
int index;
printf("請輸入要查詢的學生的姓名:");
scanf("%s",&name);
getchar();
index=Student_SearchByName(name);
if (index==-1)
{
printf("學生不存在!\n");
}
else
{
printf("你要查詢的學生信息為:\n");
Student_DisplaySingle(index);
}
printf("是否繼續?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
/*按平均值排序*/
void Student_SortByAverage()
{
int i,j;
struct Student tmp;
for (i=0;i<num;i++)
{
for (j=1;j<num-i;j++)
{
if (students[j-1].Average<students[j].Average)
{
tmp=students[j-1];
students[j-1]=students[j];
students[j]=tmp;
}
}
}
}
/*顯示學生信息*/
void Student_Display()
{
int i;
printf("%10s%10s%8s%8s%8s%10s\n","學號","姓名","成績","成績","成績","平均成績");
printf("-------------------------------------------------------------\n");
for (i=0;i<num;i++)
{
printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[i].ID,students[i].Name,
students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average);
}
}
/*將學生信息從文件讀出*/
void IO_ReadInfo()
{
FILE *fp;
int i;
if ((fp=fopen("Database.txt","rb"))==NULL)
{
printf("不能打開文件!\n");
return;
}
if (fread(&num,sizeof(int),1,fp)!=1)
{
num=-1;
}
else
{
for(i=0;i<num;i++)
{
fread(&students[i],sizeof(struct Student),1,fp);
}
}
fclose(fp);
}
/*將學生信息寫入文件*/
void IO_WriteInfo()
{
FILE *fp;
int i;
if ((fp=fopen("Database.txt","wb"))==NULL)
{
printf("不能打開文件!\n");
return;
}
if (fwrite(&num,sizeof(int),1,fp)!=1)
{
printf("寫入文件錯誤!\n");
}
for (i=0;i<num;i++)
{
if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1)
{
printf("寫入文件錯誤!\n");
}
}
fclose(fp);
}
/*主程序*/
void main()
{
int choice;
IO_ReadInfo();
while(1)
{
/*主菜單*/
printf("\n------ 學生成績管理系統------\n");
printf("1. 增加學生記錄\n");
printf("2. 修改學生記錄\n");
printf("3. 刪除學生記錄\n");
printf("4. 按姓名查詢學生記錄\n");
printf("5. 按平均成績排序\n");
printf("6. 退出\n");
printf("請選擇(1-6):");
scanf("%d",&choice);
getchar();
switch(choice)
{
case 1:
Student_Insert();
break;
case 2:
Student_Modify();
break;
case 3:
Student_Delete();
break;
case 4:
Student_Select();
break;
case 5:
Student_SortByAverage();
Student_Display();
break;
case 6:
exit(0);
break;
}
IO_WriteInfo();
}
}
⑸ C語言編程 用結構體的知識編程輸入並列印學生的成績與信息
#include<stdio.h>
#define N 10
struct Student
{
char id[8],name[8];
int s1,s2,s3;
float ave_s;
};
int main()
{
struct Student s[N];
int i,p;
/* 輸入學生成績信息,並計算平均成績 */
for(i=0; i<N; i++)
{
printf("輸入學生 %d 的學號 姓名 和3門課的成績:",i+1);
scanf("%s%s%d%d%d",&s[i].id,&s[i].name,&s[i].s1,&s[i].s2,&s[i].s3);
s[i].ave_s=(s[i].s1+s[i].s2+s[i].s3)/3.0;
}
/* 輸出每個學生的平均成績 */
printf(" 學號 平均成績\n");
for(i=0; i<N; i++)
printf("%8s%8.1f\n\n",s[i].id,s[i].ave_s);
/* 查找平均成績最高的學生 */
p=0;
for(i=0; i<N; i++)
if(s[i].ave_s>s[p].ave_s)
p=i;
/* 輸出平均成績最高的學生信息 */
printf(" 學號 姓名 成績1 成績2 成績3 平均成績\n");
printf("%8s%8s%8d%8d%8d%8.1f\n",s[p].id,s[p].name,s[p].s1,s[p].s2,s[p].s3,s[p].ave_s);
return 0;
}
⑹ c語言錄入10個學生信息,包括學號姓名,5門課成績,並要求錄入學生各科成績,總分,最高最低分,前五名
#include <stdio.h>
#include <math.h>
typedef struct student{
char num[10];
char name[5];
int score1[50],score2[50],score3[50],score4[50],score5[50];
int sum[10];
struct student *p;
}N;
N *ks(){
N *head,*next,*end,sum[10];
head=(N*)malloc(sizeof(N));
next=head;
for(int i=0;i<10;i++){
printf("請第%d次輸入學號,性別,名字,5科成績\n",i+1);
end=(N*)malloc(sizeof(N));
scanf("%s%s%d%d%d%d%d",&end->num,&end->name,&end->score1,&end->score2,&end->score3,&end->score4,&end->score5);
next->p=end;
next=end;
}
end->p=NULL;
return head;
}
void bl(N *head){
int S[10],F[100],f[100],K[20];
int V1[20],V2[20],V3[20],V4[20],V5[20];
N *end=head->p;
int i=0;
char N[10];
float v1,v2,v3,v4,v5;
while(end){
if(i==0)printf("總分前5學%s的score1分數是%dscore2分數是%d\nscore3分數是%dscore4分數是%dscore5分數是%d",end->num,*end->score1,*end->score2,*end->score3,*end->score4,*end->score5);
if(i==2)printf("總分前5學號%s的score1分數是%dscore2分數是%d\nscore3分數是%dscore4分數是%dscore5分數是%d",end->num,*end->score1,*end->score2,*end->score3,*end->score4,*end->score5);
⑺ C語言試編寫輸入、輸出學生信息的函數,設學生信息包括學號、姓名和5門課程的成績。
#include<stdio.h>
struct{
int num;
char name[10];
int s1,s2,s3,s4,s5;
}student[1000];
int main()
{
int number,i;
printf("請輸入學生總人數:");
scanf("%d",&number);
for(i=0;i<number;i++){
printf("請輸入第%d名學生的信息\n",i+1);
printf("學號:");
scanf("%d",&student[i].num);
printf("姓名:");
scanf("%s",&student[i].name);
printf("成績一:");
scanf("%d",&student[i].s1);
printf("成績二:");
scanf("%d",&student[i].s2);
printf("成績三:");
scanf("%d",&student[i].s3);
printf("成績四:");
scanf("%d",&student[i].s4);
printf("成績五:");
scanf("%d",&student[i].s5);
}
printf("學生信息如下:\n");
for(i=0;i<number;i++){
printf("學號:%3d",student[i].num);
printf("姓名:%3s",student[i].name);
printf("成績一:%3d",student[i].s1);
printf("成績二:%3d",student[i].s2);
printf("成績三:%3d",student[i].s3);
printf("成績四:%3d",student[i].s4);
printf("成績五:%3d\n",student[i].s5);
}
return 0;
}
⑻ 用c語言編寫學生成績檔案管理,要求:(1)輸入若干條記錄並保存文件(指學生的信息);(2)學生信息錄入
#include <stdio.h>
#include <stdlib.h> /*其它說明*/
#include <string.h> /*字元串函數*/
#include <time.h>
#define LEN sizeof(STUDENT)
typedef struct stu /*定義結構體數組用於緩存數據*/
{
char num[6];
char name[5];
int score[3];
int sum;
float average;
int order;
struct stu *next;
}STUDENT;
/*初始化函數*/
STUDENT *Init()
{
return NULL; /*返回空指針*/
}
/*菜單選擇函數*/
int Menu_Select()
{
int n;
struct tm *pt; /*定義時間結構體*/
time_t t;
t=time(NULL);
pt=localtime(&t); /*讀取系統日期並把它放到結構體中*/
printf("\n按任一鍵進入主菜單...... \n"); /*按任一鍵進入主菜單*/
//getch(); /*從鍵盤讀取一個字元,但不顯示於屏幕*/
system("pause");
system("cls"); /*清屏*/
printf("********************************************************************************\n");
printf("\t\t 歡迎 Welcome to\n");
printf("\n\t\t\t 使用學生管理系統1.0\n");
printf("*************************************MENU***************************************\n");
printf("\t\t\t1. 輸入學生成績記錄 Enter the record\n"); /*輸入學生成績記錄*/
printf("\t\t\t2. 顯示 Print the record\n"); /*顯示*/
printf("\t\t\t3. 尋找 Search record on name\n"); /*尋找*/
printf("\t\t\t4. 刪除 Delete a record\n"); /*刪除*/
printf("\t\t\t5. 排序 Sort to make New a file\n"); /*排序*/
printf("\t\t\t6. 插入 Insert record to list\n"); /*插入*/
printf("\t\t\t7. 保存 Save the file\n"); /*保存*/
printf("\t\t\t8. 讀取 Load the file\n"); /*讀取*/
printf("\t\t\t9. 退出 Quit\n"); /*退出*/
printf("\n********************************************************************************\n");
printf("\t\t\t\t當前系統日期:%d-%d-%d\n",pt->tm_year+1900,pt->tm_mon+1,pt->tm_mday); /*顯示當前系統日期*/
do
{
printf("\n\t\t\t輸入你的選擇Enter your choice(1~9):");
fflush(stdin);
scanf("%d",&n);
}while(n<1||n>9); /*如果選擇項不在1~9之間則重輸*/
return(n); /*返回選擇項,主函數根據該數調用相應的函數*/
}
/*輸入函數*/
STUDENT *Create()
{
int i,s;
STUDENT *head=NULL,*p; /* 定義函數.此函數帶回一個指向鏈表頭的指針*/
system("cls");
for(;;)
{
p=(STUDENT *)malloc(LEN); /*開辟一個新的單元*/
if(!p) /*如果指針p為空*/
{
printf("\n輸出內存溢出. Out of memory."); /*輸出內存溢出*/
return (head); /*返回頭指針,下同*/
}
printf("輸入學號Enter the num(0:list end):");
scanf("%s",p->num);
if(p->num[0]=='0') break; /*如果學號首字元為0則結束輸入*/
printf("輸入名字Enter the name:");
scanf("%s",p->name);
printf("請輸入3門成績Please enter the %d scores\n",3); /*提示開始輸入成績*/
s=0; /*計算每個學生的總分,初值為0*/
for(i=0;i<3;i++) /*3門課程循環3次*/
{
do
{
printf("成績score%d:",i+1);
scanf("%d",&p->score[i]);
if(p->score[i]<0 || p->score[i]>100) /*確保成績在0~100之間*/
printf("數據錯誤,請重新輸入 Data error,please enter again.\n");
}while(p->score[i]<0 || p->score[i]>100);
s=s+p->score[i]; /*累加各門成績*/
}
p->sum=s; /*將總分保存*/
p->average=(float)s/3; /*先用強制類型轉換將s轉換成float型,再求平均值*/
p->order=0; /*未排序前此值為0*/
p->next=head; /*將頭結點做為新輸入結點的後繼結點*/
head=p; /*新輸入結點為新的頭結點*/
}
return(head);
}
/* 顯示全部記錄函數*/
void Print(STUDENT *head)
{
int i=0; /* 統計記錄條數*/
STUDENT *p; /*移動指針*/
system("cls");
p=head; /*初值為頭指針*/
printf("\n************************************STUDENT************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
while(p!=NULL)
{
i++;
printf("| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("-------------------------------------------------------------------------------\n");
printf("**************************************END**************************************\n");
}
/*查找記錄函數*/
void Search(STUDENT *head)
{
STUDENT *p; /* 移動指針*/
char s[5]; /*存放姓名用的字元數組*/
system("cls");
printf("請輸入個姓名來查找. Please enter name for searching.\n");
scanf("%s",s);
p=head; /*將頭指針賦給p*/
while(strcmp(p->name,s) && p != NULL) /*當記錄的姓名不是要找的,或指針不為空時*/
p=p->next; /*移動指針,指向下一結點*/
if(p!=NULL) /*如果指針不為空*/
{
printf("\n*************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
}
else
printf("\n沒有該學生 There is no num %s student on the list.\n",s); /*顯示沒有該學生*/
}
/*刪除記錄函數*/
STUDENT *Delete(STUDENT *head)
{
//int n;
STUDENT *p1,*p2; /*p1為查找到要刪除的結點指針,p2為其前驅指針*/
char c,s[6]; /*s[6]用來存放學號,c用來輸入字母*/
system("cls");
printf("請輸入要刪除的學號 Please enter the Deleted num: ");
scanf("%s",s);
p1=p2=head; /*給p1和p2賦初值頭指針*/
while(strcmp(p1->num,s) && p1 != NULL) /*當記錄的學號不是要找的,或指針不為空時*/
{
p2=p1; /*將p1指針值賦給p2作為p1的前驅指針*/
p1=p1->next; /*將p1指針指向下一條記錄*/
}
if(strcmp(p1->num,s)==0) /*學號找到了*/
{
printf("**************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
printf("\n是否要刪除,輸入Y刪除,N則退出\nAre you sure to Delete the student Y/N ?"); /*提示是否要刪除,輸入Y刪除,N則退出*/
for(;;)
{
scanf("%c",&c);
if(c=='n'||c=='N') break; /*如果不刪除,則跳出本循環*/
if(c=='y'||c=='Y')
{
if(p1==head) /*若p1==head,說明被刪結點是首結點*/
head=p1->next; /*把第二個結點地址賦予head*/
else
p2->next=p1->next; /*否則將一下結點地址賦給前一結點地址*/
//n=n-1;
printf("\n學號為(Num): %s 學生以被刪除(student have been Deleted.)\n",s);
printf("別忘了保存. Don't forget to Save.\n");break; /*刪除後就跳出循環*/
}
}
}
else
printf("\n沒有這個學生在表上\nThere is no num %s student on the list.\n",s); /*找不到該結點*/
return(head);
}
/*排序函數*/
STUDENT *Sort(STUDENT *head)
{
int i=0; /*保存名次*/
STUDENT *p1,*p2,*t,*temp; /*定義臨時指針*/
temp=head->next; /*將原表的頭指針所指的下一個結點作頭指針*/
head->next=NULL; /*第一個結點為新表的頭結點*/
while(temp!=NULL) /*當原表不為空時,進行排序*/
{
t=temp; /*取原表的頭結點*/
temp=temp->next; /*原表頭結點指針後移*/
p1=head; /*設定移動指針p1,從頭指針開始*/
p2=head; /*設定移動指針p2做為p1的前驅,初值為頭指針*/
while(t->average<p1->average&&p1!=NULL) /*作成績平均分比較*/
{
p2=p1; /*待排序點值小,則新表指針後移*/
p1=p1->next;
}
if(p1==p2) /*p1==p2,說明待排序點值大,應排在首位*/
{
t->next=p1; /*待排序點的後繼為p*/
head=t; /*新頭結點為待排序點*/
}
else /*待排序點應插入在中間某個位置p2和p1之間,如p為空則是尾部*/
{
t->next=p1; /*t的後繼是p1*/
p2->next=t; /*p2的後繼是t*/
}
}
p1=head; /*已排好序的頭指針賦給p1,准備填寫名次*/
while(p1!=NULL) /*當p1不為空時,進行下列操作*/
{
i++; /*結點序號*/
p1->order=i; /*將結點序號賦值給名次*/
p1=p1->next; /*指針後移*/
}
printf("排序成功 Sorting is sucessful.\n"); /*排序成功*/
return (head);
}
/*插入記錄函數*/
STUDENT *Insert(STUDENT *head,STUDENT *New)
{
STUDENT *p0,*p1,*p2;
//int n;
int sum1,i;
p1=head; /*使p1指向第一個結點*/
p0=New; /*p0指向要插入的結點*/
printf("\nPlease enter a New record.\n"); /*提示輸入記錄信息*/
printf("輸入學號Enter the num:");
scanf("%s",New->num);
printf("輸入名字Enter the name:");
scanf("%s",New->name);
printf("Please enter the %d scores.\n",3);
sum1=0; /*保存新記錄的總分,初值為0*/
for(i=0;i<3;i++)
{
do
{
printf("成績score%d:",i+1);
scanf("%d",&New->score[i]);
if(New->score[i]>100||New->score[i]<0)
printf("數據錯誤Data error,please enter again.\n");
}while(New->score[i]>100||New->score[i]<0);
sum1=sum1+New->score[i]; /*累加各門成績*/
}
New->sum=sum1; /*將總分存入新記錄中*/
New->average=(float)sum1/3;
New->order=0;
if(head==NULL) /*原來的鏈表是空表*/
{
head=p0;
p0->next=NULL;
} /*使p0指向的結點作為頭結點*/
else
{
while((p0->average<p1->average)&&(p1->next!=NULL))
{
p2=p1; /*使p2指向剛才p1指向的結點*/
p1=p1->next; /*p1後移一個結點*/
}
if(p0->average>=p1->average)
{
if(head==p1)head=p0; /*插到原來第一個結點之前*/
else p2->next=p0; /*插到p2指向的結點之後*/
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
} /*插到最後的結點之後*/
}
//n=n+1; /*結點數加1*/
head=Sort(head); /*調用排序的函數,將學生成績重新排序*/
printf("\n學生Student %s 已被更新have been inserted.\n",New->name);
printf("不要忘了保存Don't forget to Save the New file.\n");
return(head);
}
/*保存數據到文件函數*/
void Save(STUDENT *head)
{
FILE *fp; /*定義指向文件的指針*/
STUDENT *p; /* 定義移動指針*/
char outfile[10];
printf("輸出文件例如:c:\\score Enter outfile name,for example c:\\score\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"w"))==NULL) /*為輸出打開一個二進制文件,為只寫方式*/
{
printf("打不開文件Cannot open the file\n");
return; /*若打不開則返回菜單*/
}
printf("\n保存中...Saving the file......\n");
p=head; /*移動指針從頭指針開始*/
while(p!=NULL) /*如p不為空*/
{
fwrite(p,LEN,1,fp); /*寫入一條記錄*/
p=p->next; /*指針後移*/
}
fclose(fp); /*關閉文件*/
printf("保存成功....Save the file successfully!\n");
}
/* 從文件讀數據函數*/
STUDENT *Load()
{
STUDENT *p1,*p2,*head=NULL; /*定義記錄指針變數*/
FILE *fp; /* 定義指向文件的指針*/
char infile[10];
printf("倒入文件例如:c:\\score Enter infile name,for example c:\\score\n");
scanf("%s",infile);
if((fp=fopen(infile,"r"))==NULL) /*打開一個二進制文件,為只讀方式*/
{
printf("打不開文件Can not open the file.\n");
return(head);
}
printf("\n尋找文件...Loading the file!\n");
p1=(STUDENT *)malloc(LEN); /*開辟一個新單元*/
if(!p1)
{
printf("內存溢出!Out of memory!\n");
return(head);
}
head=p1; /*申請到空間,將其作為頭指針*/
while(!feof(fp)) /*循環讀數據直到文件尾結束*/
{
if(fread(p1,LEN,1,fp)!=1) break; /*如果沒讀到數據,跳出循環*/
p1->next=(STUDENT *)malloc(LEN); /*為下一個結點開辟空間*/
if(!p1->next)
{
printf("Out of memory!\n");
return (head);
}
p2=p1; /*使p2指向剛才p1指向的結點*/
p1=p1->next; /*指針後移,新讀入數據鏈到當前表尾*/
}
p2->next=NULL; /*最後一個結點的後繼指針為空*/
fclose(fp);
printf("\n你成功的從文件中讀取了數據!\nYou have success to read data from the file!\n");
return (head);
}
/*主函數界面*/
int main()
{
STUDENT *head,New;
head=Init(); //鏈表初始化,使head的值為NULL
for(;;) //循環無限次
{
switch(Menu_Select())
{
case 1:head=Create();break;
case 2:Print(head);break;
case 3:Search(head);break;
case 4:head=Delete(head);break;
case 5:head=Sort(head);break;
case 6:head=Insert(head,&New);break; //&New表示返回地址
case 7:Save(head);break;
case 8:head=Load(); break;
case 9:exit(0); //如菜單返回值為9則程序結束
}
}
return 0;
}
⑼ c語言編程,輸入學生成績記錄表重的信息。再按從高到低的排序輸出,並計算總分
#include<stdio.h>
structStudent{
intnum;
charname[10];
intgrade;
};
voidmain(){
voidinput(structStudentstu[],intn);//函數聲明//
voidorder(structStudentstu[],intn);
intsum(structStudentstu[],intn);
structStudentstu[10];
input(stu,10);
order(stu,10);
printf("Sum=%d ",sum(stu,10));
}
voidinput(structStudentstu[],intn){
inti;
printf("請輸入各學生的信息:學號、姓名、成績: ");
for(i=0;i<n;i++)
scanf("%d%s%d",&stu[i].num,stu[i].name,&stu[i].grade);
}
voidorder(structStudentstu[],intn){
inti,j;
structStudenttemp;
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(stu[i].grade<stu[j].grade){
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
}
intsum(structStudentstu[],intn){
inti,sum=0;
for(i=0;i<n;++i)
sum+=stu[i].grade;
returnsum;
}