ウォーターサーバーとコーヒーマシンが一体化した画期的マシン >>

c言語プログラミングで1から100までの数字の合計ちと平均値を求めるプログラムを作成をできるかたお願いします
2つの値をfloat型でお願いします

A 回答 (4件)

float sum;


float average;
int i;

for(i=1, sum=0; i <= 100; sum += (i++));
average = sum/(i-1);
    • good
    • 0

こんな方法もあります。

再帰処理と言います。

#include <stdio.h>

float sum(float min, float max)
{
if (min < max)
return min + sum(min + 1, max);
else
return min;
}

void main()
{
float goukei;
float heikin;

goukei = sum(1, 100);
heikin = goukei / 100;

printf("合計 = %f 平均 = %f\n", goukei, heikin);
}
    • good
    • 1

No1の方のように力技で行う方法が自然な方法ですが、


この問題は、等差数列の和を求めることになるので、
1から100までの数字の合計=(1+100)×100÷2
となります。
等差数列の和については、下記URLを参照。
http://www.kwansei.ac.jp/hs/z90010/sugakua/suure …
http://mathwords.net/tousasuretsunowa

したがって、プログラムは、以下のようになります。
#include <stdio.h>
int main()
{
float goukei;
float heikin;
goukei = (1.0+100.0)*100.0/2.0;
heikin = goukei/100.0;
printf("合計=%f 平均=%f\n",goukei,heikin);
return 0;
}

以下実行結果です。
合計=5050.000000 平均=50.500000
    • good
    • 2

#include <stdio.h>



int main()
{
float goukei;
float heikin;

goukei = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10
+ 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20
+ 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30
+ 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40
+ 41 + 42 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 50
+ 51 + 52 + 53 + 54 + 55 + 56 + 57 + 58 + 59 + 60
+ 61 + 62 + 63 + 64 + 65 + 66 + 67 + 68 + 69 + 70
+ 71 + 72 + 73 + 74 + 75 + 76 + 77 + 78 + 79 + 80
+ 81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + 89 + 90
+ 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 + 100;
heikin = goukei / 100;
printf("合計 = %f 平均= %f\n", goukei , heikin);
return 0;
}

コンパイルしてませんが。
    • good
    • 6

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Qプログラミング C言語

多重ループを用いて、クラス数、生徒数,生徒の点数を入力したときに、各クラスの平均点,
及びクラス全体の平均点を算出するプログラムを作成しているのですが、どこが間違えているかわかりません。どなたか間違えているところ、答えを教えて頂けないでしょうか。

これが、自分で作成したプログラムです。


#include<stdio.h>

int main(void){
int a,b,c=0,i,j,sum=0;
double ave=0;

printf("クラス数を入力してください:"); scanf("%d",&a);
printf("生徒数を入力してください:"); scanf("%d",&b);


for(i=1; i<=a; i++){
for(j=1; j<=b; j++){
printf("クラス%d:%d人目の点数を入力してください:",i,j,c); scanf("%d",&c);
sum=sum+c;

}

printf("クラス%dの平均点は%fです。\n",i,ave=sum/b);


}

printf("クラス全体の平均は%dです。",i,ave/a);

return 0;
}

多重ループを用いて、クラス数、生徒数,生徒の点数を入力したときに、各クラスの平均点,
及びクラス全体の平均点を算出するプログラムを作成しているのですが、どこが間違えているかわかりません。どなたか間違えているところ、答えを教えて頂けないでしょうか。

これが、自分で作成したプログラムです。


#include<stdio.h>

