字符串的输入输出

#include <stdio.h>
#include <string.h>
#define N 30
#define M 15
int ReadScore(long num[],char name[][M],int score[]);    //读入每个学生的学号、姓名、成绩
void Average(int score[],long num[],int n);              //计算课程的总分、平均分
void ScoreSort21(int score[],long num[],char[][M],int n);//按成绩由高到低排出名次表
int main()
{
 long num[N];
 char name[N][M];
 int score[N];
 int n = ReadScore(num,name,score);
 Average(score,num,n);
 ScoreSort21(score,num,name,n);
 return 0;
}
ReadScore(long num[],char name[][M],int score[])//定义了三个数组分别存放学生的学号姓名成绩
{
 int i = -1;
 //定义i = -1使do while循环从下标从0开始存入到对应的数组中
 do{
  i++;
  printf("Input ID、score and name:");
  scanf("%d%ld",&num[i],&score[i]);
  gets(name[i]);
 // 或者用scanf("%s",name[i]);getchar();

 //而使用fgets(name[i],sizeof(name[i]),stdin);不会读走缓冲区的回车符,并且用getchar()也不行,最后输出的姓名还是会单独占一行

  //限制输入字符串长度不超过name数组的大小
 }while(score[i] >= 0 && num[i] > 0 && i < 30);//成绩大于等于0,学号大于0,人数不超过30则执行循环
// printf("i = %d\n",i);
 return i;//返回学生总数
}
void Average(int score[],long num[],int n)
{
 int i;
 float sum = 0,average;//定义sum为float类型,为后面平均分的计算做准备
 for(i = 0;i < n;i++)
 {
  sum = sum + score[i];
 }
 average = sum / n;
 printf("This course's total score is %.2f\naverage score is %.2f\n",sum,average);
}
void ScoreSort21(int score[],long num[],char name[][M],int n)
{
 int i,j,a,b,temp1,temp2;
 char temp[M];
 for(i = 0;i < n;i++);
 {
  a = i;
  for(j = i + 1;j < n;j++)
  {
   if(score[j] > score[i])
   a = j;
  }
  if(a != i)
  {
   temp1 = score[a];
   score[a] = score[i];
   score[i] = temp1;
   temp2 = num[a];
   num[a] = num[i];
   num[i] = temp2;
   strcpy(temp,name[a]);
   strcpy(name[a],name[j]);
   strcpy(name[j],temp);
  }
 }
 printf("姓名 学号 成绩\n");
 for(b = 0;b < n;b++)
 {
  printf("%s\t%ld\t%4d\n",name[b],num[b],score[b]);//这里输出的姓名可能会单独占一行,原因在上面
 }
 printf("\n\n");
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值