C語(yǔ)言在輸入輸出時(shí)遇到的常見(jiàn)問(wèn)題總結(jié)
一、前言
大家好,我是一個(gè)初學(xué)C語(yǔ)言的小菜狗,是否大家在平時(shí)的做題中會(huì)遇到和我一樣的煩惱,題目的代碼已經(jīng)基本完成,但是在輸出時(shí)候,總是和題目給出的樣例輸出格式不同 ,導(dǎo)致題目不能通過(guò)。為了解決這一煩惱,我總結(jié)了以下幾點(diǎn):數(shù)值取整問(wèn)題、數(shù)值四舍五入、輸出%d格式、除法%、除法 / 、連續(xù)輸?shù)戎R(shí)點(diǎn)。
二、取整的方法
(1)使用 int 強(qiáng)制轉(zhuǎn)換
若輸出的結(jié)果有小數(shù),可以使用 int 強(qiáng)制去掉整數(shù)后面的小數(shù)點(diǎn)。代碼如下:
#include <stdio.h> int main() { int c = 1.2; c = (int)c; // 強(qiáng)制轉(zhuǎn)換 float a,b; a = 1.2f; // 1.2f 這里的 f 是保證數(shù)值為float型,防止默認(rèn)為 double型 b = (int)a; // 強(qiáng)制轉(zhuǎn)換 printf("%f\n", a); // 1.200000 printf("%f\n", b); // 1.000000 printf("%d\n", c); // 1 return 0; }
(2)使用floor函數(shù)向下取整
若輸出的結(jié)果有小數(shù),可以使用 floor 函數(shù),可以得到比該數(shù)小的最大整數(shù),代碼如下:
// 注意:在使用floor函數(shù)時(shí),需要加上頭文件 #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 的類(lèi)型為int型 已經(jīng)被int 強(qiáng)行轉(zhuǎn)化為 -1 a = floor(1.3); // 函數(shù)向下取整,得到比 a 小的最大整數(shù) b = floor(b); // 函數(shù)向下取整,得到比 b 小的最大整數(shù) c = floor(c); // 函數(shù)向下取整,得到比 c 小的最大整數(shù) d = floor(d); // 已經(jīng)被 int 強(qiáng)行轉(zhuǎn)化為 -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函數(shù)向上取整
若輸出的結(jié)果有小數(shù),可以使用 ceil 函數(shù),可以得到比該數(shù)大的最小整數(shù),代碼如下:
// 注意:在使用ceil函數(shù)時(shí),需要加上頭文件 #include <math.h> #include <stdio.h> #include <math.h> int main() { int a; int b; float c = 1.2; a = ceil(1.3); // 函數(shù)向上取整,得到比 a 大的最小整數(shù) b = ceil(-1.1); // 函數(shù)向上取整,得到比 b 大的最小整數(shù) c = ceil(c); // 函數(shù)向上取整,得到比 c 大的最小整數(shù) printf("%d\n", a); // 2 printf("%d\n", b); // -1 printf("%f\n", c); // 2.000000 return 0; }
三、數(shù)值四舍五入
(1)使用round函數(shù)進(jìn)行四舍五入
若題目要求,最后的輸出結(jié)果進(jìn)行四舍五入,此時(shí)就可以用到round函數(shù),注意:round函數(shù)只是針對(duì)整型的四舍五入,不能對(duì)浮點(diǎn)型使用。規(guī)則:(±)0.5時(shí)往絕對(duì)值小的方向 ,代碼如下:
// 注意:在使用round函數(shù)時(shí),需要加上頭文件 #include <math.h> #include <stdio.h> #include <math.h> int main() { int a,b,c; a = round(3.6); // 進(jìn)行四舍五入 b = round(2.4); // 進(jìn)行四舍五入 c = round(1.46); // 進(jìn)行四舍五入 printf("%d\n", b); // 4 printf("%d\n", a); // 2 printf("%d\n", c); // 1 發(fā)現(xiàn)round函數(shù)只是針對(duì)整數(shù)的四舍五入,不針對(duì)浮點(diǎn)數(shù) return 0; }
(2)使用rint函數(shù)進(jìn)行四舍五入
若題目要求,最后的輸出結(jié)果進(jìn)行四舍五入,此時(shí)就可以用到rint函數(shù),注意:rint函數(shù)只是針對(duì)浮點(diǎn)型的四舍五入,不能對(duì)整型使用。規(guī)則:(±)0.5時(shí)往絕對(duì)值小的方向 ,代碼如下:
// 注意:在使用rint函數(shù)時(shí),需要加上頭文件 #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)重點(diǎn)應(yīng)用
到這里,大家肯定會(huì)提出疑問(wèn),上面演示的函數(shù),只能對(duì)整數(shù)進(jìn)行四舍五入,在小數(shù)中如果需要對(duì),小數(shù)點(diǎn)后三位進(jìn)行四舍五入呢,接下來(lái),我們來(lái)揭曉答案。
舉例:此時(shí)我們需要對(duì)一個(gè)小數(shù)保留三個(gè)小數(shù)位而第四個(gè)小數(shù)位按照四舍五入的規(guī)則進(jìn)行,我們將數(shù)字?jǐn)U大1000倍,使得第四位小數(shù)稱為新數(shù)字的第一位,然后我們可以給它加上0.5后再進(jìn)行強(qiáng)制性轉(zhuǎn)化。加0.5的原因就是: 假如這個(gè)小數(shù)位的數(shù)值大于5,加上0.5能夠?qū)崿F(xiàn)進(jìn)位的作用,倘若小于0.5,就沒(méi)有實(shí)現(xiàn)進(jìn)位的作用。如此,就能實(shí)現(xiàn)小數(shù)位的四舍五入。然后我們?cè)賹?duì)這個(gè)數(shù)值 進(jìn)行強(qiáng)制性轉(zhuǎn)化,然后再處以1000.0(記住,一定要1000.0,否則就會(huì)出現(xiàn)隱式轉(zhuǎn)化),在輸出的時(shí)候用%0.3f以實(shí)現(xiàn)保留三位小數(shù)。
代碼如下:
#include <stdio.h> int main() { float a=3.1415; // 注意 整除兩邊的數(shù)必須是同一個(gè)類(lèi)型 a = (int)(a * 1000 + 0.5) / 1000.0; //此時(shí)都是浮點(diǎn)數(shù)類(lèi)型 printf("%.3f\n", a); // 3.142 return 0; }
四、在C中輸出%d、%0xd、%-xd的輸出格式
1. %d左右對(duì)齊,輸出變量所有的數(shù)字。
2. %xd左右對(duì)齊,寬度為X,左邊填充空格
3. %xd,當(dāng)變量的實(shí)際寬度大于x時(shí),輸出變量所有的數(shù)字
4. %xd左右對(duì)齊,寬度為x,左邊填充 0
代碼如下:
#include <stdio.h> int main() { int a = 1234; // %d左右對(duì)齊,輸出變量所有的數(shù)字 printf("%d\n", a); // (1234) // %xd左右對(duì)齊,寬度為X,左邊填充空格 printf("%6d\n", a); // ( 1234) // %xd,當(dāng)變量的實(shí)際寬度大于x時(shí),輸出變量所有的數(shù)字 printf("%3d\n", a); // (1234) // %xd左右對(duì)齊,寬度為x,左邊填充 0 printf("%05d\n", a);// (01234) return 0; }
五、除法:余除 % 、整除 /
1. 余除 % 和整除 / 兩邊必須是保持同一個(gè)類(lèi)型的數(shù)值(且最好保持為整型)
2. 余除 的結(jié)果是兩個(gè)數(shù)相處的余數(shù),代碼如下:
#include <stdio.h> int main() { int a = 2; int b = 3; printf("%d\n", b % a); // 3%2=1......1(余1) 結(jié)果為1 return 0; }
3. 整除 的結(jié)果是兩個(gè)數(shù)相除的商,代碼如下:
#include <stdio.h> int main() { int a = 4; int b = 8; printf("%d\n", b / a); // 8/4......0(余0) 結(jié)果為2 return 0; }
4.整除、余除的應(yīng)用:一般用于較大數(shù),求各個(gè)位數(shù),代碼如下:
#include <stdio.h> int main() { int x = 12345; int a, b, c, d, e; e = x % 10; // 求最后一位 d = x / 10 % 10; //(x/10%10)表示丟掉最后一位,求倒數(shù)第二位 c = x / 100 % 10; //(x/100%10)表示丟掉后兩位,求倒數(shù)第三位 b = x / 1000 % 10;// (x/1000%10)表示丟掉后三位,求倒數(shù)第四位 a = x / 10000; // (x/10000)表示丟掉后四位,求第一位 printf("%d %d %d %d %d", a, b, c, d, e); // 1 2 3 4 5 return 0; }
五、連續(xù)輸出
大家在刷題的時(shí)候肯定會(huì)遇到題目要求,數(shù)據(jù)的連續(xù)輸出,其中代碼如下:
#include <stdio.h> int main() { int x; while (scanf("%d", &x) != EOF) // 連續(xù)輸出方式 { printf("%d\n", x); } return 0; }
到此這篇關(guān)于C語(yǔ)言在輸入輸出時(shí)遇到的常見(jiàn)問(wèn)題總結(jié)的文章就介紹到這了,更多相關(guān)C語(yǔ)言輸入輸出內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C/C++如何實(shí)現(xiàn)循環(huán)左移,循環(huán)右移
這篇文章主要介紹了C/C++如何實(shí)現(xiàn)循環(huán)左移,循環(huán)右移,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07基于C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易的掃雷游戲
這篇文章主要為大家詳細(xì)介紹了基于C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易的掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06C語(yǔ)言實(shí)現(xiàn)學(xué)生選課系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)學(xué)生選課系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02C語(yǔ)言實(shí)現(xiàn)排序算法之歸并排序詳解
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)排序算法之歸并排序,對(duì)歸并排序的原理及實(shí)現(xiàn)過(guò)程做了非常詳細(xì)的解讀,需要的朋友可以參考下2014-07-07淺談c++ 字符類(lèi)型總結(jié)區(qū)別wchar_t,char,WCHAR
下面小編就為大家?guī)?lái)一篇淺談c++ 字符類(lèi)型總結(jié)區(qū)別wchar_t,char,WCHAR。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03c++的virtual和override作用及說(shuō)明
這篇文章主要介紹了c++的virtual和override作用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11