绩点的编程
⑴ 求C++题或代码
9、大数的乘法
Time Limit:1000MS Memory Limit:32768KDescription:给出一些整数对,一个为可能接近100位的大数,另一个为1位数,求这些数对的乘积。 Sample Input:1 1123 012345678910 7Sample Output: 十、按长度排序
Time Limit:1000MS Memory Limit:32768KDescription:是一些整数,它的结构是:第一行为一个整数N,表示后面有N个整数需要排序输出,先按长度排,如长度一样则按大小排,若遇到N等于零,则运行结束。 Sample Input: Output:121233333 11000000000000000 十一、排列学生成绩
Time Limit:1000MS Memory Limit:32768KDescription:一些向量数据,表示许多学生的各门成绩。编程,从中挑出平均分数在60分以上的学生进行排序输出。 Sample Input:Zhangsan 90 85 77 25 63Lisi 58 73 66 85 90Wangwu 70 80 90 51 52Qianliu 80 63 58 52 50Chenqi 90 28 38 48 58Zhouba 40 70 70 33 55Sample Output:1 Lisi2 Wangwu3 Zhangsan 12、十二、倒置排序
Time Limit:1000MS Memory Limit:32768KDescription:将一些整数按倒置值排序后输出. 所谓倒置,是指把整数各位倒过来构成一个新数,例如:13倒置成了31. Input:第一行的整数N表示后面列出的组数。每组数的第一个整数n表示后面将有n个整数。(每组数据量不超80) Output:将每组数按倒置值进行排序输出.其每组数的结果占一行.行末无空格. Sample Input:24 83 13 24 364 99 100 123 12345Sample Output:13 83 24 36100 99 123 12345 十三、绩点计算
Time Limit:1000MS Memory Limit:32768KDescription:有一些班级学生的三门课程成绩,编程计算其绩点,并按绩点分数的高低排列。绩点计算公式为:(成绩小于60分,则该门课程的绩点为0) [(课程1 – 50)÷10×3 +(课程2 – 50)÷10×3 +(课程3 – 50)÷10×4]÷10 Sample Input:张三 89 62 71李四 98 50 80王五 67 88 91Sample Output:王五 67 88 91李四 98 50 80张三 89 62 71 十四、按日期排序
Time Limit:1000MS Memory Limit:32768KDescription:有一些日期,日期格式为“MM/DD/YYYY”。编程将其按日期大小排列。 Sample Input:12/31/200510/21/200302/12/200415/12/199910/22/200311/30/2005Sample Output:15/12/199910/21/200310/22/200302/12/200411/30/200512/31/2005 十五、按1的个数排序
Time Limit:1000MS Memory Limit:32768KDescription:有一些01字串,将其按1的个数的多少的顺序进行输出。 Sample Input: Output:01110000001101101010110011111 十六、注释
Time Limit:1000MS Memory Limit:32768KDescription:给出一个C++源程序代码。请将其中的注释去掉。 Sample Input://====================== // simplest program //======================#include<iostream>using namespace std;//----------------------int main(){cout<<”hello world!\n”;}//--------------------- Sample Output:#include<iostream>using namespace std;int main(){cout<<”hello world!\n”;} 十七、最短距离的点
Time Limit:1000MS Memory Limit:32768KDescription:给出一些整数对,它们表示一些平面上的坐标点,给定一个点,求所有那些点到该点最短距离的点。结构为:第一个整数对为所给定的点,后面的整数对为所有其他的点。 Sample Input:9 21 01 10 01 22 1Sample Output:2 1 十八、最短距离的两点
Time Limit:1000MS Memory Limit:32768KDescription:给出一些整数对,它们表示平面上的点,求所有这些点中距离最近的两个点。结构为:每组数据的第一行只有一个整数N,表示后面有N个点。求这些点中的两点,以表明该两点是所有点中距离最短的。若N为0,则表示输入结束。 Sample Input:41 20 03 67 231 33 10 00Sample Output:(1,2) (0,0)(1,3) (3,1) 十九、到直线的最长距离
Time Limit:1000MS Memory Limit:32768KDescription:给定一根直线,给出一些坐标点,求这些坐标点到直线的最大距离。第一行有两个整数对,表示直线的两点,后面有一些整数对,那是给出的坐标点。结果保留三位小数。 Sample Input:1 2 3 43 810 107 2900 1Sample Output:636.396 二十、计算矩形面积
Time Limit:1000MS Memory Limit:32768KDescription:两个坐标点能确定一个矩形,请按矩形的面积大小进行排序输出。每一行给出两个坐标点,表示一个矩形。请按要求输出面积。 Sample Input:1 2 3 41 0 2 32 1 3 12 8 7 1Sample Output:03435注:ACM比赛非常注重输出格式。若输出格式错误则全题不能得分。 以下几个题训练基本输出语句的使用。二十一、粘墙“三角形”
Time Limit:1000MS Memory Limit:32768KDescription:输入一些正整数(≤26),编程输出以这些正整数为边长的附着墙而立的字母三角形。 Sample Input:37Sample Output:a aa abaabc a aa aba abca abcda abcdea abcdefaabcdefg 二十二、山形图
Time Limit:1000MS Memory Limit:32768KDescription:输入中含有若干组数据,每组数都包含一个字符c和一个正整数n(n≤50),表示边长为n图案为c的山形字符图。一个紧挨一个地打印所有这些山形字符图。 Sample Input:A 3M 9Sample Output: A AAAAAAAA M MMM MMMMM MMMMMMM MMMMMMMMM MMMMMMMMMMM MMMMMMMMMMMMM 二十三、织花纹布
Time Limit:1000MS Memory Limit:32768KDescription:输入中含有若干组数据,每组数据由四部分组成,第一个是花纹字符,后面三个是整数,分别表示宽度(<80的奇数),高度(≤40)和重复度(≤20)。请编程画出该花纹。 Sample Input:W 9 17 1E 15 6 2Sample Output:WWWWWWWWW W W W W W WWWWWWWWW W W W W W WWWWWWWWW W W W W W WWWWWWWWW W W W W W WWWWWWWWW W W W W W WWWWWWWWW W W W W W WWWWWWWWW W W W W W WWWWWWWWW W W W W WWWWWWWWWW EEEEEEEEEEEEEEE E E E E E E E E EEEEEEEEEEEEEEE E E E E E E E E EEEEEEEEEEEEEEEE E E E E E E E EEEEEEEEEEEEEEE E E E E E E E E EEEEEEEEEEEEEEE E E E E E E E EEEEEEEEEEEEEEEE 二十四、倚直线画圈
Time Limit:1000MS Memory Limit:32768KDescription:鲁迅先生笔下的阿Q连圈都画不好,现在我们借助编程手段,可以对准直线自动地按要求画圈,不亦乐乎?文本字符的圈虽然看上去有些粗糙,不过没有关系,只要是上下左右对称,粗细均匀,而且封闭就行。 Input:圈的内部总是一个正方形,外部包围着一定粗细的线条,角部不用画出来。给定的数据,每行为一组,包括用的字符笔,笔的粗细和圈内正方形的高度。如果输入数据中笔粗和高度都为0,则结束处理。 Output:每个圈应倚着边上一直线,直线字符为B,每个圈之间有一个空行,第一个圈前面无空行。 Sample Input:A 1 3F 3 5A 0 0 Sample Output:B AAABA ABA ABA AB AAA B FFFFFB FFFFFB FFFFFBFFF FFFBFFF FFFBFFF FFFBFFF FFFBFFF FFFB FFFFFB FFFFFB FFFFF 二十五、支票保护
Time Limit:1000MS Memory Limit:32768KDescription:计算机经常用于工资和帐号支付应用等支票写入系统。许多怪事常常出现。如每月工资支票上错误的多写一百万美元。由于人和机器的错误,使支票写入系统写出不正常数值。系统设计人员在系统中建立控制,防止发生出这种错误支票。另一个严重的问题是有些人故意改变支票金额,想窃取钱财。要防止改变支票金额,大多数支票写入系统采用支票保护(Check Protection)技术。一个常用的安全方法是写出支票金额的大写,即使支票的数字好改,大写金额也难篡改。编写一个程序,输入数字金额,输出大写金额。如112.43写成ONE HUNDRED TWELVE Dollars and 43/100。 Input:输入数据有若干,数据范围在0.00到999.99。 Output:对于每个数据输出其大写的英语表示。如12.45写成TWELVE Dollars and 45/100。如果是整数部分是零或一美元,则Dollar不加s。如果没有角分,则角分不用输出。 Sample Input:0.453456.89Sample Output:ZERO Dollar and 45/100THIRTY FOUR DollarsFIFTY SIX Dollars and 89/100 二十六、单词统计
Time Limit:1000MS Memory Limit:32768KDescription:你需要设计一个程序,将一篇文章中的所有单词分组并统计。
一篇文章是一连串的单词,每个单词占一行。当且仅当w中的字符通过某种重排列与v相同时,单词w和单词v属于同一个组。找出个数最多的5个组。
Input
输入包含许多由小写字母构成的单词,每行一个。
以EOF终止。
Output
输出个数最多的5组单词。如果少于5组,则把它们全部输出。
组与组之间,按单词数递减排序,若单词数相等,比较组内字典序最小的单词,字典序小的在先。
对每组,先输出组内单词数,再按字典序递增依次输出各单词,相同单词只输出一次。 Sample Input: Output:Group of size 8: caret carte cater crate trace .Group of size 4: abet bate beat beta .Group of size 4: ate eat eta tea .Group of size 1: displayed .Group of size 1: singleton . 二十七、统计天数
Time Limit:1000MS Memory Limit:32768KDescription:根据一些日期,以及日期上所做的标记,按条件统计其天数。 Input:输入数据含有不多于50个的具有格式“Mon. DD YYYY”的日期,有些日期后面可能标有*,每个日期占一行。 Output:统计任何月份中凡是25号的日期数,如果25号这一天后面标有*,则该天应加倍计算。 Sample Input:Oct. 25 2003Oct. 26 2003Sep. 12 2003*Juy. 25 2002*Sample Output:3Source:qianneng 二十八、艰辛的突围
Time Limit:1000MS Memory Limit:32768KDescription:在一场战役中,一队我方的士兵落入了敌人的包围圈,他们决定冒死突围出去,在突围的任意时刻,总会有一个士兵冲在最前面,引导着队伍前进。在突围的过程中,他们肯定要不断受到敌方的攻击,尤其冲在最前面的士兵受到的伤害最大。我们以一分钟为单位,最开始每个士兵都有相同的能量值E,突围路线的总长度D。士兵每分钟受到的伤害跟队伍的突围速度有关。假定队伍在某一分钟内突围的速度为v,那么冲在最前面的士兵在这一分钟里受到的总伤害为v2,而其他士兵受到的总伤害均为v。而且我们可以在每分钟开始的时候瞬时替换掉冲在最前面的士兵,让另一个士兵冲上去,其它的中间时刻是不允许调换的。 对于特定的某一分钟里,队伍的突围速度是稳定的,由此时冲在最前面的士兵决定,他可以任意选择一个速度v前进,但是要保证自己在这一分钟开始的时候剩余的能量e>=v2。现要你安排一种最优的调度方案,使得队伍突围出去的时间最少,当然在这个过程中可能会有些士兵会死掉,也许全部死掉。 Input:包含多组测试数据。每组测试数据包含三个整数N、E、D。分别表示士兵的个数、每个士兵初始的能量值和突围路线的总长度。 1<=N<=20,1<=E<=100,1<=D<=100。 Output:针对每组测试数据,输出最短需要多少时间才能突围出去,如果所需的最小时间是个浮点数,则向上取整。万一突围不出去,就直接输出0. Sample Input:2 17 7Sample Output:2 二十九、大整数加法
Time Limit:1000MS Memory Limit:32768KDescription:给定一些大数,请计算其和。 Input:输入数据中含有一些数据组(数量≤100),每组数据由一个整数n(n≤100)领衔,后跟n个大整数(0≤大数,大数位数≤200),若n=0则表示输入结束。 Output:输出每组数据所计算的大数和,每个结果单独占一行。 Sample Input: Output:5652057111507 三十、大整数乘法
Time Limit:5000MS Memory Limit:32768KDescription:给定一些大数,请计算其积。 Input:输入数据中含有一些整数对(对数≤1000),若某对整数(整数位数≤200)的值为0 0,则表示输入结束。 Output:每对整数对应一个乘法计算结果,输出该结果,每个结果输出完后应回车。 Sample Input:2 312 340 0Sample Output:6408 三十一、(1998年北美区ACM选拔赛试题)DNA SortingTime Limit:1000MS Memory Limit:32768KProblem: DNA排序 在一个序列中,“没排序”的一个尺度是无序对的总数。例如,在字母序列“DAABEC”中,“没排序”的尺度是5,因为D比它右边的4个字母大,而E比它右边的1个字母大。这个尺度被称为序列的倒位数量。序列“AACEDGG”只有一个倒位(E和D)――即它几乎是有序的――然而,序列“ZWQM”则有6个倒位(其序正好完全相反)。 你负责编排DNA字符串的序列(系列中只包含A,C,G和T四个字符)。然而,不是根据字母表顺序来编排,而是根据“没排序”程度即倒位数量来编排,从“排序最好”到“排序最不好”的顺序来编排。所有的字符串长度相同。问题包含多个测试案例! 多个测试案例前是一个正整数N,然后是一行空行,接下去是N个输入块。每个输入块的格式在问题中描述了。输入块之间用空行隔开。 2、输入描述 每个输入块的第一行包含两个整数:正整数n (0 < n <= 50),表示字符串的长度;另一个正整数m (1 < m <= 100),表示字符串的数目。下面就是m行,每行是一个长为n的字符串。 3、输出描述 输出输入数据中的字符串,按从“排序最好”到“排序最不好”的顺序排列。如果两个字符串的倒位数量相同,那么按它们在输入文件中的先后顺序输出。 4、输入样例 1 10 5、输出样例
⑵ 学计算机专业的(偏向编程),绩点不高,打算毕业工作。应该考一点什么证好吗
如果想机会更多一点,考个程序员或者软件工程师,这些是国家认证的。
⑶ 高分求VB编程关于学分计算
我来做吧
hi me
Private Sub Command1_Click()
'高分求VB精英编程关于学分计算 输入成绩能够得出所对应的绩点
Dim x As Integer, y As Single
x = InputBox("Please input your score:")
If x < 60 Or x > 99 Then Exit Sub
Select Case x
Case 60 To 62: y = 1
Case 63 To 64: y = 1.2
Case 65 To 67: y = 1.5
Case 68 To 69: y = 1.8
Case 70 To 72: y = 2
Case 73 To 74: y = 2.2
Case 75 To 77: y = 2.5
Case 78 To 79: y = 2.8
Case 80 To 82: y = 3
Case 83 To 84: y = 3.2
Case 85 To 87: y = 3.5
Case 88 To 89: y = 3.8
Case 90 To 92: y = 4
Case 93 To 94: y = 4.2
Case 95 To 97: y = 4.5
Case 98 To 99: y = 5
End Select
MsgBox "绩点=" & y
End Sub
搞定了
⑷ matlab编程,学生学分,学分绩点计算程序编制
出国留学,很多院校的申请的条件之一是个人的学分绩点,有些院校有最低学分绩点要求。没有达到最低要求的申请者就不考虑了。计算:绩点的计算,是将学生修过的每一门课程(包括重修的课程)的课程绩点乘以该门课程的学分,累加后再除以总学分。平均学分绩点可以作为学生学习能力与质量的综合评价指标之一。能方便地与美国的GPA制挂钩。想出国留学的中国本科生应该引以为重。国内大部分高校通用的计算方法是:绩点=分数/10-5,学分绩点=学分×绩点=学分×(分数/10-5)
⑸ c编程 试编程统计某班n个同学在m门必修课上的学分绩点,并按从高到低排序。
哈哈刚刚差点上的地方方法
⑹ 怎样用Excel算 平均学分绩点=∑(每一科成绩绩点*课程学分)/总学分。
只要输入函数=sumproct(d2:20,e2:e20)/sum(e2:e20)即可。
⑺ VB编程中平均绩点问题。
你发过图后,自己就不看看吗,这能看清楚吗?
以后发代码,不要发图片,拒绝一拍完事的做法。
⑻ CS专业大学生怎样平衡绩点和编程能力
只能说但愿个人都能找到适合自己的学习方法吧。
编程和学习也并不矛盾,尤其是专业课。比如计算机组成原理,实现一个流水线的mips指令集的cpu,编译原理,写编译器,网络课可以尝试NAT打洞嘛,操作系统课抄一个 unix V6 那样的系统出来~ 图形学可以做软件渲染器。边学边尝试,在学校基本都需要几个月才能完成。
⑼ 在c语言编程中,给出一个百分制成绩,要求输出成绩等级
#include <stdio.h>
int main()
{
int score, m;
scanf("%d", &score);
while (score < 0 || score > 100){
printf("Error! Retry! ");
scanf("%d", &score);
}
m= score / 10;
if (m>= 9)
printf("Grade is A! ");
switch(m){
case 0: printf("Grade is E! "); break;
case 1: printf("Grade is E! "); break;
case 2:printf("Grade is E! "); break;
case 3:printf("Grade is E! "); break;
case 4:printf("Grade is E! "); break;
case 5: printf("Grade is E! "); break;
case 6: printf("Grade is D! "); break;
case 7: printf("Grade is C! "); break;
case 8: printf("Grade is B! "); break;
}
return 0;
}
(9)绩点的编程扩展阅读:
其他实现输出成绩等级‘A'、’B‘、'C'、‘D'、'E’。90分以上为A,80~89分为B,70~79分为C,60~69分为D,60分一下为E的方法:
#include <stdio.h>
int main()
{
int score;
scanf("%d", &score);
while (score < 0 || score >100){
printf("Error! Retry! ");
scanf("%d", &score);
}
if (score < 60)
printf("Grade is E! ");
else if (score >= 60 && score < 70)
printf("Grade is D! ");
else if (score >= 70 && score < 80)
printf("Grade is C! ");
else if (score >=80 && score < 90)
printf("Grade is B! ");
else
printf("Grade is A! ");
return 0;
}
⑽ c语言编程 实现简单的学生成绩管理系统
出密码模块外其他的都可以!我也想添个密码的!
后来觉得没用,先做好功能模块再说!
密码模块设计不好的话,很容易被破解的!
#ifndef H_STUDENT_HH /*xxx如果没有定义xxx*/
#define H_STUDENT_HH /*xxx定义xx*/
#include "stdio.h"
#include "string.h"
#include "malloc.h"
#define LEN sizeof(struct message_student) /*一个结构体数组元素的长度*/
#define numsubs 5 /*学科数目*/
typedef struct message_student /*结构体定义*/
{
char number[6];
char name[20];
char sex[4];
float subject[numsubs];
float score;
float average;
int index;
}student;
extern int numstus; /*学生数目*/
extern student *pointer; /*指向结构体数组*/
extern int lens;
int menu_select(); /*函数声明*/
int openfile(student stu[]);
int findrecord(student stud[]);
int writetotext(student stud[]);
void welcome();
void display1();
void showtable();
void sort(student stu[]);
void deleterecord(student stu[],int i);
void addrecord(student stud[]);
void display(student stud[],int n1,int n2);
void amendrecord(student stud[]);
void count(student stud[]);
void sortnum(student stud[]);
void sortnum2(student stud[]);
void sortname(student stud[]);
void sortname2(student stud[]);
void sortcount(student stud[]);
void sortcount2(student stud[]);
void statistic(student stud[]);
void display1();
#endif
#include "stdio.h"
int menu_select()
{
char c;
printf("\n\n");
printf(" | 1. 增加学生记录 5.统计信息 |\n");
printf(" | 2. 查询学生记录 6.打开文件 |\n");
printf(" | 3. 修改学生记录 7.保存文件 |\n");
printf(" | 4. 学生纪录排序 8.显示记录 |\n");
printf(" | 0.退出系统 |\n");
printf("\n\n");
printf("请选择(0-8):");
c=getchar();
getchar();
return (c-'0');
}
#include "stdio.h"
int findrecord(student stud[]) /*查找信息*/
{
char str[2];
int i,num;
if(numstus==0)
{
printf("没有可被查找的记录\n");
return -1;
}
else
{
printf("以何种方式查找?\n1.学号\t2.姓名\t3.名次\n");
gets(str);
if(str[0]=='1') /*按学号查找*/
{
printf("请输入学号:");
gets(str);
for(i=0;i<=numstus;i++)
if(strcmp(str,stud[i].number)==0)
{
display(stud,i,i);
break;
}
else continue;
}
else if(str[0]=='2') /*按姓名查找*/
{
printf("请输入姓名:");
gets(str);
for(i=0;i<=numstus;i++)
if(strcmp(str,stud[i].name)==0)
{
display(stud,i,i);
break;
}
else continue;
}
else if(str[0]=='3') /*按名次查找*/
{
printf("请输入名次:");
scanf("%d",&num);
getchar();
for(i=0;i<=numstus;i++)
if(num==stud[i].index)
{
display(stud,i,i);
break;
}
else continue;
}
if(i>numstus)
{
printf("没有查找所要的信息。\n");
return -1;
}
return i;
}
}
#include"stdio.h"
int openfile(student stu[])
{
int i=0,j;
FILE *fp;
char filename[20],str[2];
if(numstus!=0)
{
printf("已经有记录存在,是否保存?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
writetotext(stu);
}
printf("请输入文件名:");
gets(filename);
numstus=0;
if((fp=fopen(filename,"rb+"))==NULL)
{
printf("无法打开该文件\n");
return(-1);
}
fscanf(fp,"%d",&numstus);
fgetc(fp);
while(i<numstus)
{
fscanf(fp,"%s",stu[i].number);
fscanf(fp,"%s",stu[i].name);
fscanf(fp,"%s",stu[i].sex);
for(j=0;j<numsubs;j++)
fscanf(fp,"%f",&stu[i].subject[j]);
fscanf(fp,"%f",&stu[i].score);
fscanf(fp,"%f",&stu[i].average);
fscanf(fp,"%d",&stu[i].index);
i++;
}
fclose(fp);
printf("文件读取成功\n");
printf("是否显示纪录?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
display(stu,0,numstus-1);
return(0);
}
#include "stdio.h"
void sort(student stud[])
{
int i,j=0;
char str[5];
student *p;
p=stud;
if(numstus==0)
{
printf("没有可供查询的记录!");
}
while(1)
{
for(i=0;;i++)
{
printf(" 请输入查询方式:");
printf("(直接输入回车则结束查询操作)\n");
printf("1.按照学号\t");
printf("2.按照姓名\t");
printf("3.按照名次\n");
gets(str);
if(strlen(str)==0) break;
if(str[0]=='1')
{
printf("请输入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortnum2(p);
else
sortnum(p);
display(stud,0,numstus-1);
}
else if(str[0]=='2')
{
printf("请输入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortname2(p);
else
sortname(p);
display(stud,0,numstus-1);
}
else if(str[0]=='3')
{
printf("请输入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortcount2(p);
else
sortcount(p);
display(stud,0,numstus-1);
}
else printf("请输入1~3");
printf("是否退出排序?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y') break;
}
return;
}
}
void sortnum(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j+1].number,stud[j].number)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortnum2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j].number,stud[j+1].number)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortname(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j+1].name,stud[j].name)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortname2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j].name,stud[j+1].name)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortcount(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(stud[j+1].index>stud[j].index)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortcount2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(stud[j].index>stud[j+1].index)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
#include"stdio.h"
void statistic(student stud[]) /*新增功能,输出统计信息*/
{
int i,j=0,k=0;
char c1,str[2];
float average[numsubs],sum=0;
if(numstus==0)
printf("没有可被查找的记录\n");
else
{
while(1)
{
printf("下面将统计考试成绩\n");
printf("请选择你要统计哪科的成绩 1.A\t2.B\t3.C\t4.D\t5.E\n");
c1=getchar();
printf("\t一共有个%d记录\n",numstus); /*总共记录数*/
switch(c1)
{
case '1':
for(i=0;i<numstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject[0];
if(stud[k].subject[0]>stud[i].subject[0]) k=i;
if(stud[j].subject[0]<stud[i].subject[0]) j=i;
}
average[0]=sum/numstus;
printf("\t科目A的最高分:\n"); /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[0]);
printf("\t科目A的最低分是:\n"); /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[0]);
printf("\t科目A的平均分是 %5.2f\n",average[0]); /*平均分*/
break;
case '2':
for(i=0;i<numstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject[1];
if(stud[k].subject[1]>stud[i].subject[1]) k=i;
if(stud[j].subject[1]<stud[i].subject[1]) j=i;
}
average[1]=sum/numstus;
printf("\t科目B的最高分:\n"); /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[1]);
printf("\t科目B的最低分是:\n"); /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[1]);
printf("\t科目B的平均分是 %5.2f\n",average[1]); /*平均分*/
break;
case '3':
for(i=0;i<numstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject[2];
if(stud[k].subject[2]>stud[i].subject[2]) k=i;
if(stud[j].subject[2]<stud[i].subject[2]) j=i;
}
average[2]=sum/numstus;
printf("\t科目C的最高分:\n"); /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[2]);
printf("\t科目C的最低分是:\n"); /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[2]);
printf("\t科目C的平均分是 %5.2f\n",average[2]); /*平均分*/
break;
case '4':
for(i=0;i<numstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject[3];
if(stud[k].subject[3]>stud[i].subject[3]) k=i;
if(stud[j].subject[3]<stud[i].subject[3]) j=i;
}
average[3]=sum/numstus;
printf("\t科目D的最高分:\n"); /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[3]);
printf("\t科目D的最低分是:\n"); /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[3]);
printf("\t科目D的平均分是 %5.2f\n",average[3]); /*平均分*/
break;
case '5':
for(i=0;i<numstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject[4];
if(stud[k].subject[4]>stud[i].subject[4]) k=i;
if(stud[j].subject[4]<stud[i].subject[4]) j=i;
}
average[4]=sum/numstus;
printf("\t科目E的最高分:\n"); /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[4]);
printf("\t科目E的最低分是:\n"); /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[4]);
printf("\t科目E的平均分是 %5.2f\n",average[4]); /*平均分*/
break;
default:printf("输入错误!请输入1~5之间的数\n");
}
sum=0;
getchar();
printf("是否继续进行统计?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y') ;
else break;
}
}
}
#include"stdio.h"
int writetotext(student stud[]) /*将所有记录写入文件*/
{
int i=0,j;
FILE *fp;
char filename[20];
printf("输入文件名称:");
gets(filename);
fp=fopen(filename,"w");
fprintf(fp,"%d\n",numstus);
while(i<numstus)
{
fprintf(fp,"%s %s %s ",stud[i].number,stud[i].name,stud[i].sex);
for(j=0;j<numsubs;j++)
fprintf(fp,"%f ",stud[i].subject[j]);
fprintf(fp,"%f %f %d ",stud[i].score,stud[i].average,stud[i].index);
i++;
}
fclose(fp);
printf("已成功存储!\n");
display(stud,0,numstus-1);
numstus=0;
return 0;
}
#include"stdio.h"
void welcome()
{
printf("\t*************************************************************\n");
printf("\t\t\t\t欢迎进入学生成绩管理系统\t\t\t\t\t\t\t\t 晓 欢迎使用!\n");
printf("\t*************************************************************\n");
printf("\t\t\t\t\t\t本系统由“晓”一组亲情制作\n\n");
printf("\t\t\t\t\t\t制作人员列表: \n");
printf("\t\t\t\t\t\t吴彦兵 黄进 汪红波\n\t\t\t\t\t\t刘玉萧 杨超 章耀\n");
printf("输入回车进入菜单栏:\n");
printf("\n\n");
getchar();
}
void showtable()
{
printf("-------------------------------------------------------------------------------\n");
printf("学号\t姓名\t性别\tA\tB\tC\tD\tE 总分 平均分 名次\n");
printf("-------------------------------------------------------------------------------\n");
}
void display(student stud[],int n1,int n2)
{
int i;
showtable(); /*显示表头*/
for(i=n1;i<=n2;i++)
printf("%s\t%s\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f %.1f %.1f %d\t\n",stud[i].number,stud[i].name,stud[i].sex,stud[i].subject[0],stud[i].subject[1],stud[i].subject[2],stud[i].subject[3],stud[i].subject[4],stud[i].score,stud[i].average,stud[i].index);
/*通过循环输出数据*/
}
void display1()
{
printf("\t\t本系统由晓一组亲情制作\n\n");
printf("\t\t制作人员列表: \n");
printf("\t\t\t\t\t\t吴彦兵 黄进 汪红波\n\t\t\t\t\t\t刘玉萧 杨超 章耀\n");
printf("\t\t\t=========欢迎下次使用=========");
printf("\n\n");
getchar();
}
#include"stdio.h"
#include<string.h>
void amendrecord(student stud[])
{
char str[5]; /*供用户输入*/
int i=-1,j;
if(numstus==0) /*没有记录返回*/
printf("没有可供修改的记录!");
while(i<0)
{
i=findrecord(stud);
if(i>=0)
{
printf("要删除这个学生的信息吗?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
{
deleterecord(stud,i);
count(stud);
}
else
{
printf("确定要修改这个学生的信息吗?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
{
printf("下面请重新输入学生的信息:\n");
printf("请输入学号:");
gets(stud[i].number);
printf("请输入姓名:");
gets(stud[i].name);
printf("请输入性别(男/女 1/0):");
gets(str);
if(str[0]=='0')
strcpy(stud[i].sex,"女");
else
strcpy(stud[i].sex,"男");
stud[i].score=0;
printf("请按顺序输入成绩:");
for(j=0;j<numsubs;j++)
{
scanf("%f",&stud[i].subject[j]);
stud[i].score+=stud[i].subject[j];
}
getchar();
stud[i].average=stud[i].score/numsubs;
}
count(stud);
}
display(stud,0,numstus-1);
}
printf("是否继续进行其他修改?(y/n)\n");
gets(str);
if(str[0]=='y'||str[0]=='Y')
i=-1;
else i=1;
}
}
void deleterecord(student stu[],int i) /*删除信息*/
{
int j;
while(i>=0)
{
for(j=i;j<numstus;j++)
stu[j]=stu[j+1];
numstus--;
printf("删除成功!\n");
}
}
void count(student stud[])
{
int i,j;
for(i=0;i<numstus;i++)
{
stud[i].index=1;
for(j=0;j<numstus;j++)
if(stud[j].score>stud[i].score)
stud[i].index++;
}
}
#include "stdio.h"
void addrecord(student stud[])
{
int i=0,j,num;
char str[5];
if(numstus!=0)
{
printf("已有记录存在是否覆盖?(y/n)\n");
gets(str);
if(str[0]=='Y'||str[0]=='y')
i=0;
else i=numstus;
}
printf("请输入增加的学生信息条目数:");
scanf("%d",&num);
if(i==0)
numstus=num;
else numstus+=num;
if(numstus>lens)
{
lens+=50;
pointer=(student *)realloc(pointer,lens*LEN);
}
printf("请输入学生信息:\n");
for(;i<numstus;i++)
{
getchar();
printf("请输入学号:");
gets(pointer[i].number);
printf("请输入姓名:");
gets(pointer[i].name);
printf("请输入性别(男/女 1/0):");
gets(pointer[i].sex);
if(pointer[i].sex[0]=='0') strcpy(pointer[i].sex,"女");
else strcpy(pointer[i].sex,"男");
printf("请输入各科成绩:(按ABCDE的顺序):");
stud[i].score=0;
for(j=0;j<numsubs;j++)
{
scanf("%f",&stud[i].subject[j]); /*计算总分*/
stud[i].score+=stud[i].subject[j];
}
stud[i].average=stud[i].score/numsubs; /*计算平均分*/
}
count(stud); /*附名次*/
display(stud,0,numstus-1);
getchar();
}
#include "stdio.h"
int numstus;
int lens;
student *pointer;
void main()
{
int i=1;
char str[2];
lens=100;
pointer=(student *)malloc(lens*LEN); /*分配内存*/
numstus=0;
welcome(); /*欢迎界面*/
while(i>0)
{
i=menu_select(); /*控制菜单*/
switch(i)
{
case 1:addrecord(pointer);break; /*增加学生信息*/
case 2:findrecord(pointer);break; /*查询学生信息*/
case 3:amendrecord(pointer);break; /*修改学生信息*/
case 4:sort(pointer);break; /*学生信息排序*/
case 5:statistic(pointer);break; /*统计信息*/
case 6:openfile(pointer);break; /*打开文件*/
case 7:writetotext(pointer);break; /*保存文件*/
case 8:display(pointer,0,numstus-1);break; /*显示记录*/
case 0:
if(numstus!=0) printf("是否保存当前记录?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
writetotext(pointer);
i=-1;break; /*退出系统*/
default:printf("请输入数字0~8:\n");i=1; /*输入错误*/
}
}
printf("\t\t======欢迎再次使用本系统======= \n");
display1();
}