當前位置:首頁 » 考試成績 » 由鍵盤輸入n個學生m門課程的成績

由鍵盤輸入n個學生m門課程的成績

發布時間: 2021-03-02 12:26:41

Ⅰ C語言結構體 由鍵盤輸入n和m:n個學生 m門課程

intn,i;
printf("請輸入學生人數抄,不襲能大於30人:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("請輸入第%d個學生的信息: ",i+1);
printf("學號:");
scanf("%d",&stu[i].number);
printf("名字:");
gets(stu[i].name);
printf("分數:");
scanf("%f",&stu[i].score);
}

這是根據你提供的結構體寫得。你自己看這加進代碼吧

Ⅱ C語言問題:由鍵盤輸入n(n不超過1000)個學生m(m不超過10)門課程的成績。

#include<stdio.h>

intmain()
{
unsigneda[1000][10],s[1000]={0},i,j,p,m,n,t,sum[1000]={0};
floataver;
printf("輸入學生人數m,輸入課程數n ");
scanf("%d%d",&m,&n);
if(m==0||n==0)
printf("Dataerror! ");
else
{
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);/*輸入數據,並在下一步求和*/
s[i]=s[i]+a[i][j];
}
}
for(p=0;p<m-1;p++)/*冒泡法按總分高低進行排序*/
{
for(i=0;i<m-p;i++)
{
(s[i]<s[i+1])
{
for(j=0;j<n;j++)
{
t=a[i][j];a[i][j]=a[i+1][j];a[i+1][j]=t;
}
t=s[i];s[i]=s[i+1];s[i+1]=t;
}
}
}
printf(" ");
for(i=0;i<m;i++)

{
for(j=0;j<n;j++)/*求每科平均分*/
{
printf("%d",a[i][j]);
}
printf(" ");
}

for(j=0;j<n;j++)
{
for(i=0;i<m;i++)
{
sum[j]=sum[j]+a[i][j];}
aver=(float)sum[j]/m;
printf("%.1f",aver);
}
printf(" ");
}
return0;
}

Ⅲ 給出n個學生的m門課程的考試成績信息,每條信息由姓名、課程代號與分數組成

你們寫程序用的什麼軟體。。。我沒有軟體,你告訴我軟體名字,我下載下來可以給你寫回寫看。

我告答訴你我的思路,你如果會寫可以嘗試自己完成:

  1. 建立一個n個字元的數組用來存放n個學生的名字

  2. 建立m+2個int型的數組用來存放學生的序號(0至n-1),m個課程的成績和平均分,所以是M+2

  3. 然後運算平均分並排序,名次就出來了,列印想要的數據

Ⅳ 由鍵盤輸入n(n不超過1000)個學生m(m不超過10)門課程的成績,要求(1)將學生按總分由高導低排序,按格

大姐 題目很清晰 就是沒看到讓用什麼語言

Ⅳ c++由鍵盤輸入班級學生人數m和課程門數n,定義m*n的二維數組存放m個學生的n門課程成績

int main()
{
int n,m;
scanf("%d", &m);
scanf("%d", &n);
int **a;
int i,j;
a = new int*[m];
for(i=0; i< m; i++)
{
a[i] = new int[n];
for(j=0; j < n; j++)
a[i][j]= rand();
}
for(i=0; i< m; i++)
{
for(j=0; j < n; j++)
printf( "- %d - ",a[i][j]);
}
for(i=0; i< m; i++)
{
delete a[i];
}
delete a;
}

Ⅵ 輸入n個人m門課成績,按總分由高到低排序

#include "stdafx.h"
#include "stdio.h"
struct std{
int m[10];
int sum;
};

void main(void){
int sn,mn,i,j,m_All;

printf("請輸入人數和功課數(用空格隔開)\n人數 功課:");
scanf("%d %d",&sn,&mn);
struct std stemp,*ps=new struct std [sn];
printf("請輸入每位學生的成績(用空格隔開,共%d門功課)\n",mn);
for(i=0;i<sn;i++){
printf(" 同學%d: ",i+1);
(ps+i)->sum=0;
for(j=0;j<mn;j++){
scanf("%d",(ps+i)->m+j);
(ps+i)->sum+=*((ps+i)->m+j);
}
}

for(i=sn-1;i>0;i--)
for(j=0;j<i;j++)
if((ps+j)->sum<(ps+j+1)->sum){
stemp=*(ps+j);
*(ps+j)=*(ps+j+1);
*(ps+j+1)=stemp;
}/**/

for(i=0;i<sn;i++){
for(j=0;j<mn;printf("%6d",*((ps+i)->m+j++)));
printf("\n");
}

for(i=0;i<mn;i++){
m_All=0;
for(j=0;j<sn;m_All+=*((ps+j++)->m+i));
printf("%6.1f",m_All/(float)sn);
}
delete [sn]ps;
printf("\n");
}

