找c语言高手帮忙编程,急求。明天要交了,是c++

输入10名学生的序号和每个学生三门功课(数学、英语、C语言程序设计)的成绩,编程计算出每个学生的总分和平均分,并按学生成绩优劣排序,且打印一张按高分到低分名次排序的成绩单... 输入10名学生的序号和每个学生三门功课(数学、英语、C语言程序设计)的成绩,编程计算出每个学生的总分和平均分,并按学生成绩优劣排序,且打印一张按高分到低分名次排序的成绩单。然后用折半查找法查找有没有平均分为85分的学生,如果找到,则输出相关的序号,如果没有找到,则输出没有找到的信息。
要求:
(1) 排序用一个函数实现。
(2) 打印的成绩单表项包括:序号、数学、英语、 C语言程序设计、总分、平均分。
财富值还可再加。
展开
 我来答
xoaxa
2013-05-25 · TA获得超过8613个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3623万
展开全部

/*

序号    学号    数学    英语    C语言   总分    平均
=====================================================
01      48774   99.00   83.00   97.00   279.00  93.00
02      38614   93.00   95.00   89.00   277.00  92.33
03      46780   85.00   98.00   85.00   268.00  89.33
04      45879   82.00   91.00   82.00   255.00  85.00
05      48119   84.00   65.00   100.00  249.00  83.00
06      47904   86.00   91.00   71.00   248.00  82.67
07      34321   90.00   61.00   96.00   247.00  82.33
08      40283   67.00   94.00   78.00   239.00  79.67
09      37520   92.00   78.00   64.00   234.00  78.00
10      43979   95.00   62.00   74.00   231.00  77.00
11      41508   70.00   64.00   97.00   231.00  77.00
12      57573   81.00   67.00   81.00   229.00  76.33
13      38471   78.00   61.00   87.00   226.00  75.33
14      56229   67.00   94.00   63.00   224.00  74.67
15      49458   68.00   80.00   65.00   213.00  71.00
16      32868   67.00   73.00   61.00   201.00  67.00
=====================================================
没有找到平均成绩为86.00的学生。
Press any key to continue

*/

 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 16
typedef struct student {
 unsigned ID;
 double grade[5];
}stu;
void total(stu classA[], int n) {
 int i,j;
 for(i = 0; i < n; ++i) {
  classA[i].grade[3] = 0;
  for(j = 0; j < 3; ++j)
   classA[i].grade[3] += classA[i].grade[j];
  classA[i].grade[4] = classA[i].grade[3]/3;
 }
}
void sort(stu classA[], int n) {
 int i,j,k;
 stu t;
 for(i = 0; i < n - 1; ++i) {
  k = i;
  for(j = i + 1; j < n; ++j)
   if(classA[k].grade[3] < classA[j].grade[3])
    k = j;
  if(k != i) {
   t = classA[i];
   classA[i] = classA[k];
   classA[k] = t;
  }
 }
}
void show(stu classA[], int n) {
 int i,j;
 printf("序号\t学号\t数学\t英语\tC语言\t总分\t平均\n");
 for(i = 0; i < 53; ++i) printf("=");
 printf("\n");
 for(i = 0; i < n; ++i) {
  printf("%02d\t%u\t",i + 1,classA[i].ID);
  for(j = 0; j < 5; ++j) printf("%.2lf\t",classA[i].grade[j]);
  printf("\n");
 }
 for(i = 0; i < 53; ++i) printf("=");
 printf("\n");
}
int find(stu classA[], int n,double score) {
 int low = 0,high = n - 1;
 int mid = (low + high)/2;
 while(low <= high) {
  if(int(classA[mid].grade[4]) == (int)score) return mid;
  if(classA[mid].grade[4] > 85)
   low = mid + 1;
  else high = mid - 1;
  mid = (low + high)/2;
 }
 return -1;
}
int main() {
 stu myClass[N];
 int i,j,res;
 double score = 86.0;
 srand((unsigned)time(NULL));
 for(i = 0; i < N; ++i) {
  myClass[i].ID = rand() + RAND_MAX;
  for(j = 0; j < 3; ++j)
   myClass[i].grade[j] = rand()%40 + 61;
 }
 total(myClass,N);
 sort(myClass,N);
 show(myClass,N);
 res = find(myClass,N,score);
 if(res < 0) printf("没有找到平均成绩为%.2lf的学生。\n",score);
 else printf("学号为%u的学生的平均成绩为%.2lf分。\n",myClass[res].ID,score);
 return 0;
}
Zhang_Cloudy
2013-05-25 · TA获得超过123个赞
知道答主
回答量:51
采纳率:0%
帮助的人:36.4万
展开全部
#include<iostream>

