结构体录入学生成绩
⑴ 求高手用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();
}
调试正确