関数の宣言の順番

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

関数の宣言の順番

#1

投稿記事 by 03life » 2年前

この問題についての質問です。

https://atcoder.jp/contests/abc188/tasks/abc188_b


下の二つのコードの

コード:

int = i;
の順番を変えただけで正解になりました。なぜだか解説をお願いしたいです。

最初が正解のコード、最後が不正解のコードとなります。
正解

コード:

#include <stdio.h>

int main (void)
{
    int i;
    int N;
    scanf("%d",&N);

    int a[N],b[N];
    int sum;

    for(i=0; i<N; i++) {
        scanf("%d",&a[i]);
    }

    for(i=0; i<N; i++) {
        scanf("%d",&b[i]);
    }

    for(i=0; i<N; i++) {
        sum += (a[i]*b[i]);
    }

    if(sum == 0) {
        printf("Yes\n");
    } else {
        printf("No\n");
    }

    return 0;
}
不正解

コード:

#include <stdio.h>

int main (void)
{
    int N;
    scanf("%d",&N);

    int i;
    int a[N],b[N];
    int sum;

    for(i=0; i<N; i++) {
        scanf("%d",&a[i]);
    }

    for(i=0; i<N; i++) {
        scanf("%d",&b[i]);
    }

    for(i=0; i<N; i++) {
        sum += (a[i]*b[i]);
    }

    if(sum == 0) {
        printf("Yes\n");
    } else {
        printf("No\n");
    }

    return 0;
}

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

Re: 関数の宣言の順番

#2

投稿記事 by box » 2年前

それはそのサイトがそう判定してるからでしょう。
ところで関数の宣言じゃないしwww
変数の定義w
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

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

Re: 関数の宣言の順番

#3

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

正解のコード
提出 #21978471 - AtCoder Beginner Contest 188
の提出は確認できましたが、不正解のコードの提出はすぐには確認できなそうです。
もしよろしければ不正解のコードの提出結果のURLを教えていただけますか?

なお、似たコード
提出 #21978422 - AtCoder Beginner Contest 188
はありましたが、これは配列の要素数が少ない値で固定になっており、ここの不正解のコードとは異なります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

03life
記事: 16
登録日時: 2年前

Re: 関数の宣言の順番

#4

投稿記事 by 03life » 2年前

みけCAT さんが書きました:
2年前
正解のコード
提出 #21978471 - AtCoder Beginner Contest 188
の提出は確認できましたが、不正解のコードの提出はすぐには確認できなそうです。
もしよろしければ不正解のコードの提出結果のURLを教えていただけますか?

なお、似たコード
提出 #21978422 - AtCoder Beginner Contest 188
はありましたが、これは配列の要素数が少ない値で固定になっており、ここの不正解のコードとは異なります。
https://atcoder.jp/contests/abc188/submissions/21978449
これです

03life
記事: 16
登録日時: 2年前

Re: 関数の宣言の順番

#5

投稿記事 by 03life » 2年前

box さんが書きました:
2年前
それはそのサイトがそう判定してるからでしょう。
ところで関数の宣言じゃないしwww
変数の定義w
ありがとうございます。
言葉間違いなのは僕が悪いんですけど、笑う要素がどこにあるかわからないんですが、、

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

Re: 関数の宣言の順番

#6

投稿記事 by box » 2年前

わからなければそのままでよろしいかと。
なお、変数の定義は、その関数の最初の実行文の前にすべて
済ませておくことを強くおすすめします。
そうすれば、どんな処理系でも絶対にエラーにはなりませんので。
最後に編集したユーザー box on 2021年4月24日(土) 19:17 [ 編集 1 回目 ]
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

03life
記事: 16
登録日時: 2年前

Re: 関数の宣言の順番

#7

投稿記事 by 03life » 2年前

box さんが書きました:
2年前
わからなければそのままでよろしいかと。
なお、変数の定義は、その関数の最初の実行文の前にすべて
済ませておくことを強くおすすめします。
そうすれば、絶対にエラーにはなりませんので。
なるほど。ありがとうございます!次からそうしてみます。

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

Re: 関数の宣言の順番

#8

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

03life さんが書きました:
2年前
https://atcoder.jp/contests/abc188/submissions/21978449
これです
これは別の問題に提出していますね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: 関数の宣言の順番

#9

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

box さんが書きました:
2年前
なお、変数の定義は、その関数の最初の実行文の前にすべて
済ませておくことを強くおすすめします。
そうすれば、どんな処理系でも絶対にエラーにはなりませんので。
そんなことは無いでしょう。
存在しない型(その時点で宣言されていない型)を使ったり、予約語を変数として定義しようとしたりしたら、
エラーになる可能性があります。
また、文法上正しくても、大きい配列をローカルの自動変数で確保しようとすると、
スタックオーバーフローで落ちることもあります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

03life
記事: 16
登録日時: 2年前

Re: 関数の宣言の順番

#10

投稿記事 by 03life » 2年前

みけCAT さんが書きました:
2年前
03life さんが書きました:
2年前
https://atcoder.jp/contests/abc188/submissions/21978449
これです
これは別の問題に提出していますね。
あ。。。
提出したらあってました。
本当に申し訳ないです。
ありがとうございました。。

返信

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