C 言語の入出力で発生する一般的な問題 (超詳細!!!)

目次

I.はじめに

第二に、丸め方法

    (1) intキャストを使う

     (2) floor 関数を使用して切り捨て

    (3) ceil 関数を使用して切り上げる

次に、値が丸められます

(1) 丸めには round 関数を使用する

(2) 丸めには rint 関数を使用する

(3) 主な用途

3. %d、%0xd、%-xd の出力形式を C で出力する

4.除算:剰余除算%、整数除算/

5.連続出力

六、相互励まし


I.はじめに

    みなさんこんにちは、C言語初心者ですが、いつもの問題解決で私と同じようなトラブルに遭遇することはありませんか? 問題のコードはだいたい完成しましたが、出力するといつも問題と同じです. 出力例の形式が異なり、問題の失敗につながります。この問題を解決するために、数値丸め問題、数値丸め、出力 %d 形式、除算 %、除算 / 、連続入力、その他の知識ポイントをまとめました。

第二に、丸め方法

    (1) intキャストを使う

    出力結果に小数が含まれる場合は、 int を使用して整数の後の小数点を強制的に削除できます。コードは以下のように表示されます:

#include <stdio.h>
int main()
{
	int c = 1.2;
	c = (int)c;  // 强制转换
	float  a,b;
	a = 1.2f;    // 1.2f 这里的 f 是保证数值为float型,防止默认为 double型
	b = (int)a;  // 强制转换
	printf("%f\n", a);  // 1.200000
	printf("%f\n", b);  // 1.000000
	printf("%d\n", c);  // 1
	return 0;
}

     (2) floor 関数を使用して切り捨て

    出力結果に小数が含まれる場合は、関数 floor を使用して、 number より小さい最大の整数を取得できますコード次のとおりです。

// 注意:在使用floor函数时,需要加上头文件 #include <math.h>
#include <stdio.h>
#include  <math.h>
int main()
{
	int a ;
	float c = -1.2f;
	float b=1.2f; 
	int d = -1.2;  // 注意: d 的类型为int型  已经被int 强行转化为 -1
	a = floor(1.3);  // 函数向下取整,得到比 a 小的最大整数
	b = floor(b);  // 函数向下取整,得到比 b 小的最大整数
	c = floor(c);  // 函数向下取整,得到比 c 小的最大整数
	d = floor(d);  // 已经被 int 强行转化为 -1
	printf("%d\n",a);  //  1
	printf("%f\n", b); //  1.000000
	printf("%f\n", c); //  -2.000000
	printf("%d\n", d); //  -1
	return 0;
}

    (3) ceil 関数を使用して切り上げる

    出力結果に小数が含まれる場合、  ceil 関数を使用して数値よりも大きい最小の整数を取得できます。コードは次のとおりです。

// 注意:在使用ceil函数时,需要加上头文件 #include <math.h>
#include <stdio.h>
#include <math.h>
int main()
{
	int a;
	int b;
	float c = 1.2;
	a = ceil(1.3);   // 函数向上取整,得到比 a 大的最小整数
	b = ceil(-1.1);  // 函数向上取整,得到比 b 大的最小整数
	c = ceil(c);     // 函数向上取整,得到比 c 大的最小整数
	printf("%d\n", a); // 2
	printf("%d\n", b); // -1
	printf("%f\n", c); // 2.000000
	return 0;
}

次に、値が丸められます

(1) 丸めには round 関数を使用する

    If the title requires, the final output is rounded , and the round function can be used at this time.注: round 関数は整数の丸め専用であり、浮動小数点型には使用できません。ルール: (±)0.5 の場合、絶対値が小さい方向に進むと、コードは次のようになります。

// 注意:在使用round函数时,需要加上头文件 #include <math.h>
#include <stdio.h>
#include <math.h>
int main()
{
	int a,b,c;
	a = round(3.6);  // 进行四舍五入
	b = round(2.4);  // 进行四舍五入
	c = round(1.46); // 进行四舍五入
	printf("%d\n", b);  // 4
	printf("%d\n", a);  // 2
	printf("%d\n", c);  // 1  发现round函数只是针对整数的四舍五入,不针对浮点数
	return 0;
}

    (2) 丸めには rint 関数を使用する

    If the topic requires, the final output result is rounded , and the rint function can be used at this time.注: rint 関数は浮動小数点の丸め専用であり、整数には使用できません。ルール: (±)0.5 の場合、絶対値が小さい方向に進むと、コードは次のようになります。


