C言語 自然数x,yの合計値を求めるプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
はなお
記事: 1
登録日時: 1年前

C言語 自然数x,yの合計値を求めるプログラム

#1

投稿記事 by はなお » 1年前

C言語初心者です。

自然数を 2 つ(x, y )入力してx < y であれば x から y までの合計値,
x < y でなければ y から x までの合計値を求めるプログラムを作ろうとしています。

main 文は以下のようにしました。

コード:

int main(void){
 int x, y;
 printf("数値を入力してください:");
 scanf("%d", &x);
 printf("数値を入力してください:");
 scanf("%d", &y);
 printf("%d から%d までの和は%d です¥n", x, y, mysum(x,y));
}
関数は mysum を定義しようと思いますが、この後どうすればいいか教えていただけますか。。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: C言語 自然数x,yの合計値を求めるプログラム

#2

投稿記事 by みけCAT » 1年前

関数 mysum を定義すればいいと思います。
  • 関数 mysum の定義を、関数 main の定義があるファイルの関数 main の定義より前の部分に書く
  • 関数 mysum の定義を、関数 main の定義があるファイルの関数 main の定義より後ろの部分に書き、同じファイルの関数 main の定義より前の部分に関数 mysum の宣言(プロトタイプ宣言)を書く
  • 関数 mysum の定義を、関数 main の定義があるファイルとは別のソースファイルに書き、別途関数 mysum の宣言(プロトタイプ宣言)のみが書かれたヘッダファイルを作成し、関数 main の定義があるファイルからこのヘッダファイルを #include する
などの方法が考えられます。
オフトピック
はなお さんが書きました:
1年前

コード:

 printf("%d から%d までの和は%d です¥n", x, y, mysum(x,y));
}
最後に改行ではなく、文字 U+00A5 と n を出力する仕様で本当にいいのかなあ?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: C言語 自然数x,yの合計値を求めるプログラム

#3

投稿記事 by みけCAT » 1年前

関数 mysum を実装する前に、まずテストケース (入力とそれに対する期待する出力の組) を作っておく、という方法もあります。
例えば

入力1

コード:

5 5
出力1

コード:

数値を入力してください:数値を入力してください:5 から5 までの和は5 です¥n
入力2

コード:

1 5
出力2

コード:

数値を入力してください:数値を入力してください:1 から5 までの和は15 です¥n
入力3

コード:

10 5
出力3

コード:

数値を入力してください:数値を入力してください:10 から5 までの和は45 です¥n
入力4

コード:

2147483647 2147483647
出力4

コード:

数値を入力してください:数値を入力してください:2147483647 から2147483647 までの和は2147483647 です¥n
のような感じかな。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 13年前

Re: C言語 自然数x,yの合計値を求めるプログラム

#4

投稿記事 by box » 1年前

お好きなように改変してかまいません。
なお、main文ではなくてmain関数ね。

コード:

#include <stdio.h>

void inputData(int *a, int *b)
{
    printf("1個目の自然数を入力:"), scanf("%d", a);
    printf("2個目の自然数を入力:"), scanf("%d", b);
}

int mysum(int *x, int *y)
{
    int a = *x, b = *y, t, i, sum = 0;

    if (*x >= *y) {
        t = a, a = b, b = t;
    }
    for (i = a; i <= b; i++) {
        sum += i;
    }
    *x = a, *y = b;
    return sum;
}

