学校の課題について1

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

学校の課題について1

#1

投稿記事 by sawasora0410 » 3年前

以下の問題を教えてください。よろしくお願いします。

課題に関する説明 /*
確認課題1 (prog2_check1.c)

コンテンツに関数を使わずに3教科(英語、数学、国語)の点数を読み込み、
平均点と成績を求めるプログラムprog2_check0.cがある。

このプログラムprog2_check0.cを、以下の二つの関数を加えることでprog2_check0.cと
同じ動作をするプログラムprog2_check1.cを作成せよ。
・関数add_ave_gradeは、Student data[] を仮引数で受け取って、平均と成績を求める。
・関数put_evaは、Student data[] を仮引数で受け取って、名前、3教科の点数、平均点、
 成績を出力する。

最終的に、作成したprog2_check1.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);

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

return 0;
}

Meta3

Re: 学校の課題について1

#2

投稿記事 by Meta3 » 3年前

>コンテンツに関数を使わずに3教科(英語、数学、国語)の点数を読み込み、
>平均点と成績を求めるプログラムprog2_check0.cがある

どこに?

>・関数add_ave_gradeは、Student data[] を仮引数で受け取って、平均と成績を求める。
>・関数put_evaは、Student data[] を仮引数で受け取って、名前、3教科の点数、平均点、
 成績を出力する。

成績?

sawasora0410

Re: 学校の課題について1

#3

投稿記事 by sawasora0410 » 3年前

>コンテンツに関数を使わずに3教科(英語、数学、国語)の点数を読み込み、
>平均点と成績を求めるプログラムprog2_check0.cがある

>どこに?は、
失礼しました。以下です。

コード:


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

構造体学生{
	文字名[20];
	int eng;
	int math;
	int jap;
	ダブルアベニュー;
	チャーグレード;
};

typedef struct student Student; / * structstudent型を学生型ガスケット* /

#define NO 4

int main(void)
{{
	int i;
	ファイル* fp;
	学生データ[] = {{"佐藤"、82,72,58}、
				{「秋山」、77、84、79}、
				{「エイダ」、52、62、39}、
				{"藤田"、41、82、58}};

	/ *この自の平均点と生徒を好む* /				
	for(i = 0; i <NO; i ++){/ * 4人の3平均点を求める* /
		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';
		} そうしないと {
			data [i] .grade = 'D';
		}
	}
	
	
	/ *受験をグレード2020.txtにコメントする* /
	/ *グラフファイルを開く* /
	if((fp = fopen( "grade2020.txt"、 "w"))== NULL){
		printf( "こんなファイルが存在しません。");
		exit(1);
	}
	
	/ *グラフ(4人の名前、点数(3教科)、平均点、成績)* /
	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);
	
	0を返します。
}

丸投げはよくいと思い、自分で考えたところ、
ここだけは付け加えれました。
(これも違ったらご指摘ください🙇‍♀️)


コード:

add_ave_grade(data){
  int i,averege=0;

   for(i=0;i<10;i++){
         average+=data[i];
   }
   return average/3;
   
  }
  
  
prog2_check0.c は

Meta3

Re: 学校の課題について1

#4

投稿記事 by Meta3 » 3年前

プログラム作ったことある^^

コード:

#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';
		}
	}		

}





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);

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

return 0;
}

Meta3

Re: 学校の課題について1

#5

投稿記事 by Meta3 » 3年前

grade2020.txt

コード:

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

Meta3

Re: 学校の課題について1

#6

投稿記事 by Meta3 » 3年前

program は半角英数字で!!
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

sawasora0410

Re: 学校の課題について1

#7

投稿記事 by sawasora0410 » 3年前

本当にありがとうございます!!!!!

送っていただいたプログラムを参考にこんな感じでしました。
ただ、
コンパイルをすると、
clang: error: no input files
と出てしまいます。
なんででしょうか??

コード:

#include<stdio.h>
#include<stdib.h>

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

#define NO4

int add_ave_grade(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';
    }
}
}

int put_ave(data){
  int i;
  FILE *fp;

  if((fp=fopen("grade2020.txt","w"))==NULL){
    printf("出力ファイルが存在しません。");
    exit(1);
  }

  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)
{
  int i;

  Student data[]{{"Sato",82,72,58},
  {"Akiyama",77,84,79},
  {"Eida",52,62,39},
  {"Fujita",41,82,58}};

  add_ave_grade(data);
  
  put_eva(data);

}


 return 0;
}


Meta3

Re: 学校の課題について1

#8

投稿記事 by Meta3 » 3年前

コピペしたらいいじゃない!
なんで無茶苦茶にしちゃうの^^

コード:

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

c1.c
c1.c(2): fatal error C1083: include ファイルを開けません。'stdib.h':No such file or directory

c:\b>c.bat

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

c1.c
c1.c(15): error C2628: 'student' の後に 'int' を続けて記述できません(セミコロン ';' で区切ってあるか確認してください)。
c1.c(18): error C2065: 'NO': 定義されていない識別子です。
c1.c(19): error C2109: 配列または、ポインターでない変数に添字が使われました。
c1.c(21): error C2109: 配列または、ポインターでない変数に添字が使われました。
c1.c(22): error C2109: 配列または、ポインターでない変数に添字が使われました。
c1.c(23): error C2109: 配列または、ポインターでない変数に添字が使われました。
c1.c(24): error C2109: 配列または、ポインターでない変数に添字が使われました。
c1.c(25): error C2109: 配列または、ポインターでない変数に添字が使われました。
c1.c(26): error C2109: 配列または、ポインターでない変数に添字が使われました。
c1.c(28): error C2109: 配列または、ポインターでない変数に添字が使われました。
c1.c(42): error C2065: 'NO': 定義されていない識別子です。
c1.c(44): error C2109: 配列または、ポインターでない変数に添字が使われました。
c1.c(43): warning C4473: 'fprintf': 書式文字列として渡された引数が不足しています
c1.c(43): note: プレースホルダーとそのパラメーターには 5 の可変個引数が必要ですが、0 が指定されています。
c1.c(43): note: 不足している可変個引数 1 が書式文字列 '%-10s' に必要です
c1.c(57): error C2065: 'Student': 定義されていない識別子です。
c1.c(57): error C2146: 構文エラー: ';' が、識別子 'data' の前に必要です。
c1.c(57): error C2065: 'data': 定義されていない識別子です。
c1.c(57): error C2059: 構文エラー: ']'
c1.c(62): error C2065: 'data': 定義されていない識別子です。
c1.c(63): error C3873: '0x3000': この文字を識別子の最初の文字にすることはできません
c1.c(63): error C3872: '0x3000': この文字を識別子で使用することはできません
c1.c(64): error C2065: '  ': 定義されていない識別子です。
c1.c(64): error C2146: 構文エラー: ';' が、識別子 'put_eva' の前に必要です。
c1.c(64): error C2065: 'data': 定義されていない識別子です。
c1.c(69): error C2059: 構文エラー: 'return'
c1.c(70): error C2059: 構文エラー: '}'

Meta3

Re: 学校の課題について1

#9

投稿記事 by Meta3 » 3年前

clang を習ってる?

環境は学校にしかないとか?ですか

Meta3

Re: 学校の課題について1

#10

投稿記事 by Meta3 » 3年前

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 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);

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

return 0;
}

Meta3

Re: 学校の課題について1

#11

投稿記事 by Meta3 » 3年前

コード:

Sato      :eng= 82 math= 72 jap= 58:ave= 70.67 grade=B 
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 

Meta3

Re: 学校の課題について1

#12

投稿記事 by Meta3 » 3年前

Windows10  VisualStudio2019 clang

コード:


c:\b>clang-cl c1.c

c:\b>c1.exe

c:\b>

Meta3

Re: 学校の課題について1

#13

投稿記事 by Meta3 » 3年前

>コンパイルをすると、
clang: error: no input files
と出てしまいます。
なんででしょうか??
...............................

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

#include<stdib.h>てないはね!

それからプログラムには全角スペースがはいっている
これは error C3872: '0x3000': この文字を識別子で使用することはできません
になるよ

Meta3

Re: 学校の課題について1

#14

投稿記事 by Meta3 » 3年前

>コンパイルをすると、
clang: error: no input files
と出てしまいます。
なんででしょうか??
...............................

c:\b>clang-cl
clang-cl: error: no input files

これかな?
ソースファイル がないってことですね

Linux みたいですね


MacにはXcodeをインストールすると、自動的にデフォルトのコンパイラとしてClangがインストールされます。
しかし、そのClangはAppleが手を加えているある程度古いバージョンのClangのため、最新機能が使えません。
最新版のほうがより多くのバグ検出ができたり、より最適化ができる場合があるので
最新版を入れることをおすすめします。

$ llvm
$ clang
clang-9: error: no input files

...

Linuxインストール方法は
Ubuntuでの例だとこうです。

$ sudo apt install clang


...
Windows版のインストールは VisualStudio2019 インストーラーから行います

IDEでは プラットフォームツールセットを LLVM(clang-cl) にします

コマンドプロンプトでは clang-cl を使います
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>clang-cl --version
clang version 10.0.0
Target: i686-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\Llvm\bin

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>cd c:\

c:\>cd b

c:\b>clang-cl
clang-cl: error: no input files

c:\b>

Meta3

Re: 学校の課題について1

#15

投稿記事 by Meta3 » 3年前

Ubuntu 20.04 clang 10.0.0
入力ファイルがないと

コード:

xyzkawa3@KAWA-PC:~$ clang --version
clang version 10.0.0-4ubuntu1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
xyzkawa3@KAWA-PC:~$ clang
clang: error: no input files

エディター が vi とか nano ですか

Meta3

Re: 学校の課題について1

#16

投稿記事 by Meta3 » 3年前

コード:

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


//int add_ave_grade(Student data[]){//エラー!


int add_ave_grade(data){

上記のように、配列を引数に指定する方法はCのむつかしい部分です。

int add_ave_grade(Student data[NO]){

int add_ave_grade(Student data[]){

int add_ave_grade(Student* data){


の3つの書き方があります
これは シンタックスシュガーといって分かりやすい書き方でかけばいいです
(実際の関数呼び出し時には、配列のポインタを引数に渡すことになります
要素数は書いても無視されわたりません)
https://it-ojisan.tokyo/c-func-arg-array/

返信

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