C语言-01_HelloWord

news2024/11/16 21:41:30

文章目录

  • 1.C程序运行机制
  • 2.HelloWorld的剖析
    • ① main()
    • ② 函数体
    • ③ printf()
    • ④ 标准库、头文件
  • 3.输出
    • 3.1 printf()标准格式
    • 3.2 占位符
    • 3.3 输出格式

1.C程序运行机制

过程1:编辑

编写C语言源程序代码,并已文件的形式存储到磁盘中。源程序文件以“.c”作为扩展名。

过程2:编译

将C语言源程序转换为目标程序(或目标文件)。如果程序没有错误,没有任何提示,就会生成一个扩展名为“.obj”的二进制文件。

C语言中的每条可执行语句经过编译后最终都将被转换成二进制的机器指令。

过程3:链接/连接

将编译形成的目标文件“.obj”和库函数及其他目录文件连接/链接,形成统一的可执行的二进制文件“.exe”。

为什么需要链接库文件呢?

因为我们的C程序中会使用 C程序库的内容,比如<stdio.h> 、<stdlib.h> 中的函数printf()、system()等,这些函数不是程序员自己写的,而是C程序库中提供的,因此需要链接。链接后,生成的.exe 文件,比obj 文件大了很多。

过程4:运行

有了可执行的exe文件,我们可以在控制台下直接运行此exe文件。

在这里插入图片描述

对修改后的xxx.c源文件需要重新编译、链接,生成新的exe文件后,再执行,才能生效。

2.HelloWorld的剖析

① main()

int main(){}
  • 每一个程序(或工程)可以定义很多函数,但有且只有一个main()函数,作为程序执行的入口,在main() 函数结尾结束整个程序的运行。
  • 空括号(), 表示 main 不接受任何参数。
  • 写在main之前的“int”称为关键字,代表数据类型是整型。它是main()的返回值类型。即在执行main()函数后会得到一个整型值(即函数值)。
  • C 语言约定: return 0,表示main()函数终止运行,且运行成功;如果返回其它非零整数,就表示运行失败。默认情况下,如果 main() 里面省略 return 0 这一行,编译器会自动加上,但是为了保持统一的代码风格,不建议省略。

② 函数体

  • 一对花括号{}定义了函数的主体,所有函数都必须以大括号开头和结尾,成对出现。
  • C程序中的函数体指的是作为该函数一部分的语句。它可以是任何操作、比如搜索、排序、打印等。
  • 每一个执行语句后面都会有一个分号";"作为语句结束的标志
  • 一行内可以写几条语句,一条语句也可写在几行上。

③ printf()

printf()函数是产生格式化输出的函数,作用是将参数文本输出到屏幕。它名字里面的 f 代表 format (格式化),表示可以指定输出文本的格式。

printf("Hello World"); //将字符串输出到控制台,行尾不换行

为了让光标移到下一行的开头,可以在输出文本的结尾,添加一个换行符 \n 。

printf("Hello World\n");

④ 标准库、头文件

printf() 是在标准库的头文件 stdio.h 中定义的。要想在程序中使用这个函数,必须在源文件头部引入这个头文件。

#include <stdio.h>

何为标准库?

程序需要用到的功能,不一定需要自己编写,C 语言可能已经自带了。程序员只要去调用这些自带的功能就可以了。

C 语言自带的所有这些功能,统称为“标准库”(standard library),包含C 内置函数、常量和头文件。

因为它们是写入标准的,到底包括哪些功能,应该怎么使用,都是规定好的,我们直接调用即可。

何为头文件?

不同的功能定义在不同的文件里,这些文件统称为“头文件”(header file)。如果系统自带某一个功能,就一定会自带描述这个功能的头文件,比如 printf() 的头文件就是系统自带的 stdio.h

头文件的后缀通常是 .h

预处理命令:#include命令

如果要使用某个功能,就必须先加载其对应的头文件,加载使用的是 #include 命令,声明在各文件模块的开头。

C语言中以 # 号开头的命令称为预处理命令。顾名思义,在编译器对当前C程序进行编译前执行预处理操作。

格式:

#include <头文件名>

举例:

#include <stdio.h>

注意:加载头文件的 #include 语句不需要分号结尾

对比写法:

#include <stdio.h> //编译系统在系统头文件所在目录搜索

#include "stdio.h"; //编译系统首先在当前的源文件目录中查找 stdio.h,找不到的话。再转向系统头文件所在目录搜索。