Ⅶ 編n個學生,m門課程的成績處理順序,1.實際學生人數,課程由鍵盤輸入,2:n個學生,m門課程成績用

// Ch08sort.cpp : Defines the entry point for the console application.
//默認是從小到大排序
#include <time.h>
#include <iostream>
#include <iomanip>
using namespace std;
//要排序的數組的長度,以及取值的范圍
#define SIZE 10
#define MAX 10000
//---------------------------------插入排序----------------------------------------
//直接插入排序080201
//原理:每次將待排序的記錄,按其關鍵字大小插入到前邊已經排好序的子文件中的適當位置
int InsertSort(int arr[],int len){
int temp,j;
for(int i=1;i<len;i++){
if(arr[i]<arr[i-1]){
temp=arr[i];
j=i;
do{
arr[j]=arr[j-1];
j--;
}while(j>0&&arr[j-1]>temp);
arr[j] = temp;
}
}
return 0;
}
//SHELL排序 希爾排序 8.2.2
/*
先取一個小於n的整數d1作為第一個增量,把文件的全部記錄分成d1個組。
所有距離為dl的倍數的記錄放在同一個組中。先在各組內進行直接插人排序;
然後,取第二個增量d2<d1重復上述的分組和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),
即所有記錄放在同一組中進行直接插入排序為止。
*/
int ModifiedInsertSort(int arr[],int n,int delta){
int temp;
for(int i=delta;i<n;i+=delta){
for(int j=i;j>=delta;j-=delta){
if(arr[j]<arr[j-delta]){
temp = arr[j];
arr[j] = arr[j-delta];
arr[j-delta] = temp;
}
}
}
return 0;
}
int ShellSort(int arr[],int len){
//
for(int delta=len/2;delta>0;delta/=2){
//分別對delta個子序列進行排序//
for(int j=0;j<delta;j++){
ModifiedInsertSort(&arr[j],len-j,delta);
}
}
return 0;
}
//1. 不設監視哨的演算法描述
////注意: 當增量d=1時,ShellPass和InsertSort基本一致,只是由於沒有哨兵而在內循環中增加了一個循環判定條件"j>0",以防下標越界。
void ShellPass(int *R,int n,int d)
{//希爾排序中的一趟排序,d為當前增量
int i,j;
for(i=d+1;i<=n;i++) //將R[d+1..n]分別插入各組當前的有序區
if(R[i] <R[i-d] ){
R[0]=R[i];j=i-d; //R[0]只是暫存單元,不是哨兵
do {//查找R[i]的插入位置
R[j+d]=R[j]; //後移記錄
j=j-d; //查找前一記錄
}while(j>0&&R[0] <R[j] );
R[j+d]=R[0]; //插入R[i]到正確的位置上
} //endif
} //ShellPass
void ShellSort11(int* R,int n)
{
int increment=n; //增量初值,不妨設n>0
do {
increment=increment/3+1; //求下一增量
ShellPass(R,n,increment); //一趟增量為increment的Shell插入排序
}while(increment>1);
} //ShellSort
/*
2.設監視哨的shell排序演算法
演算法分析
1.增量序列的選擇
Shell排序的執行時間依賴於增量序列。
好的增量序列的共同特徵:
① 最後一個增量必須為1;
② 應該盡量避免序列中的值(尤其是相鄰的值)互為倍數的情況。
有人通過大量的實驗,給出了目前較好的結果:當n較大時,比較和移動的次數約在nl.25到1.6n1.25之間。
2.Shell排序的時間性能優於直接插入排序
希爾排序的時間性能優於直接插入排序的原因:
①當文件初態基本有序時直接插入排序所需的比較和移動次數均較少。
②當n值較小時,n和n2的差別也較小,即直接插入排序的最好時間復雜度O(n)和最壞時間復雜度0(n2)差別不大。
③在希爾排序開始時增量較大,分組較多,每組的記錄數目少,故各組內直接插入較快,後來增量di逐漸縮小,分組數逐漸減少,而各組的記錄數目逐漸增多,但由於已經按di-1作為距離排過序,使文件較接近於有序狀態,所以新的一趟排序過程也較快。
因此,希爾排序在效率上較直接插人排序有較大的改進。
3.穩定性
希爾排序是不穩定的。參見上述實例,該例中兩個相同關鍵字49在排序前後的相對次序發生了變化。
*/
//---------------------------------交換排序----------------------------------------
//交換排序---冒泡排序,快速排序
//原理:兩兩比較待排序記錄的關鍵字,發現兩個記錄的次序相反時即進行交換,直到沒有反序的記錄為止。
//冒泡排序080301
int BubbleSort(int arr[],int len){
int k,temp ;
for(int i=0;i<len-1;i++){
k = i;
for(int j=i+1;j<len;j++){
if(arr[j]<arr[k])
k = j;
}
if(k!=i){
temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
return 0;
}
//優化的冒泡排序
int ImprovedBubbleSort(int arr[],int len){
bool noswap;
int temp;
for(int i=0;i<len;i++){
noswap = true;
for(int j=len-1;j>i;j--){
if(arr[j]<arr[j-1]){
temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
noswap = false;
}
}
if(noswap){
break;
}
}
return 0;
}
//快速排序080302
int Partition(int arr[],int len,int i,int j){
int pivot = arr[i];
while(i<j){
while(i<j&&arr[j]>=pivot){
j--;
}
if(i<j){
arr[i++] = arr[j];
}
while(i<j&&arr[i]<=pivot){
i++;
}
if(i<j){
arr[j--] = arr[i];
}
}
arr[i] = pivot;
return i;
}
int QuickSort(int arr[],int len,int low=0,int high=SIZE){
int pivotpos;
if(low<high){
pivotpos = Partition(arr,len,low,high);
QuickSort(arr,len,low,pivotpos-1);
QuickSort(arr,len,pivotpos+1,high);
}
return 0;
}
//---------------------------------選擇排序----------------------------------------
//直接選擇排序080401
//原理:每一趟從待排序的記錄中選出關鍵字最小的記錄,順序放到已排好序的子文件的最後
int StraightSelect(int arr[],int len){
int temp=0;
int k;
for(int i=0;i<len;i++){
k=i;
for(int j=k+1;j<len;j++){
if(arr[j]<arr[k]){
k = j;
}
}
if(k!=i){
temp = arr[k];
arr[k] = arr[i];
arr[i] = temp;
}
}
return 0;
}
//---------------------------------歸並排序----------------------------------------
//歸並排序:
int Merge(int arr[],int len){
return 0;
}
//---------------------------------分配排序----------------------------------------
//桶排序,箱排序8.6
//事先知道序列中的記錄都位於某個小區間段[0,m)內
// 將具有相同值的記錄都分配到同一個桶中,然後依次按照編號從桶中取出記錄,組成一個有序序列
int BucketSort(int arr[],int len){
int max = MAX;//最大值
int *count = new int[max];
int i;
for(i=0;i<max;i++){
count[i] = 0;
}
for(i=0;i<len;i++){
count[arr[i]]++;
}
for(i=0;i<len;){
for(int j=0;j<max;j++){
while(count[j]>0){
arr[i++] = j;
count[j]--;
}
}
}
return 0;
}
//列印數組
int printarr(int arr[],int len){

for(int i=0;i<len;i++){
if(i%10==0)
cout<<endl;
cout<<setw(4)<<arr[i]<<" ";
}
cout<<endl;
return 0;
}
int main()
{
int arr[SIZE];
int len = sizeof(arr)/sizeof(arr[0]);//SIZE
srand( (unsigned)time( NULL ) );
for(int i=0;i<len;i++){
arr[i] =rand()%MAX;
}
cout<<"生成數組:"<<endl;
printarr(arr,len);
// StraightSelect(arr,len);
// InsertSort(arr,len);
// BubbleSort(arr,len);
// QuickSort(arr,len);
// ImprovedBubbleSort(arr,len);
// ShellSort(arr,len);
BucketSort(arr,len);
cout<<endl<<"排序後得到的數組:"<<endl;
printarr(arr,len);

return 0;
}

Ⅷ 首先從鍵盤輸入N個學生的M門課程的成績,然後計算並輸出每個學生的總成績和平均值。

運用excel表格中的公式欄目下的求和功能和平均數功能即可,選中一個學生的所有科目成績,拖到最底部,點擊公式中的自助求和即可

Ⅸ 從鍵盤輸入N個學生的學號和每人M門課程的成績,計算每個學生的總分及平均分.輸出

兩個for循環後面的分號都要去掉才行!!!!

Ⅹ C語言數組循環問題 有n個學生m門課程,輸入每個學生的各門成績,並求出每個學生的平均成績,按降序排列

這個for循環是不是少了括弧?printf不包括在里?


另外你說「不能循環輸入成績」是什麼意思?

熱點內容
武漢大學學生會輔導員寄語 發布:2021-03-16 21:44:16 瀏覽:612
七年級學生作文輔導學案 發布:2021-03-16 21:42:09 瀏覽:1
不屑弟高考成績 發布:2021-03-16 21:40:59 瀏覽:754
大學畢業證會有成績單 發布:2021-03-16 21:40:07 瀏覽:756
2017信陽學院輔導員招聘名單 發布:2021-03-16 21:40:02 瀏覽:800
查詢重慶2018中考成績查詢 發布:2021-03-16 21:39:58 瀏覽:21
結業考試成績怎麼查詢 發布:2021-03-16 21:28:40 瀏覽:679
14中醫醫師資格筆試考試成績查分 發布:2021-03-16 21:28:39 瀏覽:655
名著賞析課程標准 發布:2021-03-16 21:27:57 瀏覽:881
北京大學商業領袖高端培訓課程 發布:2021-03-16 21:27:41 瀏覽:919