各個學生姓名以及對應的各科總成績
① 有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'