各个学生姓名以及对应的各科总成绩
① 有30个学生,每个学生的数据包括学号,姓名,数学,英语,计算机3门课,成绩和总分。要求编写c程序
/*
*有30个学生,每个学生的数据包括学号、姓名、数学,英语,计算机3门课成绩和总分。
*要求编写C程序,完成以下任务:
*1.从键盘输入30个学生的数据信息,计算每个学生3门课的总成绩,并按总分的高低依次输出每个学生的学号、姓名,3门课成绩及总分。
*2.统计各课最高分和最低分,并输出对应学生的数据信息
*3.统计各课及格和不及格的人数,输出对应学生的数据信息。
*/
#include<stdio.h>
#defineN30
structSTUDENT
{
charnum[6];
charname[20];
floatscore[3];
floatsum;
};
structSTUDENTstu[N];
voidprint_student(structSTUDENTuser)
{
printf("学号:%s 姓名:%s 数学:%3.2f 英语:%3.2f 计算机:%3.2f 总分:%3.2f ",
user.num,
user.name,
user.score[0],
user.score[1],
user.score[2],
user.sum
);
}
intmain()
{
inti,j,temp,k;
char*score[3]={"数学","英语","计算机"};
intsort[N];
intss[3][N];
for(i=0;i<N;i++)
{
printf("输入学生信息[%d]: ",i+1);
printf("学号:");
scanf("%s",stu[i].num);
printf("姓名:");
scanf("%s",stu[i].name);
for(k=0;k<3;k++)
{
printf("%s成绩:",score[k]);
scanf("%f",&stu[i].score[k]);
}
stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
sort[i]=i;
}
/*1.按总分排序*/
for(i=0;i<N-1;i++)
{
for(j=0;j<N-i-1;j++)
{
if(stu[sort[j]].sum<stu[sort[j+1]].sum)
{
temp=sort[j];
sort[j]=sort[j+1];
sort[j+1]=temp;
}
}
}
for(i=0;i<N;i++)
{
print_student(stu[sort[i]]);
}
/*2.按各科分排序*/
for(k=0;k<3;k++)
{
for(i=0;i<N;i++)
{
for(j=0;j<N-i-1;j++)
{
if(stu[sort[j]].score[k]<stu[sort[j+1]].score[k])
{
temp=sort[j];
sort[j]=sort[j+1];
sort[j+1]=temp;
}
}
}
/*统计每科数据*/
for(i=0;i<N;i++)
{
ss[k][i]=sort[i];
}
printf("%s最高分学生: ",score[k]);
print_student(stu[sort[0]]);
printf("%s最低分学生: ",score[k]);
print_student(stu[sort[N-1]]);
}
/*3.统计各课及格和不及格的人数,输出对应学生的数据信息。*/
for(k=0;k<3;k++)
{
j=0;
for(i=0;i<N;i++)
{
if(stu[ss[k][i]].score[k]>=60)
{
j++;
}
}
printf("%s及格学生人数(%d): ",score[k],j);
for(i=0;i<j;i++)
{
print_student(stu[ss[k][i]]);
}
printf("%s不及格学生人数(%d): ",score[k],N-j);
for(i=j;i<N;i++)
{
print_student(stu[ss[k][i]]);
}
}
return0;
}
这样就可以了
② 统计成绩 [问题描述] 给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名以及各科成绩组成。
[问题描述] 给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名以及各科成绩组成。对学生的考试成绩进行有关统计,并打印统计表。 [基本要求] (
③ 给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名以及各科成绩组成。
第一,楼主分都不给。。工作量还是有点大
第二,楼主在网络里肯定能搜得到类似的程序,不用求人。
④ 有5个学生,每个学生的数据包括学号、姓名、三门课的成绩,从键盘输入5个学生数据,要求输出三门课总平均
不需要那么麻烦,只需要把你的姓名以及考号输入电脑就可以查询你的各科成绩,也能得到你总成绩的平均分儿。
⑤ Excel考试题目要求 1. 按照表格中的数据,输入学号、姓名以及各科的成绩,然后使用公式计算出每一个学生的
1.如图所示,图呢?
2.总分 SUM 平均分 AVERAGE 保留一位小数 ROUND(,1)
3.男总分=SUMIF(C:C,"男",D:D) 男平专均分=SUMIF(C:C,"男",D:D)/COUNTIF(C:C,"男")
4.不解释
5.居中,不属解释
6.绘图,图1 插入-图标-选择柱状图 数据源 学号和平均分
图2 选择折线图 数据源 学号和总分
⑥ sql A表为学生(学号,姓名) B表为学生各科成绩(学号,成绩,科目),查询学生姓名和成绩总和
selecta.姓名,sum(b.成绩)as总成绩froma,bwherea.学号=b.学号groupbya.姓名
⑦ mysql中一张学生表,查询出单科成绩前十名学生的所有信息 和总分成绩前十名学生的所有信息 在线等
学生表名为:student, 单科成绩的字段为:subject。学生名字为:name
查询单科成绩前十:mysql语句为:select * from student order by subject desc limit 10;
查询总分成绩前十:mysql语句为:select sum(subject) subject,name from student group by name order by subject desc limit 10;
注:
select sum(subject) subject,name
这句的意思是:sum(subject) subject 把单科成绩加总用subject 来命名(就是总成绩),name就是一个字段,这里只有两个字段。
group by name order by subject : group by name 的意思按照名字这一栏来分组,当然,学生成绩表名字有可能是一样的,按照学号是最准确的,这里只是举个例子。
order by subject 这句的意思是按照总分成绩排序,这里的subject 是前面重命名总分的意思。
select sum(subject) as countsubject,name from student group by name order by countsubject desc limit 10;
(7)各个学生姓名以及对应的各科总成绩扩展阅读:
学生成绩表常用sql
1. 在表中插入符合主键
[sql]
/*成绩表*/
CREATE TABLE SC
(
Sid INT REFERENCES Student(Sid), /*学生学号*/
Cid INT REFERENCES Course(Cid), /*课程编号*/
Score INT NOT NULL, /*课程分数*/
PRIMARY KEY(Sid,Cid) /*将学生学号和课程编号设为复合主键*/
)
2. 查询各科成绩最高分,最低分以及平均分
[sql]
SELECT c.Cname, MAX(s.Score) AS Max, MIN(s.Score) AS Min, AVG(s.Score) AS Average
FROM Course c JOIN SC s ON c.Cid = s.Cid
GROUP BY c.Cname
/*此处应注意,若不按照c.Cname进行分组,SQL语句会报错,c.Cname在SELECT语句中不合法,因为它并未出现在聚合函数中也没有出现在GROUP BY语句中*/
3. 查询平均成绩大于80分的学生姓名以及平均成绩
[sql]
SELECT Sname, AVG(Score) AS Average FROM Student JOIN SC
ON Student.Sid=SC.Sid
GROUP BY Sname
HAVING AVG(Score)>80
/*以聚合函数为条件进行删选只能在HAVING语句中进行,WHERE语句不支持聚合函数*/
4.按总分为学生排名,总分相同名次相同
[sql]
SELECT RANK() OVER (ORDER BY SUM(ss.Score) DESC) AS Rank, s.Sname,
ISNULL(SUM(ss.Score),0)
FROM Student s LEFT JOIN SC ss
ON s.Sid = ss.Sid
GROUP BY s.Sname
ORDER BY SUM(ss.Score) DESC
/*RANK()是SQL Server的一个built-in函数,语法为
RANK() OVER ( [ partition_by_clause ] order_by_clause ).*/
5. 查询总分在100至200之间的学生姓名及总分
[sql]
SELECT s.Sname,SUM(ss.Score) FROM Student s JOIN SC ss ON s.Sid=ss.Sid
GROUP BY s.Sname HAVING SUM(ss.Score) BETWEEN 100 AND 200
⑧ 统计成绩 [问题描述] 给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名以及各科成绩组成。对学
收下此问题。----vc6.0测试通过--------------
/*******************************************
[问题描述]
给出个学生的m门考试的成绩表,
每个学生的信息由学号、姓名以及各科成绩组成。
对学生的考试成绩进行有关统计,并打印统计表。
[基本要求]
(1) 按总数高低次序,打印出名次表,分数相同的为同一名次;
(2) 按名次打印出每个学生的学号、姓名、总分以及各科成绩。
[测试数据]
由学生依据软件工程的测试技术自己确定。注意测试边界数据。
[选作内容]
对各科成绩设置不同的权值。
//---既然是没有删除等操作,那我就用数组来做了。
在<float.h>里有一些极小值的宏定义,可以拿来使用。例如
#define FLT_EPSILON 1.19209290E-07F
#define LDBL_EPSILON 1.084202172485504E-19
可以用来判断float,long double 的相等问题。
//---right By kuaidh00 ---200801/08----------
******************************************/
#include <stdio.h>
#include <string>
#include <float.h>
#include <iostream>
#include <iomanip>
#define n 3/*学生数*/
#define m 4/*课程数*/
using namespace std;
//---声明一个结构----
struct Student
{
char m_Name[20];
unsigned int m_ID;
float m_Score[m];
};
typedef struct Student Node;
//------函数声明---------------------------
Node* Init(Node* stu,const int cN,float* Asum,int nSum);
float* Sort(float* Agrade,int nSize);
int Del_Same(float* Asum,int nSum,float* Agrade,int nGreade);
void Display(Student* stu,int nN,float* Asum,int nSum,float* Agrade,int nGreadeSize);
//------函数实现---------------------------
//----录入数据------
Node* Init(Node* stu,const int cN,float* Asum,int nSum)
{
char name[20];
unsigned int id;
float score[m];
int i,j;
for(i=0;i<n;++i)
{
printf("请输入第%d/%d名学生的信息:\n ",i+1,n);
printf("请输入姓名: ");
scanf("%s",name);
printf("\n请输入学号: ");
scanf("%d",&id);
for(j=0;j<m;++j)
{
printf("\n录入第 %d/%d 门课程成绩:",j+1,m);
scanf("%f",&score[j]);
}
printf("\n");
//---赋值过程---------------
strcpy((stu+i)->m_Name,name);//修改成指针访问形式.
(stu+i)->m_ID=id;
//stu[i].m_Score=score;//此步骤?????(不可行。)
for(j=0;j<m;j++)
{
(stu+i)->m_Score[j]=score[j];
}
//-------计算成绩总和写入到sum[]中--------
*(Asum+i)=0.0;
for(j=0;j<m;++j)
{
//(*(Asum+i))=(*(Asum+i))+((stu+i)->m_Score[j]);
(*(Asum+i))+=((stu+i)->m_Score[j]);
}
}//for(n)
printf("成功!~数据录入完毕! ");
return stu;
}
void Display(Node* stu,int nN,float* Asum,int nSum,float* Agrade,int nGreadeSize)
{//打印。按名次从第一名到最后一名。
cout<<endl<<"========================================================================="<<endl;
cout<<"============================打印名次信息================================="<<endl;
cout<<"========================================================================="<<endl;
cout<<"名次======学号======姓名======总分=====名 科 成 绩===="<<endl;
for(int i=0;i<nGreadeSize;++i)
{
for(int j=0;j<n;++j)
{
if(Asum[j]==Agrade[i])
{
cout<<setw(10)<<left<<i+1//名次。
<<setw(10)<<left<<stu[j].m_ID//学号。
<<setw(10)<<left<<stu[j].m_Name//姓名。
<<setw(10)<<left<<Asum[j];//总分。
for(int k=0;k<m;++k)
cout<<setw(10)<<left<<stu[j].m_Score[k];//名科成绩。
}
//cout<<endl;
}
}
}
float* Sort(float* Agrade,int nSize)
{//练习一下直接插值排序法。会用到“哨兵”。nSize表示grade[]中实际元素的个数。
for(int i=1;i<nSize;++i)
{
Agrade[nSize]=Agrade[i];//将它放到哨兵里
for(int j=i-1;j>=0;)
{
if(Agrade[nSize]>Agrade[j])//从大到小的顺序。一定要注意,是拿“哨兵”来与之比较才对的。
{
Agrade[j+1]=Agrade[j];
j--;
}
else
{
break;
}
}//for内
Agrade[j+1]=Agrade[nSize];// 从哨兵中取出这个值来
}//for 外
return Agrade;
}
int Del_Same(float* Asum,int nSum,float* Agrade,int nGreade)
{//将sum[n]中的不重复的元素放到grade[n]中,函数返回grade[]中实际元素的个数。
int Find;//有无重复的标记:1为有,0为无。
int nElem=1;//gread[]中的实际元素个数。
Agrade[0]=Asum[0];
for(int i=0;i<nSum;++i)//sum[]
{
for(int j=0;j<nElem;++j)//grade[]
{
if(Asum[i]==Agrade[j])//判断两个浮点数相等条件。
{
Find=1;
break;
}
else
{
Find=0;
}
}
if(Find==0)
{
Agrade[nElem]=Asum[i];
nElem++;
}
}//for(最外)
return nElem;
}
//------------
void main()
{
Node Stu[n];
Node* pStu;
pStu=Stu;//声明n个Student对象的一个数组。
float sum[n],grade[n+1];//因为想在grade[]中用到直接插值排序法,要用到“哨兵”。所以构造n+1.
pStu=Init(pStu,n,sum,n);
int nGrade_size;
nGrade_size=Del_Same(sum,n,grade,n+1);
float* pGrade=0;
pGrade=Sort(grade,nGrade_size);
Display(pStu,n,sum,n,grade,nGrade_size);
}
⑨ EXCEL怎么提取前三名的姓名及各科分数
直接显示出名次,可以用rank()函数
按1234的顺序显示成绩,可以用large()函数
这两个函数不复杂,自己试一下
⑩ 按照人名查出学生的各科成绩以及总成绩并按总成绩排名的sql语句
按照人名查出学生的各科成绩以及总成绩并按总成绩排名的sql语句示例如下:
selectA.name ,
(selectB.scorefromtable_scoreBwhereB.type='数学'andA.id=B.id) as数学 ,
(selectB.scorefromtable_scoreBwhereB.type='语文'andA.id=B.id) as语文,
(selectB.scorefromtable_scoreBwhereB.type='英语'andA.id=B.id)as英语,
(selectSUM(B.score)fromtable_scoreBwhereA.id=B.id)assum_score
fromtable_studentAorderbysum_scoreDESC
以上sql语句首先把学生表和成绩表联合查出每个学生的数学、语文、英语成绩,然后通过selectSUM(B.score)fromtable_scoreBwhereA.id=B.id查出每个学生的总成绩。
最后orderbysum_scoreDESC实现按总成绩倒叙排列。
(10)各个学生姓名以及对应的各科总成绩扩展阅读
上述sql语句重点是对as关键字的使用- Alias(别名),通过使用 SQL,可以为列名称和表名称指定别名(Alias)。
表的 SQL Alias 语法
SELECT column_name(s) FROM table_name AS alias_name;
列的 SQL Alias 语法
SELECT column_name AS alias_name FROM table_name;
Alias 实例: 使用表名称别名
假设我们有两个表分别是:"Persons" 和 "Proct_Orders"。我们分别为它们指定别名 "p" 和 "po"。
现在,我们希望列出 "John Adams" 的所有定单。
我们可以使用下面的 SELECT 语句:
SELECT po.OrderID, p.LastName, p.FirstName FROM Persons AS p, Proct_Orders AS poWHERE p.LastName='Adams' AND p.FirstName='John'