// 注意:在使用rint函数时,需要加上头文件 #include <math.h>
#include <stdio.h>
#include <math.h>
int main()
{
	double a, b;
	a = rint(3.45689412);
	b = rint(3.65);
	printf("%lf\n", a);  // 3.000000
	printf("%lf\n", b);  // 4.000000
	return 0;
}

 (3) 主な用途

    この時点で, 誰もが間違いなく質問をします. 上に示した関数は整数のみを丸めることができます. 小数で正確にする必要がある場合は, 小数点以下3桁に丸める必要があります. 次に, 答えを明らかにします.

例:このとき、小数点以下3桁を確保する必要があり、四捨五入の規則に従って小数点以下4桁を四捨五入し、その数を1000倍に拡張し、小数点以下4桁を1桁目と呼びます。新しい数値であり、変換を強制する前に 0.5 を追加できます。0.5を加算する理由は、この小数点以下の値が5より大きい場合、0.5を加算するとキャリーの効果が実現でき、0.5未満の場合はキャリーの効果が実現しないためです。このようにして、小数点以下の丸めを実現できます。次に、この値に対して必須の変換を実行し、1000.0 を適用します (1000.0 でなければならないことを覚えておいてください。そうしないと、暗黙的な変換が行われます)。%0.3f を使用して、出力時に小数点以下 3 桁を達成します。

コードは以下のように表示されます:

#include <stdio.h>
int main()
{
	float a=3.1415;
	// 注意 整除两边的数必须是同一个类型
	a = (int)(a * 1000 + 0.5) / 1000.0;  //此时都是浮点数类型
	printf("%.3f\n", a);  // 3.142
	return 0;
}

3. %d、%0xd、%-xd の出力形式を C で出力する

    1. %d は左右を揃えて、変数の数値をすべて出力します。

    2. %xd は左右に配置され、幅は X で、スペースは左側に埋められます。

    3. %xd、変数の実際の幅が x より大きい場合、変数のすべての数値を出力します

    4. %xd は左右に配置され、幅は x、左は 0 で埋められます。 

    コードは以下のように表示されます:

#include <stdio.h>
int main()
{
	int a = 1234;
	// %d左右对齐,输出变量所有的数字
	printf("%d\n", a);  // (1234)
	// %xd左右对齐,宽度为X,左边填充空格
	printf("%6d\n", a); // (  1234)
	// %xd,当变量的实际宽度大于x时,输出变量所有的数字
	printf("%3d\n", a); // (1234)
	// %xd左右对齐,宽度为x,左边填充 0 
	printf("%05d\n", a);// (01234)
	return 0;
}

4.除算:剰余除算%、整数除算/

    1. 剰余 % と整数 / の両辺は、同じ型の値を保持する必要があります (整数として保持する方がよい)。

    2. 剰余除算の結果は、2 つの数値の剰余です。コードは次のとおりです。

#include <stdio.h>
int main()
{
	int a = 2;
	int b = 3;
	printf("%d\n", b % a); // 3%2=1......1(余1)  结果为1
	return 0;
}

    3. 整数除算の結果は、2 つの数値の除算の商です。コードは次のとおりです。

#include <stdio.h>
int main()
{
	int a = 4;
	int b = 8;
	printf("%d\n", b / a); // 8/4......0(余0)  结果为2
	return 0;
}

    4. 整数除算と剰余除算の適用: 一般に、より大きな数に使用され、各桁を見つけるために、コードは次のようになります。

#include <stdio.h>
int main()
{
	int x = 12345;
	int a, b, c, d, e;
	e = x % 10;   // 求最后一位
	d = x / 10 % 10;  //(x/10%10)表示丢掉最后一位,求倒数第二位
	c = x / 100 % 10; //(x/100%10)表示丢掉后两位,求倒数第三位
	b = x / 1000 % 10;// (x/1000%10)表示丢掉后三位,求倒数第四位 
	a = x / 10000;    // (x/10000)表示丢掉后四位,求第一位
	printf("%d %d %d %d %d", a, b, c, d, e);  // 1  2  3  4  5
	return 0;
}

5.連続出力

    質問をブラッシングしていると、質問の要件、データの継続的な出力、およびコードは次のようになります。

#include <stdio.h>
int main()
{
	int x;
	while (scanf("%d", &x) != EOF)  // 连续输出方式
	{
		printf("%d\n", x);
	}
	return 0;
}

参考記事:  http://t.csdn.cn/iEm1p

六、相互励まし

     これは C 言語出力でよくある問題のまとめです. 不足やわからないことがあれば, コメント欄で議論できます. 後ほど, 文字列出力で遭遇する問題のまとめを更新し続けます.引き続きご注目ください!

 

おすすめ

転載: blog.csdn.net/weixin_45031801/article/details/126919219
おすすめ