如何用C语言编写一个学生的成绩表?

作者&投稿:迪殷 (若有异议请与网页底部的电邮联系)
c语言如何编写一个输出学生成绩等级的程序?~

一、首先打开VC++

二、文件》》新建

三、创建一个C++空白文档头文件是必须声明的# include

四、说下主体思想我们定义一个求每门课平均成绩的函数AverageCourse它的形参一个是二维数组,用来传递学生成绩;一个是指针变量(数组名),存放每门课的平均成绩:
void AverageCourse(float score[][4],float *avg)
{
int i,j;
float sum;
for(i=0;i<4;i++)
{
sum=0;
for(j=0;j<4;j++)
sum+=score[j][i];
avg[i]=sum/4;
}
}

五、之后我们定义一个求总平均成绩的函数AverageAll
它的形参一个是指针变量(数组名),传递一个首地址
n是要计算的成绩个数
float AverageAll(float *score, int n)
{
int i=0;
float sum = 0;
while(i<n)
{
sum+=score[i];
i++;
}
return sum/n;
}

六、我们还需定义一个查询学生成绩的函数AStudentScore
它的形参一个是指向数组的指针,n是要计算的学生号
void StudentScore(float(*score)[4], int n)
{
int i;
for(i=0; i<4; i++)
printf("%4.2f ", *(*(score+n)+i));
printf("
");
}

下面是主函数
int main()
{
int num,i;
//定义一个数组aveCourse来存储每门课的平均成绩,
定义变量aveAll来存储总的平均成绩
float aveAll,aveCourse[4];
float score[4][4] = {{67, 78, 45, 88}, {76, 54, 90, 69},
{99, 45, 88, 99}, {98, 69, 77, 87}};//这是成绩,可以用scanf输入,也可以在这里定义
/* 调用函数AverageAll求16个分数的平均分 */
aveAll=AverageAll(&score[0][0],16);
printf("The average of all courses is:
%f

",aveAll);
/* 调用函数AverageCourse求4门客的平均分 */
AverageCourse(score,aveCourse);
for(i=0;i<4;i++)
printf("The average of %dth course is:
%f
",i,aveCourse[i]);
/* 求出序号是num的学生的成绩 */
printf("
Please input the num of student(0-3):
");
scanf("%d", &num);
printf("The score of the %dth student is:
",num);
StudentScore(score,num);
getch();
return 0;
}
七、程序运行结果


c语言:
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。

C语言课程设计报告-------学生成绩简单管理程序 一、系统菜单的主要功能 (1)输入若干条记录 (2)显示所有记录 (3)按学号排序 (4)插入一条记录 (5)按姓名查找,删除一条记录 (6)查找并显示一条记录 (7)输出统计信息 (新增) (8)从正文中添加数据到结构体数组中 (9)将所有数据写入文件中 (0)退出程序 二、题目分析 该题主要考察学生对结构体,指针,文件的操作,以及C语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。 菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧,下面就各个子程序中的功能进行说明: 功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。 功能2是显示所有的记录,通过循环输出,格式也比较重要。 功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。 功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。 功能6的算法在5中就已经体现了,输入姓名,一一比较。 功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。 功能8和9是对文件的操作,提前准备好数据。 三、程序正文部分 #include /*引用库函数*/ #include #include #include typedef struct /*定义结构体数组*/ { char num[10]; /*学号*/ char name[20]; /*姓名*/ int score; /*成绩*/ }Student; Student stu[80]; /*结构体数组变量*/ int menu_select() /*菜单函数*/ { char c; do{ system("cls"); /*运行前清屏*/ printf("****Students' Grade Management System****
"); /*菜单选择*/ printf(" | 1. Input Records |
"); printf(" | 2. Display All Records |
"); printf(" | 3. Sort |
"); printf(" | 4. Insert a Record |
"); printf(" | 5. Delete a Record |
"); printf(" | 6. Query |
"); printf(" | 7. Statistic |
"); printf(" | 8. Add Records from a Text File|
"); printf(" | 9. Write to a Text file |
"); printf(" | 0. Quit |
"); printf("*****************************************
"); printf("Give your Choice(0-9):"); c=getchar(); /*读入选择*/ }while(c'9'); return(c-'0'); /*返回选择*/ } int Input(Student stud[],int n) /*输入若干条记录*/ {int i=0; char sign,x[10]; /*x[10]为清除多余的数据所用*/ while(sign!='n'&&sign!='N') /*判断*/ { printf("student's num:"); /*交互输入*/ scanf("%s",stud[n+i].num); printf("student's name:"); scanf("%s",stud[n+i].name); printf("student's score:"); scanf("%d",&stud[n+i].score); gets(x); /*清除多余的输入*/ printf("any more records?(Y/N)"); scanf("%c",&sign); /*输入判断*/ i++; } return(n+i); } void Display(Student stud[],int n) /*显示所有记录*/ { int i; printf("-----------------------------------
"); /*格式头*/ printf("number name score
"); printf("-----------------------------------
"); for(i=1;i1&&i%10==0) /*每十个暂停*/ {printf("-----------------------------------
"); /*格式*/ printf(""); system("pause"); printf("-----------------------------------
"); } } printf(""); system("pause"); } void Sort_by_num(Student stud[],int n) /*按学号排序*/ { int i,j,*p,*q,s; char t[10]; for(i=0;i0) {strcpy(t,stud[j+1].num); strcpy(stud[j+1].num,stud[j].num); strcpy(stud[j].num,t); strcpy(t,stud[j+1].name); strcpy(stud[j+1].name,stud[j].name); strcpy(stud[j].name,t); p=&stud[j+1].score; q=&stud[j].score; s=*p; *p=*q; *q=s; } } int Insert_a_record(Student stud[],int n) /*插入一条记录*/ {char x[10]; /*清除多余输入所用*/ printf("student's num:"); /*交互式输入*/ scanf("%s",stud[n].num); printf("student's name:"); scanf("%s",stud[n].name); printf("student's score:"); scanf("%d",&stud[n].score); gets(x); n++; Sort_by_num(stud,n); /*调用排序函数*/ printf("Insert Successed!
"); /*返回成功信息*/ return(n); } int Delete_a_record(Student stud[],int n) /*按姓名查找,删除一条记录*/ { char s[20]; int i=0,j; printf("tell me his(her) name:"); /*交互式问寻*/ scanf("%s",s); while(strcmp(stud[i].name,s)!=0&&istud[i].score) j=i; if(stud[k].score<stud[i].score) k=i; } aver=1.0*sum/n; printf("there are %d records.
",n); /*总共记录数*/ printf("the hignest score:
"); /*最高分*/ printf("number:%s name:%s score:%d
",stud[j].num,stud[j].name,stud[j].score); printf("the lowest score:
"); /*最低分*/ printf("number:%s name:%s score:%d
",stud[k].num,stud[k].name,stud[k].score); printf("the average score is %5.2f
",aver); /*平均分*/ } int AddfromText(Student stud[],int n) /*从文件中读入数据*/ { int i=0,num; FILE *fp; /*定义文件指针*/ char filename[20]; /*定义文件名*/ printf("Input the filename:"); scanf("%s",filename); /*输入文件名*/ if((fp=fopen(filename,"rb"))==NULL) /*打开文件*/ { printf("cann't open the file
"); /*打开失败信息*/ printf(""); system("pause"); return(n); } fscanf(fp,"%d",&num); /*读入总记录量*/ while(i<num) /*循环读入数据*/ { fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,&stud[n+i].score); i++; } n+=num; fclose(fp); /*关闭文件*/ printf("Successed!
"); printf(""); system("pause"); return(n); } void WritetoText(Student stud[],int n) /*将所有记录写入文件*/ { int i=0; FILE *fp; /*定义文件指针*/ char filename[20]; /*定义文件名*/ printf("Write Records to a Text File
"); /*输入文件名*/ printf("Input the filename:"); scanf("%s",filename); if((fp=fopen(filename,"w"))==NULL) /*打开文件*/ { printf("cann't open the file
"); system("pause"); return; } fprintf(fp,"%d
",n); /*循环写入数据*/ while(i<n) { fprintf(fp,"%-16s%-15s%d
",stud[i].num,stud[i].name,stud[i].score); i++; } fclose(fp); /*关闭文件*/ printf("Successed!
"); /*返回成功信息*/ } void main() /*主函数*/ { int n=0; for(;;) { switch(menu_select()) /*选择判断*/ { case 1: printf("Input Records
"); /*输入若干条记录*/ n=Input(stu,n); break; case 2: printf("Display All Records
"); /*显示所有记录*/ Display(stu,n); break; case 3: printf("Sort
"); Sort_by_num(stu,n); /*按学号排序*/ printf("Sort Suceessed!
"); printf(""); system("pause"); break; case 4: printf("Insert a Record
"); n=Insert_a_record(stu,n); /*插入一条记录*/ printf(""); system("pause"); break; case 5: printf("Delete a Record
"); n=Delete_a_record(stu,n); /*按姓名查找,删除一条记录*/ printf(""); system("pause"); break; case 6: printf("Query
"); Query_a_record(stu,n); /*查找并显示一个记录*/ printf(""); system("pause"); break; case 7: printf("Statistic
"); Statistic(stu,n); /*新增功能,输出统计信息*/ printf(""); system("pause"); break; case 8: printf("Add Records from a Text File
"); n=AddfromText(stu,n); /*新增功能,输出统计信息*/ break; case 9: printf("Write to a Text file
"); WritetoText(stu,n); /*循环写入数据*/ printf(""); system("pause"); break; case 0: printf("Have a Good Luck,Bye-bye!
"); /*结束程序*/ printf(""); system("pause"); exit(0); } } } 四、函数调用关系图 注:“→”代表调用 Input函数 打印链表记录 Display函数 输入若干条记录 menu_select()函数 选择菜单 Sort_by_num函数 显示所有记录 Delete_a_record函数 按姓名查找,删除一条记录 Query_a_record查找并显示一条记录 Statistic函数 输出统计信息 (新增) AddfromText函数 从正文中添加数据到结构体数组中 Main函数 Insert_a_record插入一条记录 WritetoText函数 将所有数据写入文件中 退出程序 Reverse(head)函数 按学号排序 五、设计测试流程 1、进入界面 2、输入选项1,回车; 按提示输入数据: 3、回到主菜单; 输入选项7,回车; 输入文件名:data.txt,回车; 出现成功提示,则读入文件操作成功。 4、回到主菜单,输入2,回车 每10个暂停显示数据 5、回到主菜单,输入3,回车 出现排序成功信息。 6、回到主菜单,输入4,回车 按提示插入一组数据 7、回到主菜单,输入5,回车 按提示输入姓名,删除数据 出现删除成功的信息 8、回到主菜单,输入6,回车 输入姓名进行查询 9、回到主菜单,输入7,回车 出现统计信息 10、回到主菜单,输入9,回车 输入result.txt,回车 出现成功写入文件的信息 11、回到主菜单,输入0,回车退出系统

新鲜出炉!!
刚刚课上实验提前做完写的
有点仓促
界面的星星自己再改善一下吧 更好看一点
我用win-tc编的
win-tc是Turbo C 2.0 的内核
所以应该没什么问题

呼呼~累死姐姐了
孩子啊 给的分太少咯
哎 ……
姐姐我太善良了

/*学生成绩表*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct node /*定义结构体链表节点*/
{
long student_number;
char name[20];
long phone_number;
char address[150];
struct node *next;
};

int main()
{
struct node *head=NULL;
struct node *pr=NULL;
struct node *p;
char num;
char respond;

/*整体循环结构 实现每步结束返回主界面*/
do{
fflush(stdin);
clrscr();
printf("\n**********************Student Table**********************\n");
printf("1.Add new student\n");
printf("2.Print the student table\n");
printf("3.Exit\n");
printf("*********************************************************\n");
printf("\n\n\n Please input the number related to yourwanted item:");
scanf("%c",&num);

/*添加学生信息*/
if(num=='1')
{
clrscr();
printf("\n*******************Add New Student******************\n");
p=head;

while(p->next!=NULL)
{
p=p->next;
}

do{
pr=(struct node*)malloc(sizeof(struct node)); /*为新的节点申请内存*/
if(pr==NULL)
{
printf("Not enough memory!");
break;
}
if(head==NULL)
{
head=pr;
}

printf("Please input the student number:"); /*输入学生信息*/
scanf("%ld",&(pr->student_number));
fflush(stdin);
printf("Please input the student's name:");
gets(pr->name);
printf("Please input the student's phone number:");
scanf("%ld",&(pr->phone_number));
fflush(stdin);
printf("Please input the student's address:");
gets(pr->address);

p->next=pr;
pr->next=NULL;
p=pr;

printf("Do you want to add another one(Y/N)?");
scanf(" %c",&respond);
fflush(stdin);
}while(respond=='Y'||respond=='y');

printf("\n\n\n Please press any key to continue...");
getch();
}

/*打印学生表信息*/
else if(num=='2')
{
clrscr();
printf("\n******************Print Student Table******************\n");
printf("Student Number | Student Name | Phone Number | Address ");
printf("\n");
p=head;
do{
printf("%-17ld%-15s%-15ld%s",p->student_number,p->name,p->phone_number,p->address);
printf("\n");
p=p->next;
}while(p!=NULL);
printf("\n\n\n Please press any key to continue...");
getch();
}

/*选择其他提示出错*/
else if(num!='1'&&num!='2'&&num!='3')
{
clrscr();
printf("\n\n\n***********************************************************\n");
printf("ERROR!The number can only be chosen from 1,2and 3\n");
printf("***********************************************************\n");
getch();
}

}while(num!='3'); /*选择3时退出循环*/

printf("\n\n\n\n Please press any key to exit...");
getch();
return 0;
}

用结构数组最好了。
#include<stdio.h>
struct
student
{
long
num;
char
name[20];
char
tel[20];
char
add[40];
};
void
main()
{
struct
student
stu[50];
int
i;
for(i=0;i<=49;i++)
{
scanf("%ld",&stu[i].num);
……
……
……
}
}
差不多就是这么个模式

用结构数组最好了。
#include<stdio.h>
struct student
{
long num;
char name[20];
char tel[20];
char add[40];
};
void main()
{
struct student stu[50];
int i;
for(i=0;i<=49;i++)
{
scanf("%ld",&stu[i].num);
……
……
……
}
}
差不多就是这么个模式

struct Student
{
int num;
char name[20];
char phone[20];
char addr[20];
};


如何用c语言编写一个能够正确运行的程序?
--- 最后,对于C语言指针这个对初学者很难懂的内容,建议翻阅 “征服C指针”一书。大概看懂3,4章,你对C语言就算真正入门了。By the way,初学者在代码里,如果有重复对一个数组赋值使用的情况,建议不管三七二十一使用 memset() 过度使用也没有关系(对初学者而言),好的习惯可以让学习之路更顺...

用C语言编写一段题目为“输出100以内所有能被3整除但不能被5整除的数...
用for循环,计数变量n从3开始步长3增量以保证n是3的倍数,再把能被5整除的n剔除。用一个t变量作输出个数计数来完成输出5个数换行。代码如下:include "stdio.h"int main(int argc,char *argv[]){int n,t;for(t=0,n=3;n<100;n+=3)\/\/3开始3增量保证n能被3整除if(n%5)\/\/不能被5...

请教,如何用C语言编写一个函数。
statement 是函数的内容。它可以是一句指令,也可以是一组指令组成的语句块。如果是一组指令,则语句块必须用花括号{}括起来,这也是我们最常见到情况。其实为了使程序的格式更加统一清晰,建议在仅有一条指令的时候也使用花括号,这是一个良好的编程习惯。示例:每一个C语言程序有且只有一个main函数,...

用C语言怎么编写一个从1加到10的程序...新手求解
include <stdio.h> void main(){ int n;int sum=0; \/\/初始sum变量值为0;for(n=1;n<=10;n++){ sum=sum+n; \/\/从一加到10;} printf("1+2+...+10=%d",sum);}

用C语言编写一个程序:
void main(){ int result = 0; for(int i = 1;i <= 100; ++i)\/\/求和, result += i; std::cout<<result<<std::endl;\/\/打印和 char a[10] = {};itoa(result,a,10);\/\/转字符串 std::cout<<a<<std::endl;\/\/打印字符串 FILE* pf = NULL; fopen_s(&pf,"result.tx...

用C语言如何编写一个石头剪子布的程序
switch(com-user) \/\/用电脑产生的数和用户输入的数的差值来判断胜负 { case 0:printf("平手\\n");break;case 1:case -2:printf("电脑赢了\\n");break;case -1:case 2:printf("你赢了\\n");} printf("继续游戏按Y键、其它键退出");getchar();c=getchar();}while(c=='y' || c==...

如何用C语言编写一个程序,输入你的姓名和年龄并输出?
include <stdio.h> int main(void){ char name[20];int age;printf("请输入你的姓名:");scanf("%s",name);printf("请输入你的年龄:");scanf("%d",&age);printf("你的姓名是:%s\\n",name);printf("你的年龄是:%d\\n",age);return 0;} ...

c语言用switch编写一个简单的四则运算程序
代码如下:include <stdio.h> int main(){ float fFloat1=.0,fFloat2=.0;char cOP=NULL;printf("请输入要进行四则运算表达式:\\n");scanf("%f%c%f",&fFloat1,&cOP,&fFloat2);switch(cOP){ case '+':printf("%f+%f=%f\\n",fFloat1,fFloat2,fFloat1+fFloat2);break;case '-':p...

C语言程序 用结构体编写一个程序,实现输入两个数,求出平均数
include<stdio.h>typedef struct stt{ float num;}STT;int main( ){ STT stt1,stt2; scanf("%f%f",&stt1.num,&stt2.num); printf("平均值:%f\\n",(stt1.num+stt2.num)\/2); return 0;}

用C语言如何编写一个石头剪子布的程序
用C语言编写一个石头剪子布的程序石头=1;剪子=2;布=3先是人输入一个数放在变量ren了然后是程序随机产生三个数(1,2,3)放在变量ji里if(ren==ji) printf("REPLAY!");esle if(ren==1&&ji==2) printf("YOU WIN");else if(ren==2&&ji==3) printf("YOU WIN");else if(ren==3&&ji==1) printf...

舟曲县19427673661: 用c语言怎样编写学生成绩表 -
宰父荀曲莱: #include #define N 2 //N定义为学生数 struct student { char number[20]; char name[20]; float f[4]; float total; }student[N]; void main() { int i, j; char temp[20]; printf("输入学生信息\n"); for( i = 0; i < N; i++) { student[i].total = 0; printf("输入学生姓...

舟曲县19427673661: 如何用C语言编写一个学生的成绩表? -
宰父荀曲莱: 新鲜出炉!!nbsp;刚刚课上实验提前做完写的nbsp;有点仓促nbsp;界面的星星自己再改善一下吧nbsp;更好看一点nbsp;我用win-tc编的nbsp;win-tc是Turbonbsp;Cnbsp;2.0nbsp;的内核nbsp;所以应该没什么问题nbsp;呼呼~累死姐姐...

舟曲县19427673661: 编程如何用C语言编写一个学生成绩管理系统程序 -
宰父荀曲莱: 我们才做了这个作业... #include <malloc.h> #include <stdio.h> #include <stdlib.h> #define LEN sizeof(struct scorenode) #define DEBUG #include <string.h> struct scorenode { int number;/*学号*/ char name[8];/*姓名*/ float cj1;/*成绩1*/ ...

舟曲县19427673661: 用C语言设计一个学生成绩记录薄
宰父荀曲莱: #include <stdio.h>#include <stdlib.h>#include <string.h> struct student{ char name[60]; char ID[7]; int score;}; int dq(struct student st[]);void xianshi();void bc(struct student st[]);void add(); void select();void zz();void chazhao();void xhcz();void xmcz();...

舟曲县19427673661: 关于用C语言写一个学生成绩表的任务,只求思路,不用代码.
宰父荀曲莱: 定义: 数组a[50][4] //每个学生的4门成绩 定义: 数组b[50] //每个学生的平均成绩 定义: 数组c[5] //每种成绩的人数 写个for()把成绩录进去 1、求平均成绩 for(i=0,i&lt;50,i++) { for(j=0,j&lt;4,j++) { b[i]=b[i]+a[i][j] } b[i]=b[i]/4 } 2、求5种成绩的人数 for(i=0,i&lt;50,i++) { if(b[i]&gt;=90) c[0]=c[0]+1; else if (b[i] &gt;=70 c[1]=c[1]+1; ……………… } 就是这样 很长时间没写过了,可能有些语法不对,你看着改吧

舟曲县19427673661: 编制一个C语言成绩记录簿 -
宰父荀曲莱: 设计要求: 成绩记录簿中记录以下数据:学号、姓名、课程编号、课程名称、成绩、学分,所有成绩都以百分制计分.在程序中可以输入新的成绩记录,可以按学号或姓名查询一个学生的所有成绩,和已完成的总学分.也可以按课程编号查出一个班的成绩表,班成绩表后面要统计平均分,和及格率. 2. 提高水平 在程序中增加将数据写入文本文件和从文件中读入数据的功能,文件名由用户输入. 3. 提示 在没有使用文件时,数据可以保存在一个大的数组中,要注意的数据项的类型. 知识范围;C程序设计第三版谭浩强

舟曲县19427673661: 用C来编程实现一个统计成绩表的程序. -
宰父荀曲莱: #include #define maxsize 10typedef struct{ int num; int score;}student;typedef struct{ student data[maxsize]; int last;}SeqLi...

舟曲县19427673661: 编制一个C语言成绩记录簿,要求每个学生信息包括:学号、姓名、C语言成绩.具体功能: (1)创建信息 -
宰父荀曲莱: #include #include #include #include #include using namespace std; struct xueshengguanli { string name; string xibie; string banbie; string sex; int num; float zongheCJ; xueshengguanli *next; }; typedef xueshengguanli* xueshengGL; xueshengGL ...

舟曲县19427673661: 用C语言做一个简单的学生成绩,还要添加一些功能. -
宰父荀曲莱: //姓名,学号,英语,语文,数学三种成绩 #include #include #define maxnumber 30 int student_number; int count1=0,count2=0,Operate1=3; FILE *stream; typedef struct stu{ int idnumber; char name[20]; double English_score; double chinese_...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网