stdio.h是系统提供的一个文件名,stdio是standard input & output的缩写。

结论:

  • 引用系统头文件,两种形式都会可以,#include <> 效率高。
  • 引用用户头文件,只能使用 #include ""

常用的C头文件

  • stdio.h —— 定义核心输入和输出函数
    • printf()、scanf()、getchar()、putchar()
  • stdlib.h ——定义数组转换函数、伪随机网络生成器和内存分配
  • string.h ——定义字符串处理函数
  • stdint.h ——定义精确宽度的整数类型
  • math.h ——定义常用的数学函数
    • sin()、sqrt()
  • stddef.h ——定义了几个有用的类型和宏

3.输出

3.1 printf()标准格式

printf(格式控制字符串,输出列表);

printf

  • "格式控制字符串"是用双引号括起来的一个字符串。包括:
    • 普通字符:普通字符即需要在输出时原样输出的字符。
    • 占位符:由“%”和格式字符组成。这个位置可以用其它值代入。
  • "输出列表"是程序需要输出的一些数据,可以是常量、变量或表达式。用于替换占位符的位置。

注意:printf() 参数与占位符是一一对应关系。如果参数个数少于对应的占位符, printf() 可能会输出内存中的任意值。

3.2 占位符

占位符的第一个字符是 % ,第二个字符表示占位符的类型。

printf() 的占位符有许多种类,与 C 语言的数据类型相对应。

字母顺序占位符:

%a :浮点数(仅C99有效)
%A :浮点数(仅C99有效)
%c :char型数据
%d :十进制整数(int)
%e :使用科学计数法的浮点数,指数部分的 e 为小写
%E :使用科学计数法的浮点数,指数部分的 E 为大写
%i :整数,基本等同于 %d
%f :浮点数(float)
%g :6个有效数字的浮点数。整数部分一旦超过6位,就会自动转为科学计数法,指数部分的 e 为小写
%G :等同于 %g ,唯一的区别是指数部分的 E 为大写
%hd :十进制 short int 类型
%ho :八进制 short int 类型
%hx :十六进制 short int 类型
%hu :unsigned short int 类型
%ld :十进制整数(long)
%lo :八进制 long int 类型
%lx :十六进制 long int 类型
%lu :unsigned long int 类型
%lld :十进制 long long int 类型
%llo :八进制 long long int 类型
%llx :十六进制 long long int 类型
%llu :unsigned long long int 类型
%le :科学计数法表示的 long double 类型浮点数
%lf :十进制浮点数(double)
%n :已输出的字符串数量。该占位符本身不输出,只将值存储在指定变量之中
%o :八进制整数
%p :指针
%s :字符串
%u :十进制无符号整数(unsigned int)
%x :十六进制整数
%zd : size_t 类型
%% :输出一个百分号

举例:

//1. %d
int num = 10;
printf("count is %d\n",num);  //输出:count is 10  

//2. %lf 和 %f
float f = 3.1415926535f;    // 单精度浮点数
double d = 3.1415926535;  // 双精度浮点数

// 使用 %f 输出单精度浮点数
printf("Float: %f\n", f);  //Float: 3.141593
// 使用 %lf 输出双精度浮点数
printf("Double: %lf\n", d); //Double: 3.141593

// 使用 %f 输出单精度浮点数
printf("Float: %.8f\n", f);  //Float: 3.14159274
// 使用 %lf 输出双精度浮点数
printf("Double: %.8lf\n", d); //Double: 3.14159265

//3. %c
char level = 'A';
printf("this score level is:%c\n",level); //输出:this score level is:A

//4. %s
printf("%s是我最喜欢的冷门歌手.\n","孙燕姿"); //输出:孙燕姿是我最喜欢的冷门歌手.

//5.多个占位符	输出文本里面可以使用多个占位符
printf("%s有%d部手机\n", "老板", 2); //输出:老板有2部手机

3.3 输出格式

printf() 可以定制占位符的输出格式。

格式1:限定宽度

printf() 允许限定占位符的最小宽度。

printf("%5d\n", 123) // 输出为 "  123" 

说明:%5d 表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。

输出的值默认是右对齐,即输出内容前面会有空格;如果希望改成左对齐,在输出内容后面添加空格,可以在占位符的 % 的后面插入一个 - 号。

printf("%-5d\n", 123); // 输出为 "123  "

对于小数,这个限定符会限制所有数字的最小显示宽度

printf("%12f\n", 123.45); // 输出 "  123.450000"

