c语言程序设计

Python018

c语言程序设计,第1张

#include <stdio.h>

#include <string.h>

#define MAX_STUDENT_NUM 5 //学生个数

#define MAX_SCORE_NUM   3 //每个学生成绩个数

typedef struct student

{

 char name[32]//姓名

 int index    //学号

 int score[MAX_SCORE_NUM] //单项成绩数组

 int avg_score//平均成绩

}STUDENT_T

//计算平均成绩

void average(STUDENT_T *a, int cnt)

{

 int i = 0

 int j = 0

 

 for (i = 0 i < cnt i++)

 {

  for (j = 0 j < MAX_SCORE_NUM j++)

  {

   a[i].avg_score += a[i].score[j]

  }

  a[i].avg_score /= MAX_SCORE_NUM

 }

}

void save(STUDENT_T *a, int cnt)

{

 int i = 0

 int j = 0

 FILE *pf = NULL

 char tmp_str[128] = {0}

 char score_str[MAX_SCORE_NUM][32] = {0}

 

 //打开文件 没有即创建有则覆盖写入

 pf = fopen("./students.txt", "w+")

 if (!pf)

 {

  printf("文件打开失败\n")

  return

 }

 

 //先拼接字符串再通过fprintf写入文件

 for (i = 0 i < cnt i++)

 {

  sprintf(tmp_str, "姓名:%s 学号:%d 平均成绩:%d", a[i].name, a[i].index, a[i].avg_score)

  for (j = 0 j < MAX_SCORE_NUM j++)

  {

   sprintf(score_str[j], " 成绩%d:%d", j+1, a[i].score[j])

   strcat(tmp_str, score_str[j])

  }

  fprintf(pf, "%s\n", tmp_str)

 }

 

 //关闭文件

 fclose(pf)

}

int main(int argc, char *argv[])

{

 int i = 0

 int j = 0

 int rank = 0

 STUDENT_T student[MAX_STUDENT_NUM] = {0}

 char tmp[32] = {0}

  

 printf("请按序号依次输入%d个学生的信息\n", MAX_STUDENT_NUM) 

 for (i = 0 i < MAX_STUDENT_NUM i++)

 {

  printf("\n第%d个学生:\n", i+1)

  printf("姓名:\n")

  scanf("%s", student[i].name)

  printf("学号:\n")

  scanf("%d", &student[i].index)

  for (j = 0 j < MAX_SCORE_NUM j++)

  {

   printf("第%d项成绩:\n", j+1)

   scanf("%d", &student[i].score[j])

  }

 }

 //计算每个学生的平均成绩

 average(student, MAX_STUDENT_NUM)

 

 //打印

 for (i = 0 i < MAX_STUDENT_NUM i++)

 {

  printf("姓名:%s 学号:%d 平均成绩:%d\n", student[i].name, student[i].index, student[i].avg_score)

 }

 //保存到文件

 save(student, MAX_STUDENT_NUM)

 

 return 0

}

#include<stdio.h>

#include<malloc.h>

int main()

{

FILE* file = fopen("producer.out","r")

FILE* file2 = fopen("producer2.in","w")

char* buf=(char* )malloc(1<<20)

char* buf2=(char* )malloc(50)

int len

int poi=0

int sum=0

int i

while((len=fread(buf,1,1<<20,file))>0)

{

for(i=0i<len++i)

{

if(buf[i]!='0' &&buf[i]!='1')continue

sum*=2

sum+=buf[i]-'0'

++poi

if(poi==8)

{

printf("%c",(char)sum)

fprintf(file2,"%c",(char)sum)

poi=0

}

}

}

fclose(file)

fclose(file2)

free(buf)

free(buf2)

return 0

}

读了刚才的文件还原成123.

附上刚才的回答(从ASCII生成二进制)的文件读写版本:

#include<stdio.h>

#include<malloc.h>

int main()

{

FILE* file = fopen("producer.in","r")

FILE* file2 = fopen("producer.out","w")

char* buf=(char* )malloc(1<<20)

char* buf2=(char* )malloc(50)

int len

while((len=fread(buf,1,1<<20,file))>0)

{

int i

for(i=0i<len++i)

{

printf("%08s ",itoa((int)buf[i],buf2,2))

fprintf(file2,"%08s ",itoa((int)buf[i],buf2,2))

}

}

fclose(file)

fclose(file2)

free(buf)

free(buf2)

return 0

}

从123变成00110001 00110010 00110011 00001010 。

#include <stdio.h>

#define JUDGER 5

#define PLAYER 3

void sort(float *player, int num)

{

 for (int i=0 i<num i++)

  for (int j=0 j<num-i-1 j++)

   if (player[j]>player[j+1])

   {

    float tmp = player[j]

    player[j] = player[j+1]

    player[j+1] = tmp

   }

 printf("由高到低成绩排序: \n")

 for (int i=0 i<num i++)

  printf(" %f ", player[i])

}

void find(float grade[JUDGER][PLAYER], float player[PLAYER])

{

 float max = 0

 float min = 1000

 int maxIndex = 0, minIndex = 0

 for (int i=0 i<JUDGER i++)

 {

  float dis = 0

  for (int j=0 j<PLAYER j++)

  {

   dis += grade[i][j] - player[j]

  }

  if (dis>max)

  { max = dis maxIndex = i}

  if (dis<min)

  { min = dis minIndex = i}

 }

 printf("最公平的评委: %d号评委\n", minIndex)

 printf("最不公平的评委: %d号评委\n", maxIndex)

}

void main()

{

 float grade[JUDGER][PLAYER]

 float player[PLAYER]

 for (int i=0 i<PLAYER i++)

 {

  float sum = 0

  float max = 0

  float min = 100

  printf("请输入第%d位选手的得分: ", i+1)

  for (int j=0 j<JUDGER j++)

  {

   scanf("%f", &grade[j][i])

   sum += grade[j][i]

   if (grade[j][i]>max)

    max = grade[j][i]

   if (grade[j][i]<min)

    min = grade[j][i]

  }

  player[i] = (sum - min - max) / (JUDGER - 2) 

 }

 find(grade, player)

 sort(player, PLAYER)

}