変数の初期化とゴミ値の生成
2496 ワード
白準アルゴリズム問題を解く際,初期化変数がなくて生じる問題に初めて遭遇した.
問題の標準アルゴリズム問題
https://www.acmicpc.net/problem/1546
[初めて作成したコード]
printf("%d",max);
この部分は最初に入力した科目の最高点数出力で、私の意図通りに行ったかどうかを確認する部分で、構築を経て、話にならない数字が出てきました.
607080点を入力値とすると、不可解に最大値4654981616が得られる.
他の人がどうしたのか考えてみると、コード自体が似ていることがわかりましたが、変数を初めて宣言したときに初期値を指定しました.
c言語では、変数を宣言すると、メモリ内のゴミ値が変数宣言とともに意味のない値になる可能性があります.
変数を宣言するときに他のプログラムに割り当てられたメモリ領域が使用されている場合、プログラムが終了しても実際のメモリに格納されているデータは保持され、変数を初期化しないと発生します.
C言語で配列を宣言するとき、値を初期化しないとエラーが発生しますが、私が初めて接触したjavaは、無知として宣言して初期化する必要はありません.それは自分でゼロに初期化したので、私は知らないようです.
後で異常値が発生した場合は、変数が初期化されているかどうかを確認する必要があります.
問題の標準アルゴリズム問題
https://www.acmicpc.net/problem/1546
[初めて作成したコード]
#include <stdio.h>
int main(void){
double num, max, sum, input[1000];
scanf("%lf",&num);
for(int i=0; i<num; i++){
scanf("%lf",&input[i]);
if(input[i]>max)
max=input[i];
printf("%d",max); //*****
}
for(int j=0; j<num; j++){
input[j]=input[j]/max*100;
sum+=input[j];
}
printf("%.2lf\n",sum/num);
return 0;
}
こちらです.printf("%d",max);
この部分は最初に入力した科目の最高点数出力で、私の意図通りに行ったかどうかを確認する部分で、構築を経て、話にならない数字が出てきました.
607080点を入力値とすると、不可解に最大値4654981616が得られる.
他の人がどうしたのか考えてみると、コード自体が似ていることがわかりましたが、変数を初めて宣言したときに初期値を指定しました.
#include <stdio.h>
int main(void){
double num=0, max=0, sum=0;
double input[1000];
scanf("%lf",&num);
for(int i=0; i<num; i++){
scanf("%lf",&input[i]);
if(input[i]>max)
max=input[i];
}
for(int j=0; j<num; j++){
input[j]=input[j]/max*100;
sum+=input[j];
}
printf("%.2lf\n",sum/num);
return 0;
}
こんなにしょっぱいと値段は普通ですか?c言語では、変数を宣言すると、メモリ内のゴミ値が変数宣言とともに意味のない値になる可能性があります.
変数を宣言するときに他のプログラムに割り当てられたメモリ領域が使用されている場合、プログラムが終了しても実際のメモリに格納されているデータは保持され、変数を初期化しないと発生します.
C言語で配列を宣言するとき、値を初期化しないとエラーが発生しますが、私が初めて接触したjavaは、無知として宣言して初期化する必要はありません.それは自分でゼロに初期化したので、私は知らないようです.
後で異常値が発生した場合は、変数が初期化されているかどうかを確認する必要があります.
Reference
この問題について(変数の初期化とゴミ値の生成), 我々は、より多くの情報をここで見つけました https://velog.io/@astar5327/변수-초기화와-쓰레기값-발생テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol