結構體錄入學生成績
⑴ 求高手用C語言結構體編寫一個簡單的學生成績管理系統,實現:對學生成績的錄入,包括ID、name、
有,要的留郵箱.....
⑵ 利用結構體類型編製程序,實現輸入一個學生的數學期中和期末成績,然後計算其平均成績
#include<stdio.h>
#defineN100//數組總長,按需調整
/*定義學生結構體*/
structStudent
{
intID;
charName[20];
floatMark1;
floatMark2;
//floatMark3;
floatSum;
};
/*聲明學生數組及學生數量*/
structStudentstudents[N];//預定義結構體數組長度
/*求總分*/
floatSums(structStudentstu)
{
returnstu.Mark1+stu.Mark2;//+stu.Mark3;
}
/*輸入學生信息*/
intStudent_Input(){
intnum=0;
while(1){
//printf("請輸入學號:");//請自行將while循環改為固定個數輸入
students[num].ID=num;
//getchar();
printf("請輸入姓名:");
scanf("%s",&students[num].Name);
getchar();
printf("請輸入成績1:");//請自行將科目名稱修改
scanf("%f",&students[num].Mark1);
getchar();
printf("請輸入成績2:");
scanf("%f",&students[num].Mark2);
getchar();
students[num].Sum=Sums(students[num]);
num++;
printf("是否繼續?(y/n)");//如改為固定個數輸入,這個提示及下面判斷可以去掉
if(getchar()=='n'){
break;
}
}
returnnum;//返回實際輸入學生資料個數
}
/*按總分排序*/
voidStudent_SortBySum(intn){//冒泡排序
inti,j;
structStudenttmp;
for(i=0;i<n;i++){
for(j=1;j<n-i;j++){
if(students[j-1].Sum<students[j].Sum){
tmp=students[j-1];
students[j-1]=students[j];
students[j]=tmp;
}
}
}
}
/*顯示單獨一個學生信息*/
voidStudent_Show_One(structStudentstu)//輸出格式,按需要改動
{
printf("%10d%10s%8.2f%8.2f%8.2f ",stu.ID,stu.Name,
stu.Mark1,stu.Mark2,stu.Sum);
}
/*顯示全部學生信息*/
voidStudent_Display(intn)
{
inti;
printf("%10s%10s%8s%8s%8s ","學號","姓名","成績","成績","總成線");//輸出類似表頭
printf("--------------------------------------------------------- ");
for(i=0;i<n;i++)//逐個輸出學生成線信息
{
Student_Show_One(students[i]);
}
}
/*主程序*/
intmain(){
intn=0;
n=Student_Input();//輸入學生信息
Student_SortBySum(n);//排序
Student_Display(n);//輸出
return0;
}
⑶ c++ 定義一個結構體,輸入學生的信息,並輸出學生的總成績與名次
#include<stdio.h>
#include<string.h>
#define STU 2
typedef struct
{
char name [100];
int ID;
float s[3];
float Ascore;
int rank;
}student;
void ave(student *a) //平均成績計算函數
{
int i,j;
float sum=0;
for(i=0;i<STU;i++)
{
(j=0;j<3;j++)
{
sum+=a[i].s[j];
}
a[i].Ascore=sum;
sum=0;
}
}
void RANK(student *a) //學生成績排名函數
{
int i,max=0,j;
float score[STU];
float temp;
for(i=0;i<STU;i++)
score[i]=a[i].Ascore;
for(i=0;i<STU-1;i++)
{
max=i;
for(j=i+1;j<STU;j++)
if(score[j]>score[i]) max=j;
if(i!=max) {temp=score[i];score[i]=score[max];score[max]=temp;}
}
for(i=0;i<STU;i++)
{
for(j=0;;j++)
if(a[i].Ascore>=score[j]) break;
a[i].rank=j+1;
}
}
void Input(student *a)
{
int i;
for(i=0;i<STU;i++)
{
printf("依次請輸入學生的姓名,學號,成績1,成績2,成績3\n");
scanf("%s%d",&a[i].name,&a[i].ID);
scanf("%f%f%f",&a[i].s[0],&a[i].s[1],&a[i].s[2]);
}
}
void Output(student *a)
{
int i;
for(i=0;i<STU;i++)
printf(" 學生姓名%s,學號%d,總成績%f,排名%d\n",a[i].name,a[i].ID,a[i].Ascore,a[i].rank);
}
void main()
{
student stu[STU];
Input(stu);
ave(stu);
RANK(stu);
Output(stu);
}
⑷ 定義一個結構體類型的結構體數組stud,輸入學生三門課成績,然後按總分成績排序後輸出學生成績。
#include"stdio.h"
#include"string.h"
struct student
{ int num;
char name[20];
float yingyu;
float shuxue;
float cc;
float sum;
};
struct student stud[100];
int main()
{ int i,n,k,j,z=1;
float t;
char m[20];
printf("輸入有N個學生數");
scanf("%d",&n);
printf("學號 姓名 英語 數學 c++\n");
for(i=0;i<n;i++)
{
scanf("%d%s%f%f%f",&stud[i].num,&stud[i].name,&stud[i].yingyu,&stud[i].shuxue,&stud[i].cc);
stud[i].sum=stud[i].yingyu+stud[i].shuxue+stud[i].cc;
}
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
if(stud[i].sum>stud[i+1].sum)
{ t=stud[i].sum;
stud[i].sum=stud[i+1].sum;
stud[i+1].sum=t;
strcpy(m,stud[i].name);
strcpy(stud[i].name,stud[i+1].name);
strcpy(stud[i+1].name,m);
k=stud[i].num;
stud[i].num=stud[i+1].num;
stud[i+1].num=k;
}
printf("學號 姓名 總分 名次 \n");
for(i=0;i<n;i++)
{
printf(" %d %s %.2f %d\n",stud[i].num,stud[i].name,stud[i].sum,z);
z++;}
return 0;
}
⑸ C語言結構體錄入成績計算總會分並輸出總分最高的學生信息詳情看圖
#include<stdio.h>
#include<malloc.h>
structstudent{
intnum;
charname[10];
floatscore[4];
}stu[3]={
{10,"li",80.5,87.5,78,0},
{11,"wang",90,77.5,80,0},
{12,"yang",69,99.5,82,0}
};
intmain()
{
floatmax=0;
structstudent*p=&stu[0],*s;
intindex=0;
while(index<3){
floatsum=0;
for(inti=0;i<4;i++){
sum+=p->score[i];
}
if(sum>max){
max=sum;
s=p;
}
p=&stu[++index];
}
printf("%d%s%f%f%f%f",s->num,s->name,s->score[0],s->score[1],s->score[2],s->score[3]);
}
⑹ 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語言結構體 學生成績管理系統
我這里有一個圖書館管理系統,其實差不多的,你改改吧!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NAME_MAX 100//書的名字的最長字數
#define WRITER_MAX 100//作者名字的最長
#define PUB_MAX 100//出版單位最長名字
#define TIME 100//出版時間
typedef struct books
{
int loading;
char name[NAME_MAX];
char writer[WRITER_MAX];
int identify;
char pub[PUB_MAX];
char time[TIME];
int price;
struct books * next;
}book;
//頭結點不存儲信息
void Init(book * head)
{
head->next=NULL;
}
//列印一些歡迎詞之類的。。。。。
void welcome()
{
printf("******歡迎使用@@@@圖書館,哈哈*********\n");
printf("\n\n");
printf("1:圖書信息錄入功能\n");
printf("2:圖書信息瀏覽功能,顯示該書的所有信息\n");
printf("3:圖書信息查詢功能:按書名查詢與按作者名查詢\n");
printf("4:圖書信息的修改和刪除,可對相應數據進行修改和刪除\n");
}
//顯示一本書的信息
void print_the_book(book * p1)
{
printf("loading number:%d \n",p1->loading);
printf("name: ");
puts(p1->name);
printf(" \n");
printf("writer: ");
puts(p1->writer);
printf(" \n");
printf("identify:%d ***\n",p1->identify);
printf(" \n");
printf("pub: ");
puts(p1->pub);
printf(" \n");
printf("time: ");
puts(p1->time);
printf(" \n");
printf("price:%d ***\n",p1->price);
}
int chongfu(book * head,book * p)
{
book * p1=head->next;
int a=0;
while(p1!=NULL)
{
if(strcmp(p1->name,p->name)==0)
{
if(strcmp(p1->writer,p->writer)==0)
{
a=1;
break;
}
}
else
p1=p1->next;
}
return a;
}
//錄入一些信息。。。。
void luru(book * head)
{
book * p1=head;
book * p2;
//尋找NULL前的那個點
while(p1->next!=NULL)
{
p1=p1->next;
}
int a;
do
{
p2=(book *)malloc(sizeof(book));
printf("輸入書本信息\n");
printf("登錄號\n");
fflush(stdin);
scanf("%d",&p2->loading);
printf("書名\n");
fflush(stdin);
gets(p2->name);
fflush(stdin);
printf("作者\n");
gets(p2->writer);
fflush(stdin);
printf("分類號\n");
scanf("%d",&p2->identify);
fflush(stdin);
printf("出版社\n");
gets(p2->pub);
fflush(stdin);
printf("出版時間\n");
gets(p2->time);
fflush(stdin);
printf("價格\n");
scanf("%d",&p2->price);
p2->next=NULL;
fflush(stdin);
//加入鏈表
if(chongfu(head,p2))
printf("錄入信息重復\n");
else
{
p1->next=p2;
p1=p2;
}
printf("還想繼續錄入信息嗎?\n(1:繼續 0:停止)\n");
scanf("%d",&a);
}while(a==1);
}
void liulan(book * head)
{
book * p1=head->next;
int i=1;
while(p1!=NULL)
{
printf("*********第%d本書***********\n",i++);
print_the_book(p1);
p1=p1->next;
}
}
//查詢。。。。
void chaxun(book * head)
{
printf("按書名查詢還是按作者名查詢?\n(1:按書名查詢 0:按作者名查詢)\n");
book * p=head->next;
int a;
scanf("%d",&a);
int num=0;
char cha[NAME_MAX];
switch(a)
{
case 1:
printf("輸入書名:\n");
gets(cha);
while(p!=NULL)
{
if(strcmp(p->name,cha)==0)
{
num++;
print_the_book(p);
}
p=p->next;
}
break;
case 2:
printf("輸入作者名:\n");
gets(cha);
while(p!=NULL)
{
if(strcmp(p->writer,cha)==0)
{
num++;
print_the_book(p);
}
p=p->next;
}
}
if(num==0)
printf("無符合書本\n");
}
//修改信息
void xiugai(book * head)
{
printf("輸入需要修改書本的名稱和作者:\n");
char name_book[NAME_MAX];
char writer_book[WRITER_MAX];
printf("書本名稱:");
gets(name_book);
gets(writer_book);
book * p1=head->next;
int a=0;
while(p1!=NULL)
{
if(strcmp(p1->name,name_book)==0)
{
if(strcmp(p1->writer,writer_book)==0)
{
a=1;
break;
}
}
}
if(a==0)
printf("沒有這本書。。。\n");
else
{
print_the_book(p1);
printf("輸入新信息\n");
scanf("%d",&p1->loading);
gets(p1->name);
gets(p1->writer);
scanf("%d",&p1->identify);
gets(p1->pub);
gets(p1->time);
scanf("%d",&p1->price);
}
}
void main()
{
book * head;
head=(book *)malloc(sizeof(book));
Init(head);
int contin=1;
while(contin)
{
welcome();
printf("想進行哪項操作?\n");
int a;
scanf("%d",&a);
switch(a)
{
case 1:
luru(head);
break;
case 2:
liulan(head);
break;
case 3:
chaxun(head);
break;
case 4:
xiugai(head);
}
printf("繼續使用圖書館還是退出?\n(1:continue 0:exit)\n");
scanf("%d",&contin);
}
}
⑻ 用結構體輸入兩個學生的學號、姓名和成績,輸出 成績較高的學生的學號、姓名和成績。
代碼如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{struct Student//聲明結構體類型
{ int num;
char name[20];
float score;
}
student1,student2;//定義兩個結構體變數
scanf("%d%s%f",&student1.num,student1.name,&student1.score);//輸入兩個學生的數據
scanf("%d%s%f",&student2.num,student2.name,&student2.score);
printf("The higher score is: ");
if(student1.score>student2.score)
printf("%d %s %6.2f ",student1.num,student1.name,student1.score);
else if(student1.score<student2.score)
printf("%d %s %6.2f ",student2.num,student2.name,student2.score);
else
{printf("%d %s %6.2f ",student1.num,student1.name,student1.score);
printf("%d %s %6.2f ",student2.num,student2.name,student2.score);
}
return 0;
}
(8)結構體錄入學生成績擴展閱讀
結構體作用
結構體和其他類型基礎數據類型一樣,例如int類型、char類型,只不過結構體可以做成你想要的數據類型。以方便日後的使用。
在實際項目中,結構體是大量存在的。研發人員常使用結構體來封裝一些屬性來組成新的類型。由於C語言內部程序比較簡單,研發人員通常使用結構體創造新的「屬性」,其目的是簡化運算。
結構體在函數中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關心這個是什麼,只要根據定義使用就可以了。
訪問結構成員
為了訪問結構的成員,我們使用成員訪問運算符(.)。成員訪問運算符是結構變數名稱和我們要訪問的結構成員之間的一個句號。您可以使用struct關鍵字來定義結構類型的變數。
結構作為函數參數
您可以把結構作為函數參數,傳參方式與其他類型的變數或指針類似。
指向結構的指針
您可以定義指向結構的指針,方式與定義指向其他類型變數的指針相似,如下所示:
struct Books *struct_pointer;
現在,您可以在上述定義的指針變數中存儲結構變數的地址。為了查找結構變數的地址,請把 & 運算符放在結構名稱的前面,如下所示:
struct_pointer = &Book1;
為了使用指向該結構的指針訪問結構的成員,您必須使用 -> 運算符,如下所示:
struct_pointer->title;
⑼ C語言用結構體方法輸入50個學生記錄,組成記錄數組,然後按成績由高到低輸出(每行10個記錄)
#define N 5
#include "stdio.h"
struct student
{ int num;
int score;
};
struct student s[N],temp;
void input()
{ int i;
for(i=0;i<N;i++)
{
printf("Enter number:");
scanf("%d",&s[i].num);
printf("Enter score:");
scanf("%d",&s[i].score);
}
}
void output()
{ int i;
for(i=0;i<N;i++)
{// if(i%10==0)//是不是想利用變數i來控制換行?
printf("num=%d\n,score=%d\n",s[i].num,s[i].score);
}
}
void main()
{ void input();
void output();
int i,j,b;
input();
for(i=0;i<N;i++)
{
for(j=i+1;j<N;j++)
if(s[i].score>s[j].score)
{temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
output();
}
調試正確