字符串的输入输出

xiaoxiao2021-02-28  27

#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\tM\n",name[b],num[b],score[b]);//这里输出的姓名可能会单独占一行,原因在上面 } printf("\n\n");}

转载请注明原文地址: https://www.6miu.com/read-2624393.html

最新回复(0)