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

目录
  • 一、前言
  • 二、取整的方法
    • (1)使用 int 强制转换
    • (2)使用floor函数向下取整
    • (3)使用ceil函数向上取整
  • 三、数值四舍五入
    • (1)使用round函数进行四舍五入
    • (2)使用rint函数进行四舍五入
    • (3)重点应用
  • 四、在C中输出%d、%0xd、%-xd的输出格式
  • 五、除法:余除 % 、整除  /
  • 五、连续输出

一、前言

大家好,我是一个初学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语言输入输出内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 一起来学习C语言的输入和输出

    目录 一.scanf() 和 printf() 函数 实例 二.getchar() 和 putchar() 函数 实例1 实例2 三.gets() 和 puts() 函数 实例 总结 一.scanf() 和 printf() 函数 实例 #include <stdio.h> int main() { char a[100]; printf("Please enter: "); scanf("%s", a); printf("\nYou ente

  • C语言数据输入与输出实例详解

    C语言数据输入与输出实例详解 1 概论 C语言提供了跨平台的数据输入输出函数scanf()和printf()函数,它们可以按照指定的格式来解析常见的数据类型,例如整数,浮点数,字符和字符串等等.数据输入的来源可以是文件,控制台以及网络,而输出的终端可以是控制台,文件甚至是网页. 2 数据输出 从第一个c语言程序中,就使用了跨平台的库函数printf实现将一段文字输出到控制台,而实际上,printf()不仅可以将数据按照指定的格式输出到控制台,还可以是网页或者是指定的文件中,printf()函数执

  • C语言格式化输入输出函数详解

    一:格式输出函数printf() 1.调用形式一般为:printf("格式化控制字符串",输出表列): 2.格式化控制字符串用于指定输出格式,它有三种形式: 1.格式说明符:规定了相应输出表列内容的输出格式,以%打头,如%d.%o等 2.转义字符:用来输出转义字符所代表的控制代码或者特殊字符,比如常用的'\n'.'\t' 3.普通字符:需要原样输出的字符. 3.输出表列为若干需要输出的数据项,它与格式说明符在数量和类型上一一对应: 4.格式字符m指定输出数据所占宽度,n对实数表示输出n

  • C语言文字艺术之数据输入输出

    目录 语句 字符数据输入输出 字符数据输出 字符数据输入 字符串输入输出 字符串输出函数 字符串输入函数 格式输出函数 格式输入函数 顺序程序设计应用 语句 C语言的语句用来向计算机系统发出操作指令.一条语句编写完成经过编译后产生若干条机器指令.实际程序中包含若干条语句,因此语句的作用就是完成一定的操作任务. 字符数据输入输出 字符数据输出 字符数据输出使用的是putchar函数,作用是向显示设备输出一个字符.该函数的定义为: int putchar( int ch ); 使用时要添加头文件st

  • C语言中输入输出流与缓冲区的深入讲解

    前言 缓冲区 又称为缓存,它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区. 缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区. 原理介绍: 当调用输入函数scanf()时,输入函数会将我们输入的数字输入到输入缓冲区, 而当我们的输入缓冲区有内容时,再次输入将不会被执行, 而是直接跳过执行,将输入缓冲区的内容赋给变量; 1.为什么要引入缓冲区 例如,我们从磁盘里取信息,我们先把读出的数据放在缓

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

    目录 一.前言 二.取整的方法 (1)使用 int 强制转换 (2)使用floor函数向下取整 (3)使用ceil函数向上取整 三.数值四舍五入 (1)使用round函数进行四舍五入 (2)使用rint函数进行四舍五入 (3)重点应用 四.在C中输出%d.%0xd.%-xd的输出格式 五.除法:余除 % .整除  / 五.连续输出 一.前言 大家好,我是一个初学C语言的小菜狗,是否大家在平时的做题中会遇到和我一样的烦恼,题目的代码已经基本完成,但是在输出时候,总是和题目给出的样例输出格式不同 ,

  • mysql安装时出现各种常见问题的解决方法

    小编为大家整理许多mysql安装时出现各种常见问题的解决方法,供大家参考,具体内容如下 问题一: 当各位在安装.重装时出现could not start the service mysql error:0 原因: 卸载mysql时并没有完全删除相关文件和服务,需要手动清除. 安装到最后一步execute时不能启动服务的解决方法: 首先,在管理工具->服务里面将MySQL的服务给停止(有的是没有安装成功,有这个服务,但是已经停止了的),win+R->cmd,打开命令提示符窗口,输入命令:sc d

  • C语言进阶输入输出重定向与fopen函数使用示例详解

    目录 正片开始 输入输出重定向 fopen函数 正片开始 大多数情况下,我们所熟知的输入输出都是标准I/O(标准输入输出),也就是我们在写代码时会直接从键盘读取,从屏幕输出.但是当我们涉及到数据统计或者多组未定义内容输入时,我们的程序就会出现一些小问题 int n = 0; while(scanf("%d",&n)==1) 按照常理来说,这里 scanf 的返回值是成功输入的数的个数,输入一但结束,scanf 函数就无法继续读取 n,返回0,我们测试一下,输入“1,2,3,4,

  • 易语言破解软件时的按钮断点事件处理方法

    按钮事件断点时 断在时钟的处理方法,新人看看比较好,按钮事件断点断在时钟是很常见的事情.(主要针对易语言程序来讲解) 1.首先载入程序 2.按ALT+M,搜索FF 55 FC 5F 5E 89 5D F4(这个是易语言按钮事件特征码) 3.会弹出这个 4.然后按这个搜索418E5D 5. 在这下段,3秒内会断在时钟,然后在堆栈窗口向上翻,出现"时钟",在时钟后面第二个那里按"反汇编窗口中跟随", 6.反汇编窗口就会来到这里,然后把开头第一行给retn了,如图所示 7

  • 易语言保存文件时通用对话框给该文件加上指定的后缀名

    默认文件后缀属性 所属对象:通用对话框  操作系统支持:Windows,数据类型:文本型: 指定当用户没有输入文件的后缀名称时所自动使用的文件后缀名称. 例程 说明 在类型为保存文件时,设置默认文件后缀,如果文件名没有指定后缀名,通用对话框就会给该文件名加上指定的默认后缀名. 运行结果: 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持.如果你想了解更多相关内容请查看下面相关链接

  • 解决python调用matlab时的一些常见问题

    为什么要用python调用matlab? 我自己的有些数据结构涉及到hash查找,在python中key是tuple形式,在matlab中支持hash查找的数据结构只有containers.Map(),并不能支持cell作为key. 尝试过把向量转为string,但是num2str和str2mat的效率不高,containers.Map()的查找耗时也非常的长,所以只好作罢. 后来发现可以用python通过matlab的API直接调用matlab的函数参与运算,朋友的经验说矩阵运算都交给matl

  • C语言ASM汇编内嵌语法详解

    3 GCC Inline ASM GCC 支持在C/C++代码中嵌入汇编代码,这些汇编代码被称作GCC Inline ASM--GCC内联汇编.这是一个非常有用的功能,有利于我们将一些C/C++语法无法表达的指令直接潜入C/C++代码中,另外也允许我们直接写 C/C++代码中使用汇编编写简洁高效的代码. 1.基本内联汇编 GCC中基本的内联汇编非常易懂,我们先来看两个简单的例子: __asm__("movl %esp,%eax"); // 看起来很熟悉吧! 或者是 __asm__(&q

  • C语言中关于scanf读取缓存区的问题

    目录 前言 scanf函数的定义 功能:执行格式化输入 总结 解决方法 前言 在牛客做了很多坑爹的题,明明代码没问题但是就退无法AC,看了很多题解之后,发现是scanf读取缓存区,在输入输出时出现了问题 于是写个博客总结一下 首先我们要了解什么是 scanf 函数 根据 cplusplus.com的解释 scanf函数的定义 scanf()函数是通用 终端格式化输入 函数,它从标准输入设备(键盘) 读取输入的信息.可以读入任何固有类型的数据并自动把数值变换成适当的机内格式. 其调用格式为: sc

  • 盘点分析C语言中少见却强大的字符串函数

    目录 正片开始 字符串函数 strcpy strcat strcmp strstr strtok strerror 正片开始 字符串函数 首先神魔是字符串函数? 指的是编程语言中用来进行字符串处理的函数,如C,pascal,Visual以及LotusScript中进行字符串拷贝,计算长度,字符查找等的函数. 功能:把src所指由NUL结束的字符串复制到dest所指的 数组 中. 返回指向dest结尾处字符 (NUL)的 指针 . 像之前我写到过的 strcpy,strcat,strcmp 这些函

随机推荐