using namespace std;

int a[10][5];
double b[10];

void sort()
{
     int tmp;
     double tmp1;
     for ( int i = 0; i < 9; i++ )
         for ( int j = i+1; j < 10; j++ )
             if ( a[i][4] < a[j][4] )
             {
                  tmp = a[i][0]; a[i][0] = a[j][0]; a[j][0] = tmp;
                  tmp = a[i][1]; a[i][1] = a[j][1]; a[j][1] = tmp;
                  tmp = a[i][2]; a[i][2] = a[j][2]; a[j][2] = tmp;
                  tmp = a[i][3]; a[i][3] = a[j][3]; a[j][3] = tmp;
                  tmp = a[i][4]; a[i][4] = a[j][4]; a[j][4] = tmp;
                  tmp1 = b[i]; b[i] = b[j]; b[j] = tmp1;
             }
}

void print()
{
     for ( int i = 0; i < 10; i++ )
         cout << a[i][0] << '\t' << a[i][1] << '\t' << a[i][2] << '\t' << a[i][3] << '\t' << a[i][4] << '\t' << b[i] << endl;
}

void find( int l, int r )
{
     if ( l > r ) return;
     int m = ( l + r )/2; 
     if ( b[m] == 85 )
        cout << a[m][0] << endl;
     else
         if ( b[m] < 85 ) {
              r = m-1;
              find(l, r);
         }
         else {
               l = m+1;
               find(l, r);
              }
}

int main()
{
    for ( int i = 0; i < 10; i++ )
    {
        cin >> a[i][0] >> a[i][1] >> a[i][2] >> a[i][3];
        a[i][4] = a[i][1] + a[i][2] + a[i][3];
        b[i] = a[i][4]/3.0;
    }
    sort();
    print();
    find(0, 9);
    
    system("pause");
    return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
盛夏小猫猫cB
2013-05-25 · TA获得超过271个赞
知道小有建树答主
回答量:769
采纳率:0%
帮助的人:350万
展开全部
这个轻松搞定
追问
你编好后上传一下源文件吧,谢谢了!
追答
look my name and jia me
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ontheway5G
2013-05-25 · TA获得超过1493个赞
知道小有建树答主
回答量:1433
采纳率:50%
帮助的人:335万
展开全部
// socre.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#define SNUM 10 // 学生个数和结构体
struct student
{
int num;
int math;
int english;
int c;
int sum;
int average;
};
struct student s[SNUM];
// 声明函数
void sum(student s[]); // 总成绩函数
void average(student s[]);// 平均成绩函数
void sort(student s[]); // 排序算法函数
void search(student s[]); // 查找函数
void print(student s[]); // 打印成绩函数
int main(int argc, char* argv[])
{
int i;
for(i=0; i<SNUM; i++)
{
printf("请输入第%d个学生的信息:序号--数学--英语--c语言(以空格键回车键或者隔开)\n",i+1);
scanf("%d%d%d%d", &s[i].num, &s[i].math, &s[i].english, &s[i].c);
}
sum(s);
average(s);
sort(s);
search(s);
print(s);

getchar();
return 0;
}
void sum( student s[])
{
int i;
for(i=0; i<SNUM; i++)
s[i].sum=s[i].math+s[i].english+s[i].c;
}
void average(student s[])
{
int i;
for(i=0; i<SNUM; i++)
s[i].average=(s[i].math+s[i].english+s[i].c)/3;
}
void sort(student s[])
{
int i,j,k;
struct student temp;
for(i=0; i<SNUM; i++)
{
k=i;
for(j=i+1;j<SNUM;j++)
if(s[k].sum<s[j].sum)
k=j;
if(k!=i)
{
temp=s[i];
s[i]=s[k];
s[k]=temp;
}
}
}
void search(student s[])
{
int mid,low,high,found;
low=0;
high=9;
found=0;
while(low<=high)
{
mid=(high+low)/2;
if(s[mid].average==85)
{
found=1;
break;
}
else if(85>s[mid].average)
high=mid-1;
else
low=mid+1;
}
if(found==1)
printf("平均分为85分的学生序号为:%d\n", s[mid].num);
else
printf("平均分为85分的学生不存在\n");
}
void print(student s[])
{
int i;
printf("序号-数学-英语-c语言--平均分--总分\n");
for(i=0; i<SNUM; i++)
printf("%4d%5d%5d%5d%5d%5d\n",s[i].num,s[i].math,s[i].english,s[i].c,s[i].average,s[i].sum);
}

// 您好,我是直接使用vc6.0进行编辑和编译的,程序通过,可以使用,请参考!希望采纳!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式