%12f 表示输出的浮点数最少要占据12位。由于小数的默认显示精度是小数点后6位,所以123.45 输出结果的头部会添加2个空格。

格式2:总是显示正负号

默认情况下, printf() 不对正数显示 + 号,只对负数显示 - 号。如果想让正数也输出 + 号,可以在占位符的 % 后面加一个 + 。

printf("%+d\n", 11); // 输出 +11
printf("%+d\n", -11); // 输出 -11

格式3:限定小数位数

输出小数时,有时希望限定小数的位数。举例来说,希望小数点后面只保留两位,占位符可以写成 %.2f 。

printf("Number is %.2f\n", 0.8); // 输出 Number is 0.80

这种写法可以与限定宽度占位符,结合使用。

printf("%6.2f\n", 0.8); // 输出为 "  0.80"

说明:%6.2f 表示输出字符串最小宽度为6,小数位数为2。整体长度不足 6 位时,右对齐显示。

最小宽度和小数位数这两个限定值,都可以用 * 代替,通过 printf() 的参数传入。

printf("%*.*f\n", 6, 2, 0.8);
//等同于
printf("%6.2f\n", 0.8);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1711294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ai终点站,全系统商业闭环矩阵打造,帮电商、实体降70%成本,12款Ai联合深度实战

说白了&#xff0c;你之前5个人的团队&#xff0c;当团队人数不变的情况下&#xff0c;借助于ChatGPT和各种软件的结合&#xff0c;赋能电商直播带货&#xff0c;可以让之前一年销售额2.000万变成2.500万或者是3.000万&#xff0c;这就是这套课程的核心作用: 【1】系统课程从1…

ThingsBoard物联网网关在智慧城市数据采集中的应用

智慧城市由监控中心、采集网关、前端采集设备、前端感应执行器组成。 为何选用ThingsBoard作为平台 监控中心为物联网平台&#xff0c;该平台包含云计算、大数据、人工智能、物联网、GIS、云安全等主要模块&#xff0c;具备数据采集、数据交换、超大规模计算、数据分析、数据应…

SpaceX间接「颠覆」了手机?星链如何直连手机通信?

SpaceX 旗下的星链项目推出了一个极具颠覆性的技术——direct to cell&#xff08;DTC&#xff09;&#xff0c;即通过卫星直接与手机建立通信。这项技术无需对手机进行任何改装&#xff0c;大多数普通手机都可以直接接入星链的卫星网络&#xff0c;实现全球范围内的手机信号覆…

09Django项目--用户管理系统--删

对应视频链接点击直达 09Django项目--用户管理系统--删 对应视频链接点击直达删a&#xff0c;本质b&#xff0c;删除 页面相关a&#xff0c;index页面新增操作按钮b&#xff0c;ajax删除和提示c&#xff0c;完整版本 OVER&#xff0c;不会有人不会吧不会的加Q1394006513结语 一…

Excel单元格格式无法修改的原因与解决方法

Excel单元格格式无法更改可能由多种原因造成。以下是一些可能的原因及相应的解决方法&#xff1a; 单元格或工作表被保护&#xff1a; 如果单元格或工作表被设置为只读或保护状态&#xff0c;您将无法更改其中的格式。解决方法&#xff1a;取消单元格或工作表的保护。在Excel中…

【5】:三维到二维变换(模型、视图、投影)

观测变换 物体上某一点的坐标变换顺序&#xff1a;M->V->P MVP变换用来描述视图变换的任务&#xff0c;即将虚拟世界中的三维物体映射&#xff08;变换&#xff09;到二维坐标中。 1.Model Transformation 模型变换 场景中每个物体上的某一点&#xff0c;从局部坐标系…

长安杯2021年wp

背景&#xff1a; 2021年4月25日&#xff0c;上午8点左右&#xff0c;警方接到被害人金某报案&#xff0c;声称自己被敲诈数万元&#xff1b;经询问&#xff0c;昨日金某被嫌疑人诱导裸聊&#xff0c;下载了某“裸聊”软件&#xff0c;导致自己的通讯录和裸聊视频被嫌疑人获取…

Defog发布Llama-3-SQLCoder-8B,文本转SQL模型,性能比肩GPT-4,准确率超90%,消费级硬件可运行

前言 在计算语言学领域&#xff0c;将自然语言转化为可执行的SQL查询是一个重要的研究方向。这对于让那些没有编程或SQL语法知识的用户也能轻松访问数据库信息至关重要。Defog团队近日发布了基于Llama-3的SQLCoder-8B模型&#xff0c;它在文本转SQL模型领域取得了显著突破&…

