日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C語言在輸入輸出時遇到的常見問題總結_C 語言

作者:sunny-ll ? 更新時間: 2022-11-13 編程語言

一、前言

大家好,我是一個初學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

欄目分類
最近更新