int main(void){
int a,b,c=0,i,j,sum=0;
double ave=0;

printf("クラス数を入力してください:"); scanf("%d",&a);
printf("生徒数を入力...続きを読む

Aベストアンサー

とりあえず、追加、修正した箇所にコメントいれてあります。

#include<stdio.h>

int main(void){
int a,b,c=0,i,j,sum=0;
int allsum = 0; //追加
double ave=0;

printf("クラス数を入力してください:"); scanf("%d",&a);
printf("生徒数を入力してください:"); scanf("%d",&b);


for(i=1; i<=a; i++){
sum = 0; //追加
for(j=1; j<=b; j++){
printf("クラス%d:%d人目の点数を入力してください:",i,j,c); scanf("%d",&c);
sum=sum+c;
allsum=allsum+c; //追加

}

printf("クラス%dの平均点は%fです。\n",i,ave=sum/b);


}

printf("クラス全体の平均は%fです。\n",ave=allsum/(a*b)); //修正

return 0;
}

とりあえず、追加、修正した箇所にコメントいれてあります。

#include<stdio.h>

int main(void){
int a,b,c=0,i,j,sum=0;
int allsum = 0; //追加
double ave=0;

printf("クラス数を入力してください:"); scanf("%d",&a);
printf("生徒数を入力してください:"); scanf("%d",&b);


for(i=1; i<=a; i++){
sum = 0; //追加
for(j=1; j<=b; j++){
printf("クラス%d:%d人目の点数を入力してください:",i,j,c); scanf("%d",&c);
sum=sum+c;
allsum=allsum+c; //追加

}

printf("クラス%d...続きを読む

Qプログラムの改良

人の作ったプログラムを改良することになりました。
Visual C++ は初めてですが、CやC++は一通り勉強しています。

そこで、いろいろ調べているのですが、
例えば
「MFCは使わずに,Win32API SDKを用いた方法」
などという説明があります。

自分が対応しているプログラムが、そのどちらであるか、あるいはほかの方法で作られているか
というのはどうしたら分かるのでしょうか?

Aベストアンサー

No1です
私はC++は全然触ったこと無いので
あまり的確な回答は期待しないでくださいね

Q1.いいんじゃないでしょうか?
MSDNのOnPoint↓
https://msdn.microsoft.com/ja-jp/library/01c9aaty.aspx

OnPointクラス(Cwndクラス)
https://msdn.microsoft.com/ja-jp/library/1xb05f0h.aspx
このページの一番最初に
「Microsoft Foundation Class ライブラリにあるすべてのウィンドウ クラスの基本機能が用意されています。」と書いてありますから
そういうことですね

Q2.なんでもいいと思いますけど
そもそもあなたが対応するプログラムが
きちんとWin32のみで、もしくはMFCのみで書かれているとは限らないですからね
適当に作られて、両方が混在している可能性だってありますし

Q3.そこからですか
そこは調べればすぐ出てくるかと思いますが
MFCというのはWin32をラッピングしたものです

Q4.作った本人に聞く
仕様書とかがあるならそれを見る

No1です
私はC++は全然触ったこと無いので
あまり的確な回答は期待しないでくださいね

Q1.いいんじゃないでしょうか?
MSDNのOnPoint↓
https://msdn.microsoft.com/ja-jp/library/01c9aaty.aspx

OnPointクラス(Cwndクラス)
https://msdn.microsoft.com/ja-jp/library/1xb05f0h.aspx
このページの一番最初に
「Microsoft Foundation Class ライブラリにあるすべてのウィンドウ クラスの基本機能が用意されています。」と書いてありますから
そういうことですね

Q2.なんでもいいと思いますけど
そもそもあなたが...続きを読む

Qプログラミング初心者です!このエラーの意味があまりよくわからないのですがどういう意味なのでしょうか?

このプログラムのエラーの用語?みたいなやつの意味がよくわからないので教えてください!

Aベストアンサー

すみません、画像が不鮮明で、詳細まではわかりません。

class Class1 {}
でよろしいでしょうか?
文法通りに解釈すれば、これでClass1の定義は終了です。
ここで区切られなければならないならない筈が、なんか続きっぽく書いてある、ということでエラーになっています。

その後に続く { 以降は、Class1の外です。
本当は、この後の部分が Class1の内容ではないでしょうか?
だとすると、Class1直後の{} が不要です。


エラーメッセージは、コンピュータの解釈した内容で表示されます。
本当の原因が、エラーメッセージの通りであるとは限りません。
表示された行より前を確認しましょう


また、エラーメッセージが沢山出てもあわてないことです。
一つ間違いがあると、本来正しい箇所まで間違っていると判断されてしまうことがよくあります。
そんなときは、その一つを治すだけで一気にエラーが無くなります。

QC言語で四則演算を使って10を作るプログラム

C言語のプログラミングの問題です。
1桁の整数4つをキーボードから入力して、四則演算で10になる式をすべて出力するという問題で、演算子の優先順位ありで、括弧は使わないとし、数字は入れ替え可能です。
また、プログラムはint型の変数を用いるというものです。
とりあえずは数字入れ替えなしで、次のような力技でソースコードを作ってみたのですが、数字の入れ替えまで考えるとあまりに力技すぎるようなだらだらとしたプログラムになってしまいます。。。
数字の入れ替え可能としてもっと簡単なプログラムを作るにはどのようなソースコードになるのでしょうか。

以下ソースコードです。

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

int main(void) {

int a, b, c, d = 0;

printf("一桁の整数4つを入力してください。\n");
scanf_s("%d %d %d %d", &a, &b, &c, &d);

if (a + b - c * d == 10)
printf("%d+%d-%d*%d\n", a, b, c, d);
else if (a + b - c / d == 10)
printf("%d+%d-%d/%d\n", a, b, c, d);
else if (a + b * c - d == 10)
printf("%d+%d*%d-%d\n", a, b, c, d);
else if (a + b * c / d == 10)
printf("%d+%d*%d/%d\n", a, b, c, d);
else if (a + b / c - d == 10)
printf("%d+%d/%d-%d\n", a, b, c, d);
else if (a + b / c * d == 10)
printf("%d+%d/%d*%d\n", a, b, c, d);
else if (a - b + c * d == 10)
printf("%d-%d+%d*%d\n", a, b, c, d);
else if (a - b + c / d == 10)
printf("%d-%d+%d/%d\n", a, b, c, d);
else if (a - b * c + d == 10)
printf("%d-%d*%d+%d\n", a, b, c, d);
else if (a - b * c / d == 10)
printf("%d-%d*%d/%d\n", a, b, c, d);
else if (a - b / c + d == 10)
printf("%d-%d/%d+%d\n", a, b, c, d);
else if (a - b / c * d == 10)
printf("%d-%d/%d*%d\n", a, b, c, d);
else if (a * b + c - d == 10)
printf("%d*%d+%d-%d\n", a, b, c, d);
else if (a * b + c / d == 10)
printf("%d*%d+%d/%d\n", a, b, c, d);
else if (a * b - c + d == 10)
printf("%d*%d-%d+%d\n", a, b, c, d);
else if (a * b - c / d == 10)
printf("%d*%d-%d/%d\n", a, b, c, d);
else if (a * b / c + d == 10)
printf("%d*%d/%d+%d\n", a, b, c, d);
else if (a * b / c - d == 10)
printf("%d*%d/%d-%d\n", a, b, c, d);
else if (a / b + c - d == 10)
printf("%d/%d+%d-%d\n", a, b, c, d);
else if (a / b + c * d == 10)
printf("%d/%d+%d*%d\n", a, b, c, d);
else if (a / b - c + d == 10)
printf("%d/%d-%d+%d\n", a, b, c, d);
else if (a / b - c * d == 10)
printf("%d/%d-%d*%d\n", a, b, c, d);
else if (a / b * c + d == 10)
printf("%d/%d*%d+%d\n", a, b, c, d);
else if (a / b * c - d == 10)
printf("%d/%d*%d-%d\n", a, b, c, d);
else {
printf("10になる組み合わせはありません。");
}

return 0;

}

C言語のプログラミングの問題です。
1桁の整数4つをキーボードから入力して、四則演算で10になる式をすべて出力するという問題で、演算子の優先順位ありで、括弧は使わないとし、数字は入れ替え可能です。
また、プログラムはint型の変数を用いるというものです。
とりあえずは数字入れ替えなしで、次のような力技でソースコードを作ってみたのですが、数字の入れ替えまで考えるとあまりに力技すぎるようなだらだらとしたプログラムになってしまいます。。。
数字の入れ替え可能としてもっと簡単なプログラ...続きを読む

Aベストアンサー

No14です。
calcに一部誤りがありましたので、修正しました。
下記URLが正しいソースになります。こちらを使用してください。
http://climbi.com/b/10192/1
不明点があれば、補足してください。

Qこれがどーゆープログラムなのかわかりません。 教えてください

これがどーゆープログラムなのかわかりません。
教えてください

Aベストアンサー

No.1さんの通りなので、私にベストアンサーは不要ですが、補足で。
書いてある通り素直に読めばいいだけでなんのトリッキーなアルゴリズムでもないですよ。

aが1~9の間以下を繰り返す。
bが1~9の間以下を繰り返す。
cにaとbの乗算結果を代入して出力する。
bが9まで繰り返したら1行改行する。
aが9まで繰り返したら処理結果0を設定してプログラムを終了する。

流れで言えば、
aが1で、bが1,2,3 ... 9と動いていくので、c=1*1 , c=1*2 , c=1*3 .... c=1*9の次
aが2で、bが1,2,3 ... 9と動いていくので、c=2*1 , c=2*2 ...

C言語を日本語にしただけですが、どのあたりで悩んでいるのか書いてくれれば違った回答があるかと。
それともC言語がわからないということでしょうか?
includeとかmainとかわかりますか?

QCのプログラムに無性にイライラするのはおかしいですか?

CQ出版のインタフェース 2017-5 の記事のプログラム例に
for( i=0; i<256; i++){
 for( y =0; y < Y; y++ ){
  for( x = 0; x < X; x++){
   p[0] = img -> imageData[img->widthStep* y + x*3 ]; //B(青色)
   if(p[0]==i){hn[i]++;}
  }
 }
}
がありました。このリストを見て、無性にイライラするのは私だけでしょうか?

なぜ、i,y,x の3重のループで処理しないといけないのか、y,xの2重ループで十分ではないかと思います。

for( y =0; y < Y; y++ ){
 for( x = 0; x < X; x++){
  p[0] = img -> imageData[img->widthStep* y + x*3 ];  //B(青色)
  hn[ p[0] ]++;
 }
}

3重にするならせめて、y,x,i の順にしてp[0]への代入は1回で済ませればと思います。

for( y =0; y < Y; y++ ){
 for( x = 0; x < X; x++){
  p[0] = img -> imageData[img->widthStep* y + x*3 ];  //B(青色)
  for( i=0; i<256; i++){
     if(p[0]==i){hn[i]++;}
  }
 }
}

最近のコンパイラの最適化では、私の書いたようなコーディング(修正?)は無意味なのでしょうか?

CQ出版のインタフェース 2017-5 の記事のプログラム例に
for( i=0; i<256; i++){
 for( y =0; y < Y; y++ ){
  for( x = 0; x < X; x++){
   p[0] = img -> imageData[img->widthStep* y + x*3 ]; //B(青色)
   if(p[0]==i){hn[i]++;}
  }
 }
}
がありました。このリストを見て、無性にイライラするのは私だけでしょうか?

なぜ、i,y,x の3重のループで処理しないといけないのか、y,xの2重ループで十分ではないかと思います。

for( y =0; y < Y; y++ ){
 for( x = 0; x < X; x++)...続きを読む

Aベストアンサー

利点を考えてみました


これを並列処理したときに
スレッド0: hn[0] に p[0] = 0 をカウント
スレッド1: hn[1] に p[0] = 1 をカウント
...
とすれば、
・img -> imageData は読み出すだけなので衝突しない
・hn[i] でアクセスする領域は、スレッド毎に i が違うので、同じ箇所に書き込まれることはない。
となり、排他処理が不要となります。
(もちろん、x,y,i,p[0]はスレッドでローカルな変数とします)

ただ、並列処理のオーバーヘッドや同時並列処理数等を考えると、こんな並列処理はしない方が効率的です。


あるいは、hn[]がシークに時間がかかる領域の場合、
hn[p[0]) で毎回違う位置を探しに行って、その時間が無視できないほどだったら、
先にhnを決めてしまった方が速くなるでしょう。

こちらも、非現実的です。

QC言語プログラムの質問です。 実数をxを読み込み次の計算をするCプログラムを作成し、そのプログラムリ

C言語プログラムの質問です。
実数をxを読み込み次の計算をするCプログラムを作成し、そのプログラムリストを記しなさい。
2sin(x)cos(x) および sin(2x)
次にこのプログラムを用いて、x=0.785を計算しなさい。

画像のプログラムを作成し、計算をしたのですが、計算結果が全て0.00000となってしまいます。
どこが間違っているか教えてください!

Aベストアンサー

scanfを以下のように変えてください。
scanf("%lf", &x);

Q構造体とポインタ

他人のコードに以下のようなものがありした。

struct coma{
char a[5]......


char *p=(char *)(&coma);

Q1
(&coma)はcoma[0]のアドレスなので

(char *)(&coma)はcoma.a[0].のアドレスの中身、すなわちcoma.a[0]ということですか?
それともpのアドレスがcoma.a[0]のアドレスということですか?

Q2
おそらく、上記の解答は後者であるとして、
char *p=coma;
ではいけないのでしょうか?

あえて上記のように書く理由は何かありますか?

Aベストアンサー

>具体的な理由を指摘していただけると幸いです。
構造体の仕様変更例
struct coma{
int id; // 仕様追加
char a[5];
float b[20];
.....
}

コーディング内で、特定の構造体メンバー(coma[0])を示す目的で
>char *p=(char *)(&coma);
の様な使い方をしている場合には、それを知らないプログラマーが、上記の
様な構造体の仕様変更をした場合、動作不良を起こします。
#(char *)で、キャスト(型変換)しているので、コンパイル事にはエラー
#にならない。

>それなりの会社に発注したものなので
たまに頭が良い人が「自分にはこんなすごいテクニックを駆使したプログ
ラムが作れるんだ!!」と言わんばかりに自慢げに作ったプログラムの中
には、並のプログラマーには十分理解できず修正・変更ができない、又は解釈
を間違えた結果、トラブルを起こす場合が有ります。
#一般的な注意点。今回分はNo2へのお礼が有ったので撤回します。

No.2の回答へのお礼
>なお、ソケット通信で受け取ったデータがpに入っていて、
>それを comaに代入するための準備コードです。
できれば、これを先に出して欲しかった...
これだと、coma構造体の先頭アドレスを、char *pに渡す意味になります。
特定の構造体メンバー(coma[0])を示す意味では有りません。
今回のソケット通信では、構造体にセットしたデータを、指定されたバイト
数(構造体サイズ)単位で、通信を行っているようです。

>具体的な理由を指摘していただけると幸いです。
構造体の仕様変更例
struct coma{
int id; // 仕様追加
char a[5];
float b[20];
.....
}

コーディング内で、特定の構造体メンバー(coma[0])を示す目的で
>char *p=(char *)(&coma);
の様な使い方をしている場合には、それを知らないプログラマーが、上記の
様な構造体の仕様変更をした場合、動作不良を起こします。
#(char *)で、キャスト(型変換)しているので、コンパイル事にはエラー
#にならない。

>それなりの会社に発注したものなので
...続きを読む

Qc言語プログラミング

2つの符号なし整数a,bを受け取りaをbで割った余りを整数で出力するプログラムを記述するにはどのようにすればいいですか?
キーワード: 剰余演算子

Aベストアンサー

c=a%b

Qこの答えって4じゃないんですか?

この答えって4じゃないんですか?

Aベストアンサー

i を 1から5まで変化させてくりかえす。

i ÷ 2 の余りが 0のとき、sum に i を足す。

なので、
i = 2,
i = 4
のときに加算されるから、6


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング