C语言在输入输出时遇到的常见问题总结

 更新时间:2022年09月22日 11:38:22   作者:sunny-ll  
大家在平时的做题中是否会遇到和我一样的烦恼,题目的代码已经基本完成,但是在输出时候,总是和题目给出的样例输出格式不同 ,导致题目不能通过。为了解决这一烦恼,我总结了以下几点,需要的可以参考一下

一、前言

大家好,我是一个初学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;
}

到此这篇关于C语言在输入输出时遇到的常见问题总结的文章就介绍到这了,更多相关C语言输入输出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++学习之算术运算符使用详解

    C++学习之算术运算符使用详解

    运算符是计算机语言提供的能对数据进行基本运算操作的功能体。而算术运算符用来对数字型数据进行数学语义上的加、减、乘、除。本文通过讲解清楚算术运算符,让大家了解使用C++运算符时应该注意的事项
    2022-06-06
  • C语言实现线索二叉树的前中后创建和遍历详解

    C语言实现线索二叉树的前中后创建和遍历详解

    这篇文章主要为大家详细介绍了C语言实现线索二叉树的前中后创建和遍历,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • 一起来看看C语言线性表的线性链表

    一起来看看C语言线性表的线性链表

    这篇文章主要为大家详细介绍了C语言线性表的线性链表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • Qt编写地图实现动态点位标注的示例代码

    Qt编写地图实现动态点位标注的示例代码

    动态点位标注是定制的一个功能模块,提供直接地图上选点设置标记点,点位信息用结构体存储,其中包括了经度、纬度、速度、时间等信息。本文将介绍实现这一功能的示例代码,需要的可以参考一下
    2022-01-01
  • C语言举例讲解转义字符的使用

    C语言举例讲解转义字符的使用

    转义字符是很多程序语言、数据格式和通信协议的形式文法的一部分。对于一个给定的字母表,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现(没有转义字符开头)时的语义。因此转义字符开头的字符序列被叫做转义序列
    2022-05-05
  • 详解socket阻塞与非阻塞,同步与异步、I/O模型

    详解socket阻塞与非阻塞,同步与异步、I/O模型

    这篇文章主要介绍了详解socket阻塞与非阻塞,同步与异步、I/O模型,socket网络编程中的同步,异步,阻塞式,非阻塞式,有何联系与区别,本文将详细讲诉。
    2016-12-12
  • 基于QT5的文件读取程序的实现

    基于QT5的文件读取程序的实现

    本文主要介绍了基于QT5的文件读取程序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • C++11 <future>中std::promise 介绍

    C++11 <future>中std::promise 介绍

    这篇文章主要介绍了C++11 <future>中std::promise 介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 排列组合总结:将结果进行输出的实现方法

    排列组合总结:将结果进行输出的实现方法

    本篇文章关于排列组合的总结,对结果进行输出做了介绍。需要的朋友参考下
    2013-05-05
  • C语言链表与单链表详解

    C语言链表与单链表详解

    链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,本章带你详细了解链表与单链表
    2022-02-02

最新评论