int main(void)
{
    int x, y, s;

    inputData(&x, &y);
    s = mysum(&x, &y);
    printf("%dから%dまでの和は%d\n", x, y, s);
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 13年前

Re: C言語 自然数x,yの合計値を求めるプログラム

#5

投稿記事 by box » 1年前

a, bとかいう中間的な変数はいらんかったね。

コード:

#include <stdio.h>

void inputData(int *a, int *b)
{
    printf("1個目の自然数を入力:"), scanf("%d", a);
    printf("2個目の自然数を入力:"), scanf("%d", b);
}

int mysum(int *x, int *y)
{
    int t, i, sum = 0;

    if (*x >= *y) {
        t = *x, *x = *y, *y = t;
    }
    for (i = *x; i <= *y; i++) {
        sum += i;
    }
    return sum;
}

int main(void)
{
    int x, y, s;

    inputData(&x, &y);
    s = mysum(&x, &y);
    printf("%dから%dまでの和は%d\n", x, y, s);
    return 0;
}
これで十分でしょう。たぶん。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

naohiro
記事: 8
登録日時: 2年前

Re: C言語 自然数x,yの合計値を求めるプログラム

#6

投稿記事 by naohiro » 1年前

ChatGPTに以下のようなものを

コード:

#命令書:
あなたは、プログラマーです。
以下の制約条件と入力文をもとに、C11のプログラムを出力してください。

#制約条件:
・関数名とクラス名はキャラメルケースとする。
・関数名は処理内容がわかりやすい名称にする。
・エラー処理や例外処理をする。
・条件分岐もコメントをする。
・関数の中身の処理をコメントする。
・#defineは、大文字で始まるスネークケースとする。
・struct、classのメンバーは m_ で始まるとする。
・処理内容をDoxygen方式でコメントを書く。

#入力文:
自然数を 2 つ(x, y )入力してx < y であれば x から y までの合計値,
x < y でなければ y から x までの合計値を求めるプログラムを作ろうとしています。

#出力文:
以下は、C11のプログラムの例です。入力された2つの自然数x, yがx < yであれば、xからyまでの合計値を計算します。そうでなければ、yからxまでの合計値を計算します。

コード:

/**
 * @brief 2つの自然数の合計値を計算する関数
 * 
 * @param[in] x 自然数1
 * @param[in] y 自然数2
 * @return xからyまでの合計値、またはyからxまでの合計値
 */
int CalculateSum(int x, int y)
{
    // xがyより大きい場合、xとyを入れ替える
    if (x > y) {
        int temp = x;
        x = y;
        y = temp;
    }

    // xからyまでの合計値、またはyからxまでの合計値を計算する
    int sum = 0;
    for (int i = x; i <= y; i++) {
        sum += i;
    }

    // 計算結果を返す
    return sum;
}

int main(void)
{
    int x, y;

    // 自然数xとyを入力する
    printf("自然数xを入力してください: ");
    if (scanf("%d", &x) != 1) {
        // 入力エラーの場合、エラーメッセージを表示して終了する
        fprintf(stderr, "入力エラー: 自然数を入力してください\n");
        return 1;
    }

    printf("自然数yを入力してください: ");
    if (scanf("%d", &y) != 1) {
        // 入力エラーの場合、エラーメッセージを表示して終了する
        fprintf(stderr, "入力エラー: 自然数を入力してください\n");
        return 1;
    }

    // x < yの場合、xからyまでの合計値を計算する
    if (x < y) {
        int sum = CalculateSum(x, y);
        printf("%dから%dまでの合計値は%dです。\n", x, y, sum);
    }
    // x >= yの場合、yからxまでの合計値を計算する
    else {
        int sum = CalculateSum(y, x);
        printf("%dから%dまでの合計値は%dです。\n", y, x, sum);
    }

    return 0;
}
以上が、自然数を2つ入力し、条件に応じてxからyまでの合計値またはyからxまでの合計値を計算するC11のプログラムの例です。

アバター
あたっしゅ
記事: 664
登録日時: 13年前
住所: 東京23区
連絡を取る:

Re: C言語 自然数x,yの合計値を求めるプログラム

#7

投稿記事 by あたっしゅ » 1年前

東上海美「
> 関数名とクラス名はキャラメルケースとする。

『キャラメルケース』でなく『キャメルケース』みみ。

https://ja.wikipedia.org/wiki/%E3%82%AD ... C%E3%82%B9
> キャメルケース(英: camel case)は、複合語をひと綴りとして、要素語の最初を大文字で
> 書き表すことをいう。\すっごーい/キャメルケースとは、大文字が「らくだのこぶ」のように
> 見えることからの命名である。例えば、「camel case」をキャメルケースで書き表すと、
> 「camelCase」(または「CamelCase」)となる。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

返信

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