C言語の発展問題について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ピカピカ

C言語の発展問題について

#1

投稿記事 by ピカピカ » 3ヶ月前

/*
発展課題(prog2_development.c)

確認課題1で作成したprog2_check1.cを、名前をアルファベット順にデータをソートする
関数sort_alphabetを組み込んだプログラム(prog2_check1.c)を作成せよ。

最終的には、作成したprog2_check2.cのプログラムをコピー&ペーストして提出せよ。
*/

コード:

#include <stdio.h>
#include <stdlib.h>

struct student {
char name[20];
int eng;
int math;
int jap;
double ave;
char grade;
};

typedef struct student Student; /* struct student型をStudent型とする */

#define NO 4

int main(void)
{
Student data[]={{"Sato", 82,72,58},
{"Akiyama", 77, 84, 79},
{"Eida", 52, 62, 39},
{"Fujita", 41, 82, 58}};


/* 各自の平均点と評価を求める関数add_ave_grade */
add_ave_grade(data);

/* アルファベット順にソートする関数sort_ave */
sort_alphabet(data);

/* 各自の成績と評価をファイル(grade2020.txt)に書き出すプログラム関数put_eva */
put_eva(data);

return 0;
}


Meta3

Re: C言語の発展問題について

#2

投稿記事 by Meta3 » 3ヶ月前

丸投げ はだめ
環境(ウィンドウズ、VisualStudio2019等)
スキル
分からない事(sortのアルゴリズム等)

を列挙せよ

Meta3

Re: C言語の発展問題について

#3

投稿記事 by Meta3 » 2ヶ月前

コード:

#include <stdio.h>
#include <stdlib.h>

#define NO 4

struct student {
  char name[20];
  int eng;
  int math;
  int jap;
  double ave;
  char grade;
};

typedef struct student Student; /* struct student型をStudent型とする */



void add_ave_grade(Student data[]){

	int i;
	for(i=0; i<NO; i++){
		data[i].ave=(data[i].eng + data[i].math + data[i].jap)/3.0;


		if(data[i].ave >=80){
			data[i].grade = 'A';
		} else if(data[i].ave >=70 && data[i].ave <80){
			data[i].grade = 'B';
		} else if(data[i].ave >=60 && data[i].ave <70){
			data[i].grade = 'C';
		} else {
			data[i].grade = 'D';
		}
	}		

}





sort_alphabet(Student data[]){

int i,j;
Student tmp;


  for(i=0;i<NO;i++){
     for(j=i+1;j<NO;j++){
      if(data[i].name[0]>data[j].name[0]){
         tmp=data[i];
         data[i]=data[j];
         data[j]=tmp;
       }
     }
  }

}







put_eva(Student data[]){

FILE *fp;
  
  fp = fopen("grade2020.txt", "w");  // ファイルを書き込み用にオープン(開く)
  if (fp == NULL) {                 // オープンに失敗した場合
    printf("cannot open\n");       // エラーメッセージを出して
    exit(1);                      // 異常終了
  }

int i;

	for(i = 0; i <NO; i ++){ 
		fprintf(fp, "%-10s:英語=%3d数学=%3d国語=%3d:平均=%6.2lf->生徒=%c \n",
					data[i].name,data[i].eng,data[i].math,data[i].jap, 
					data[i].ave,data[i].grade);
	}
	
	fclose(fp);  
}



int main(void)
{
Student data[]={{"Sato", 82,72,58},
{"Akiyama", 77, 84, 79},
{"Eida", 52, 62, 39},
{"Fujita", 41, 82, 58}};


/* 各自の平均点と評価を求める関数add_ave_grade */
add_ave_grade(data);


/* アルファベット順にソートする関数sort_ave */
sort_alphabet(data);


/* 各自の3教科の成績と平均ならびに評価をファイル(grade2020.txt)に書き出すプログラム関数put_eva */
put_eva(data);

return 0;
}

Meta3

Re: C言語の発展問題について

#4

投稿記事 by Meta3 » 2ヶ月前

コード:

Akiyama   :英語= 77数学= 84国語= 79:平均= 80.00->生徒=A 
Eida      :英語= 52数学= 62国語= 39:平均= 51.00->生徒=D 
Fujita    :英語= 41数学= 82国語= 58:平均= 60.33->生徒=C 
Sato      :英語= 82数学= 72国語= 58:平均= 70.67->生徒=B 

Meta3

Re: C言語の発展問題について

#5

投稿記事 by Meta3 » 2ヶ月前

Windows10  VisualStudio2019 で実行

コード:

c:\b>cl c1.c
Microsoft(R) C/C++ Optimizing Compiler Version 19.28.29336 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

c1.c
Microsoft (R) Incremental Linker Version 14.28.29336.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:c1.exe
c1.obj

c:\b>c1.exe

c:\b>
[list=][/list]

Meta3

Re: C言語の発展問題について

#6

投稿記事 by Meta3 » 2ヶ月前

Windows10  VisualStudio2019 clang

コード:

#define _CRT_SECURE_NO_WARNINGS


#include <stdio.h>
#include <stdlib.h>

#define NO 4

struct student {
  char name[20];
  int eng;
  int math;
  int jap;
  double ave;
  char grade;
};

typedef struct student Student; /* struct student型をStudent型とする */



int add_ave_grade(Student data[]){

	int i;
	for(i=0; i<NO; i++){
		data[i].ave=(data[i].eng + data[i].math + data[i].jap)/3.0;


		if(data[i].ave >=80){
			data[i].grade = 'A';
		} else if(data[i].ave >=70 && data[i].ave <80){
			data[i].grade = 'B';
		} else if(data[i].ave >=60 && data[i].ave <70){
			data[i].grade = 'C';
		} else {
			data[i].grade = 'D';
		}
	}		

	return 0;
}





int sort_alphabet(Student data[]){

int i,j;
Student tmp;


  for(i=0;i<NO;i++){
     for(j=i+1;j<NO;j++){
      if(data[i].name[0]>data[j].name[0]){
         tmp=data[i];
         data[i]=data[j];
         data[j]=tmp;
       }
     }
  }
  return 0;
}







int put_eva(Student data[]){

FILE *fp;
  
  fp = fopen("grade2020.txt", "w");  // ファイルを書き込み用にオープン(開く)
  if (fp == NULL) {                 // オープンに失敗した場合
    printf("cannot open\n");       // エラーメッセージを出して
    exit(1);                      // 異常終了
  }

int i;

	for(i = 0; i <NO; i ++){ 
		fprintf(fp, "%-10s:eng=%3d math=%3d jap=%3d:ave=%6.2lf grade=%c \n",
					data[i].name,data[i].eng,data[i].math,data[i].jap, 
					data[i].ave,data[i].grade);
	}
	
	fclose(fp); 

	return 0; 
}



int main(void)
{
Student data[]={{"Sato", 82,72,58},
{"Akiyama", 77, 84, 79},
{"Eida", 52, 62, 39},
{"Fujita", 41, 82, 58}};


/* 各自の平均点と評価を求める関数add_ave_grade */
add_ave_grade(data);


/* アルファベット順にソートする関数sort_ave */
sort_alphabet(data);


/* 各自の3教科の成績と平均ならびに評価をファイル(grade2020.txt)に書き出すプログラム関数put_eva */
put_eva(data);

return 0;
}

Meta3

Re: C言語の発展問題について

#7

投稿記事 by Meta3 » 2ヶ月前

コード:

Akiyama   :eng= 77 math= 84 jap= 79:ave= 80.00 grade=A 
Eida      :eng= 52 math= 62 jap= 39:ave= 51.00 grade=D 
Fujita    :eng= 41 math= 82 jap= 58:ave= 60.33 grade=C 
Sato      :eng= 82 math= 72 jap= 58:ave= 70.67 grade=B 

Meta3

Re: C言語の発展問題について

#8

投稿記事 by Meta3 » 2ヶ月前

Windows10  VisualStudio2019 clang

コード:

c:\b>clang-cl c1.c

c:\b>c1,exe

c:\b>

返信

“C言語何でも質問掲示板” へ戻る