初识C语言<4>

Posted 英雄哪里出来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识C语言<4>相关的知识,希望对你有一定的参考价值。

一、前言

  本文作者是从 2007 年开始学 C语言 的,不久又接触了C++,基本就是 C/C++ 技术栈写了 14 年的样子,不算精通,但也算差强人意。著有《夜深人静写算法》系列,且承诺会持续更新,直到所有算法都学完。主要专攻 高中 OI 、大学 ACM、 职场 LeetCode 的全领域算法。由于文章中采用 C/C++ 的语法,于是就有不少读者朋友反馈语言层面就被劝退了,更何况是算法。
  于是,2021 年 06 月 12 日,《光天化日学C语言》 应运而生。并且作者在此承诺,这个系列全部文章均免费且开源,主要服务于高中生、大学生以及职场上想入坑C语言的志同道合之人,希望能给祖国引入更多编程方面的人才,并且让自己的青春不留遗憾!
  这一章要讲的内容是:如何将整数、浮点数、字符、字符串按照给定的格式输出到屏幕上。


点击我跳转末尾 获取 粉丝专属 《算法和数据结构》源码,以及获取博主的联系方式。

二、人物简介

  • 第一位登场的就是今后会一直教我们C语言的老师 —— 光天。
  • 第二位登场的则是今后会和大家一起学习C语言的没什么资质的小白程序猿 —— 化日。

三、概念简介

1、输出的含义

2、标准输出

在C语言中,有三个函数可以用来在屏幕上输出数据,它们分别是:
  1)puts() :只能输出字符串,并且输出结束后会自动换行;
  2)putchar() :只能输出单个字符;
  3)printf():可以输出各种类型的数据,作为最灵活、最复杂、最常用的输出函数,可以完全替代全面两者,所以是必须掌握的,今天我们就来全面了解一下这个函数。

3、格式化

  • 我们在进行输出的时候,对于小数而言,可能需要输出小数点后一位,亦或是两位,这个计算机自己是不知道规则的,需要写代码的人告诉它,这个告诉它如何输出的过程就被称为格式化。

四、格式化输出

  • printf前几个章节都有提及,这个函数的命名含义是:Print(打印)Format (格式) ,即 格式化输出。

1、数据类型格式化

1)整数

#include <stdio.h>
int main()
{
    int a = 520;
    long long b = 1314;
	printf("a is %d, b is %lld!\\n", a, b);
	return 0;
}
  • 对于int而言,我们利用%d将要输出的内容进行格式化,然后输出,简单的理解就是把%d替换为对应的变量,%lld用于对long long类型的变量进行格式化,所以这段代码的输出为:
a is 520, b is 1314!

2)浮点数

#include <stdio.h>
int main()
{
	float f = 1.2345;
	double df = 123.45;
	printf("f is %.3f, df is %.0lf\\n", f, df);
	return 0;
}
  • 对于浮点数而言,我们利用%f来对单精度浮点数float进行格式化;用%lf来对双精度浮点数进行格式化,并且用.加 “数字” 来代表要输出的数精确到小数点后几位,这段代码的输出为:
f is 1.235, df is 123

  • 另外,单精度 和 双精度 的区别就是双精度的精度更高一点,也就是能够表示的小数的范围更加精准,这个会在介绍浮点数的存储方式时详细介绍。

3)字符

#include <stdio.h>
int main()
{
    char ch = 'A';
    printf("%c\\n", ch);
	return 0;
}
  • 对于字符而言,我们利用%c来进行格式化;C语言中的字符是用单引号引起来的,当然,字符这个概念扯得太远,会单独开一个章节来讲,具体可以参考 ASCII 码。
  • 顺便我们来解释一下一直出现但是我闭口不提的换行符\\n,这个符号是一个转义符,它代表的不是两个字符(反斜杠\\和字母n),而是换行的意思;
  • 这段代码的输出就是一个字符 A;