PS:电子书App自动截图后合成一个PDF文档

说明&#xff1a;有的电子书App不能下载到本地&#xff0c;通过自动截图后合成一个PDF文档来解决&#xff01; 一、自动截图App 1.安装”免ROOT自动化助手“ 2.创建一个任务 3.编辑任务&#xff1a;根据电子书的操作顺序制定&#xff0c;400次就是书籍页数&#xff08;次数一…

2024年下半年自考报名信息汇总

2024年下半年自考报名信息汇总&#xff0c;报名详细流程如下图所示&#xff1a;

c#对操作系统的时间无法更新?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

Apache Pulsar 中文社区有奖问卷调查(2024 上半年度)

Apache Pulsar 中文社区有奖问卷调查&#xff08;2024 上半年度&#xff09; &#x1f4e3; &#x1f4e3; &#x1f4e3; Hi&#xff0c;Apache Pulsar 社区的小伙伴们&#xff0c;社区 2024 上半年度的有奖问卷调查来啦&#xff01; &#x1f64c; 本次调查旨在了解用户使用 …

Windows10(家庭版)中DockerDesktop(docker)的配置、安装、修改镜像源、使用

场景 Windows10中Docker的安装与遇到的那些坑: Windows10中Docker的安装与遇到的那些坑_在 docker.core.logging.httpclientexceptionintercept-CSDN博客 上面讲Docker Desktop在windows10非家庭版上的安装&#xff0c;如果是家庭版&#xff0c;则需要执行如下步骤。 注&am…

ubuntu中idea创建spark项目步骤

1.前置条件 ubuntu中已经安装idea,jdk,scala,spark 2.打开idea&#xff0c;新建&#xff0c;选择Maven项目 3.在IDEA中&#xff0c;File-Setting-Plugin&#xff0c;下载Scala插件 4.File-project structure&#xff0c;导入插件 4.1在全局库中&#xff0c;选择导入刚才的sca…

LLC开关电源开发:第一节,LLC原理概述

第一节&#xff0c;LLC原理概述文章目录 一、LLC概述二、LLC电路拓扑1.电路拓扑2.电路工作原理3.电路原理分析 总结 一、LLC概述 LLC电路&#xff0c;是一种通过控制开关频率&#xff08;频率调节&#xff09;来实现输出电压恒定的谐振电路&#xff0c;它包括一个电感L、一个电…

【对算法期中卷子的解析和反思】

一、程序阅读并回答问题&#xff08;共30分&#xff09; #include<cstdio>#include<cstring>#include<iostream>using namespace std;char chess[10][10];int sign[10];int n, k, ans;void dfs(int x, int k) { if (k 0){ans;return; } if (xk-1 >…

C++网络编程——socket

在服务器中&#xff0c;需要建立一个socket套接字才能对外提供一个网络通信接口&#xff0c;在Linux系统中套接字仅是一个文件描述符&#xff0c;也就是一个int类型的值 socket概念 socket 的原意是“插座”&#xff0c;在计算机通信领域&#xff0c;socket 被翻译为“套接字…

HCIP-Datacom-ARST自选题库__BGP/MPLS IP VPN简答【3道题】

1.在BGP/MPLSIPVPN场景中&#xff0c;如果PE设备收到到达同一目的网络的多条路由时&#xff0c;将按照定的顺序选择最优路由。请将以下内容按照比较顺序进行排序。 2.在如图所示的BGP/MPLSIP VPN网络中&#xff0c;管理员准备通过Hub-Spoke组网实现H站点对VPM流量的集中管控&am…

1.2数学基础

向量运算 矩阵运算 比较基础就不记录了 MVP矩阵推导 1.讲为什么要有矩阵变换和不同的坐标空间 将3D物体转化到2D平面为各个空间的运用做准备 2.介绍各个空间的概念和含义 MVP矩阵代表什么&#xff1f; MVP矩阵分别是模型(Model)、观察(View)、投影(Projection)三个矩阵。…

Pycharm中如何引入gitee?

1、在Pycharm中打开settings&#xff0c;找到plugins&#xff0c;搜索gitee&#xff0c;点击install&#xff0c;点击ok即可。 2、下载安装好后&#xff0c;选择VCS&#xff0c;找到Get from version Control。 3、通过ssh公钥方式登录&#xff0c;ssh公钥可以gitee上获取 4、…