網站首頁 編程語言 正文
一、前言
大家好,我是一個初學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 函數,可以得到比該數小的最大整數,代碼如下:
// 注意:在使用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函數進行四舍五入
若題目要求,最后的輸出結果進行四舍五入,此時就可以用到round函數,注意: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函數進行四舍五入
若題目要求,最后的輸出結果進行四舍五入,此時就可以用到rint函數,注意: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)重點應用
到這里,大家肯定會提出疑問,上面演示的函數,只能對整數進行四舍五入,在小數中如果需要對,小數點后三位進行四舍五入呢,接下來,我們來揭曉答案。
舉例:此時我們需要對一個小數保留三個小數位而第四個小數位按照四舍五入的規則進行,我們將數字擴大1000倍,使得第四位小數稱為新數字的第一位,然后我們可以給它加上0.5后再進行強制性轉化。加0.5的原因就是: 假如這個小數位的數值大于5,加上0.5能夠實現進位的作用,倘若小于0.5,就沒有實現進位的作用。如此,就能實現小數位的四舍五入。然后我們再對這個數值 進行強制性轉化,然后再處以1000.0(記住,一定要1000.0,否則就會出現隱式轉化),在輸出的時候用%0.3f以實現保留三位小數。
代碼如下:
#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;
}
四、在C中輸出%d、%0xd、%-xd的輸出格式
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;
}
五、除法:余除 % 、整除 ?/
1. 余除 % 和整除 / 兩邊必須是保持同一個類型的數值(且最好保持為整型)
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. 整除 的結果是兩個數相除的商,代碼如下:
#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;
}
五、連續輸出
大家在刷題的時候肯定會遇到題目要求,數據的連續輸出,其中代碼如下:
#include <stdio.h>
int main()
{
int x;
while (scanf("%d", &x) != EOF) // 連續輸出方式
{
printf("%d\n", x);
}
return 0;
}
原文鏈接:https://blog.csdn.net/weixin_45031801/article/details/126919219
相關推薦
- 2022-07-25 Python文件操作實戰案例之用戶登錄_python
- 2022-03-30 .NET?Core使用EF生成數據庫出錯的解決方法_實用技巧
- 2023-02-07 Go?singleflight使用以及原理_Golang
- 2022-11-21 詳解Go語言中的內存對齊_Golang
- 2023-06-17 Queue隊列中join()與task_done()的關系及說明_python
- 2022-12-11 瀏覽器控制臺報錯Failed?to?load?module?script:解決方法_nginx
- 2022-07-19 Linux ifconfig命令配置和顯示Linux系統網卡的網絡參數
- 2022-08-19 詳解Python中位運算的簡單實現_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支