A
  • 我们通过一个例题来理解这个换行符的含义;

【例题1】第1行输出1个1,第2行输出2个2,第3行输出3个3,第4行输出4个4。

#include <stdio.h>
int main()
{
    printf("1\\n");
    printf("22\\n");
    printf("333\\n");
    printf("4444\\n");
	return 0;
}
  • 我们也可以用一条语句解决,如下:
#include <stdio.h>
int main()
{
    printf("1\\n22\\n333\\n4444\\n");
	return 0;
}

4)字符串

  • 字符串,是由多个字符组合而成,用双引号引起来,这一章我不打算讲得太细,只需要知道用%s进行格式化的即可,代码如下:
#include <stdio.h>
int main()
{
    char str[100] = "I love you!";
    printf("%s\\n", str);
	return 0;
}
  • 这段代码,聪明的你应该很容易看懂啦!输出的就是:
I love you!

  • 作者:我了个擦,字体颜色都变了……

2、对齐格式化

  • 我们发现,上文中所有的格式化,都有一个%和一个字母,事实上,在百分号和字母之间,还有一些其它的内容。

主要包含如下内容:
  1)负号:如果有,则按照左对齐输出;
  2)数字:指定字段最小宽度,如果不足则用空格填充;
  3)小数点:用与将最小字段宽度和精度分开;
  4)精度:用于指定字符串重要打印的而最大字符数、浮点数小数点后的位数、整型最小输出的数字数目;

【例题2】给定如下一段代码,求它的输出内容。

#include <stdio.h>
int main()
{
    double x = 520.1314;
	int y = 520;
	
    printf("[%10.5lf]\\n", x);
	printf("[%-10.5lf]\\n", x);
	
	
	printf("[%10.8d]\\n", y);
	printf("[%-10.8d]\\n", y);

    return 0;
}

  • 输出答案如下:
[ 520.13140]
[520.13140 ]
[  00000520]
[00000520  ]
  • 我们发现,首先需要看小数点后面的部分,将要输出的内容实际要输出多少的长度确定下来,然后再看字段最小宽度,最后再来看左对齐还是右对齐。

  • 然后,我们来看看把不同类型的变量组合起来是什么效果;
#include <stdio.h>
int main()
{
    char name[100] = "Zhou";
    int old = 18;
    double meters = 1.7;
    char spostfix = 's';
    printf("My name is %s, %d years old, %.2lf meter%c.\\n", 
        name, old, meters, spostfix);
    return 0;
}
  • 它的输出结果如下:
My name is Zhou, 18 years old, 1.70 meters.


  • 通过这一章,我们学会了 通过格式化的方式输出 整数、浮点数、字符、字符串,以及对数据进行对齐,希望对你有帮助哦 ~ 祝大家早日成为 C 语言大神!

课后习题


🔥让天下没有难学的算法🔥

C语言免费动漫教程,和我一起打卡!
🌞《光天化日学C语言》🌞

入门级C语言真题汇总
🧡《C语言入门100例》🧡

几张动图学会一种数据结构
🌳《画解数据结构》🌳

组团学习,抱团生长
🌌《算法入门指引》🌌

竞赛选手金典图文教程
💜《夜深人静写算法》💜

粉丝专属福利

语言入门《光天化日学C语言》(示例代码)
语言训练《C语言入门100例》试用版
数据结构《画解数据结构》源码
算法入门《算法入门》指引
算法进阶《夜深人静写算法》算法模板

  

👇🏻 验证码 可通过搜索下方 公众号 获取👇🏻

以上是关于初识C语言<4>的主要内容,如果未能解决你的问题,请参考以下文章

初识Python

初识C语言==>扫雷游戏

初识C语言<4>

打卡:4.16和4.17 C语言篇 -初识C语言 - 操作符

小杨带你玩转C语言(入门篇)初识C语言(上)

打卡:4.20 C语言篇 -初识C语言 - (10)关键字typedefstatic