C语言基本概念

目录

2.1 编写一个简单的C程序

2.1.1 编译和链接

2.1.2 集成开发环境

2.2 简单程序的一般形式

2.2.1 指令

2.2.2 函数

2.2.3  语句

2.3 注释

2.4 变量和赋值

2.4.1 类型

2.4.2 声明

2.4.3 赋值

2.4.4 显示变量的值

2.4.5 初始化

2.4.6 显示表达式的值

2.5 读入输入

2.6 定义常量的名字

2.7 标识符

2.7.1 关键字

2.8 C程序的书写规范


2.1 编写一个简单的C程序

#include <stdio.h>
int main()
{printf("To C,or not to C:that is the question.\n");return 0;
}
第一行: #include <stdio.h> 是必不可少的,它“包含”了 C 语言标准输入/输出库的相关信息。
 
第二行: 程序的可执行代码都在 main函数中,这个函数代表“主”程序。
第三行: printf函数来自C语言提供的标准输入/输出库,可以在屏幕上输出我们想要输出的内容
(代码\n 告诉 printf 函数执 行完消息显示后要进行换行操作)
第四行: return 0表明程序终止时会向操作系统返回值 0(正常返回)。

2.1.1 编译和链接

        尽管上述程序十分简短,但是为运行这个程序而包含的内容可能比想象的要多

1、将上述程序代码的放在名为 pun.c 的文件(文件的名字无关紧要,但是编译器通常要求程序在.c后缀的文件中)

2、将程序转化为机器可以执行的形式:
  1. 预处理:以.c为后缀的文件会被交给预处理器,预处理器会处理文件中以#开头的内容
  2. 编译:预处理后的文件会进入编译器,编译器会将文件翻译成电脑可读懂的内容(机器码)
  3. 链接:链接器将编译器产生的目标代码和所需的其他附加代码整合在一起,这样才最终产生了完全可执行的程序(附加代码包括程序中用到C语言提供的标准库函数,如printf函数)

 

        Luckily,上述过程往往是自动实现的。此外,由于预处理器通常会和编译器集成在一起,所
以人们甚至可能不会注意到它在工作。 根据不同的编译器和操作系统,编译和链接所需的命令也
是多种多样的。

2.1.2 集成开发环境

        我们可以使用 集成开发环境(integrated development environment, IDE) 来编写代码。集
成开发环境是一个软件包,我们可以在其中编辑、编译、链接、执行甚至调试程序。组成集成开发
环境的各个部分可以协调工作 (例如,当编译器发现程序中有错误时,它会让编辑器把包含出错代
码的行突出显示) 以下是几个常见的集成开发环境以及它们的优缺点:
  • VS2022:安装报包较⼤,安装简单,⽆需多余配置,使⽤⽅便
  • XCode:苹果电脑上的开发⼯具
  • CodeBlocks:⼯具⽐较⼩众,需要配置环境,不太推荐
  • DevC++:⼩巧,但是⼯具过于简单,对于代码⻛格的养成不好,⼀些竞赛使⽤
  • Clion:⼯具是收费,故不推荐⼤家使⽤

vs2022安装视频教学:https://www.bilibili.com/video/BV11R4y1s7jz/ 

2.2 简单程序的一般形式

最简单的 C 程序也依赖 3 个关键的语言特性:指令(在编译前修改程序的编辑命令)、函数(被命名的可执行代码块,如 main 函数)、语句(程序运行时执行的命令)
指令int main(void) 
{ 语句  //注释
}

2.2.1 指令

基本概念:在编译C程序之前,预处理器执行的内容称为指令
特点:1、所有指令都是以字符#开始的(该 字符可以区分 C 程序中的指令和其他代码)2、指
默认只占一行,每条 指令结尾无分号 或其他特殊标记
        指令#include <stdio.h> 表明,在编译器编译前把会头文件“stdio.h”中的信息“包含”到
程序中(<stdio.h>包含 C 标准输入/输出库的信息,C 语言拥有大量类似于 <stdio.h>的头文
件,每个头都包含一些标准库的内容)  我们所编写的每一段C程序都需要该指令

2.2.2 函数

基本概念:是构建程序的构建块(事实上,C 程序就是众多函数的集合)

分类:自定义函数(程序员自己编写的函数)、库函数(编译器提供的一系列函数)

注意事项:

1、函数的功能取决于它内部的语句,若语句是return x + 1,则该函数的作用就是返回x+1的结果

int Add(int x)  //Add函数的返回类型为整型int,函数的形参为整型的x
{return x + 1; //函数的作用是返回x + 1的结果,类似于数学中的f(x) = x + 1;  
}

2、虽然一个 C 程序可以包含多个函数,但主函数 main 有且只能有一个,它是整个C程序的入口,并且main的名字不能被更改,即使是MAIN

2.2.3  语句

基本概念:语句是程序运行时执行一条条的命令

注意事项:每条语句都要以分号结尾(复合语句除外)

语句可以连续占用多行,有时很难确定结束位置,故用分号来向编译器显示语句的结束位置

2.3 注释

作用:1、用于解释编写代码的目标、原因和实现方法(解释你的代码是用来干什么的)2、将一些

你不需要的内容隐藏起来

分类:单行注释//、多行注释/*  */

特点:可以出现在程序的任何位置,既可以独占一行,也可以与其它语句出现在同一行

2.4 变量和赋值

基本概念:大多数程序在产生输出之前往往需要执行一系列的计算(比如x + 1),因此需要在程序执行过程中存放临时的数据(想要计算x + 1,起码x得代表一个数吧,假如x = 1,那么x存放的就是一个临时的数据1,x就是变量),C 语言存放临时数据的存储单元被称为变量(x就是变量,叫它变量是因为如果x = x + 1 呢?1 + 1 后x中存储的临时数据就变为2了)

2.4.1 类型

基本概念:每一个变量都必须有一个类型(type)

作用:类型用来说明变量所存储的数据的种类

两种常见的类型:

        int类型的变量可以存储整数,如 0、1、392 。但是,整数的取值范围是受限制的。最大的整数通常是 2 147 483 647,但在某些计算机上也可能是 32 767。
        float类型变量可以存储比 int 型变量大得多的数值。而且,float 型变量可以存储带小数位的数,如 379.125。
        但 float 型变量也有一些缺陷。进行算术运算时 float 型变量通常比 int 型变量慢;更重要的是,float 型变量所存储的数值往往只是实际数值的一个近似值。如果在一个 float 型变量中存储 0.1,以后可能会发现变量的值为0.099 999 999 999 999 87,这是舍入造成的误差。

2.4.2 声明

基本概念:在使用变量之前必须对其进行声明(告诉编译器变量是什么类型的)

方式:变量的类型+变量的名字(自己起的)
int height;  //int类型的变量 height
float profit; //float类型的变量 profit

如果几个变量具有相同的类型,就可以把它们的声明合并:

int height, length, width, volume; 
float profit, loss;

注意事项:程序中用到的变量、函数等都需要先声明后使用

#include <stdio.h>
int main()
{int x;x = x + 1;int y;y = y + 1;return 0;
}

2.4.3 赋值

基本概念:变量通过赋值的方式获得值

int height = 8;
int length = 12;
float profit = 2150.48f;

注意事项:

1、当把一个包含小数点的常量赋值给 float 型变量时,最好在该常量后面加一个字母 f,不加 f 可能会触发编译器的警告;

2、混合类型赋值(例如把 int 型的值赋给 float 型变量,或者把 float 型的值赋给 int 型变量) 是可以的,但不一定安全

2.4.4 显示变量的值

printf 函数可以显示出变量的当前值:
#include <stdio.h>
int main()
{int height = 8;printf("Height: %d\n", height);return 0;
}
        占位符%d 用来指明在显示过程中变量 height 的值的显示位置,%d 仅用于 int 型变量。如果
要显示 float 型变量,则要用%f 来代替%d。默认情况下,%f会显示出小数点后 6 位数字。如果要
强制%f 显示小数点后 p 位数字,可以把.p 放置在%和 f 之间:
#include <stdio.h>
int main()
{float profit = 2150.48f;printf("Profit: $%.2f\n", profit);return 0;
}

        C 语言没有限制调用一次 printf 可以显示的变量数量。为了同时显示变量 height 和变量 length 的值,可以使用下面的 printf 调用语句:

#include <stdio.h>
int main()
{int height = 8,length = 12;printf("Height: %d Length: %d\n", height, length);return 0;
}

2.4.5 初始化

基本概念:当程序开始执行时,某些变量会被自动设置为零,而大多数变量则不会。没有默认值并且尚未在程序中被赋值的变量是未初始化的

        如果试图访问未初始化的变量(例如,用 printf 显示未初始化变量的值,或者在表达式中使用该未初始化的变量),可能会得到不可预知的结果,如 2568、30891 或者其他同样没有意义的随机数值。在某些编译器中,可能会发生更坏的情况(甚至是程序崩溃)

在同一个声明中可以对任意数量的变量进行初始化:

int height = 8, length = 12, width = 10;
int height, length, width = 10; //height和length未初始化

2.4.6 显示表达式的值

        printf 的功能不局限于显示变量中存储的数,它可以显示任意数值表达式的值。利用这一
特性既可以简化程序,又可以减少变量的数量:
volume = height * length * width;
printf("%d\n", volume);
printf("%d\n", height * length * width);

2.5 读入输入

基本概念:有时程序需要允许用户自行输入一些数值,比如计算x + 1,我们希望x的值是可以由用户自己决定的而不是在程序中固定死的,为了获取输入,就要用到 scanf 函数。

#include <stdio.h>
int main()
{int height,length;scanf("%d %d", &height,&length);printf("Height: %d Length: %d\n", height, length);return 0;
}
        字符串"%d"说明 scanf 读入的是一个整数,而height和length是两个 int 型变量,用来存储
scanf读入的 输入。&运算符在这里很难解释清楚,因此现在只说明它在使用 scanf 函数时通常是
(但不总是) 必需的。 读入一个 float 型值时,需要一个形式略有不同的 scanf 调用:
#include <stdio.h>
int main()
{float profit;scanf("%f", &profit);return 0; 
}

        %f 只用于 float 型变量,profit是一个 float 型变量。字符串"%f"告诉 scanf 函数去寻找一个 float 格式的输入值(此数可以含有小数点,但不是必须含有)

2.6 定义常量的名字

基本概念:当程序含有常量时,建议给这些常量命名(采用宏定义的方式)

方式:#define 常量名 常量值

        #define 也是预处理指令。当对程序进行编译时,预处理器会把每一个宏替换为其表示的值:

#include <stdio.h>
#define NUM 166
int main()
{weight = (volume + NUM - 1) / NUM;//weight = (volume + 166 - 1) / 166;return 0;
}
此外,还可以利用宏来定义表达式:
#include <stdio.h>
#define EXPRESSIONS (1.0f / 3.14159f)
int main()
{printf("%f",EXPRESSIONS);return 0;
}

注意事项:1、当宏包含运算符时,建议用括号把表达式括起来;2、 宏的名字一般均为大写

2.7 标识符

基本概念:在编写程序时,需要对变量、函数、宏和其他实体进行命名。这些名字称为标识符

注意事项:

1、标识符可以含有字母、数字和下划线,但是必须以字母或者下划线开头

合法标识符:times10、get_next_char _done 
非法标识符:10times get-next-char 

2、C 语言区分大小写,即在标识符中 C 语言区分大写字母和小写字母

8个不同的标识符:job joB jOb jOB Job JoB JOb JOB

3、为了避免使用下划线,可以把标识符中的每个单词用大写字母开头(大/小驼峰命名法)

symbolTable、currentPage、nameAndAddress

4、C 对标识符的最大长度没有限制,因此不用担心使用较长的描述性名字

2.7.1 关键字

基本概念:关键字对 C 编译器而言都有着特殊的意义,因此这些关键字不能作为标识符来使用
        
        因为 C 语言是区分大小写的,所以程序中出现的关键字必须严格按照表 2-1 所示的那样采用
小写字母。标准库中函数(如 printf)的名字也只能包含小写字母。

2.8 C程序的书写规范

1、语句可以分开放在任意多行内:
printf("Dimensional weight (pounds): %d\n",
(volume + INCHES_PER_POUND - 1) / INCHES_PER_POUND);
2、合理的使用空格可以增强代码的可读性:
volume = height * length * width;

3、缩进有助于轻松识别程序嵌套:

#include <stdio.h>
int main()
{int x;return 0;
}

4、空行可以把程序划分成逻辑单元,增强代码可读性:

#include<stdio.h>int main(void) 
{ float fahrenheit, celsius; printf("Enter Fahrenheit temperature: "); scanf("%f", &fahrenheit); celsius = (fahrenheit - FREEZING_PT) * SCALE_FACTOR; printf("Celsius equivalent: %.1f\n", celsius); return 0; 
}

注意事项:将字符串分成两行是错误的

printf("To C, or not to C: 
that is the question.\n"); /*** WRONG ***/

~over~

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

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

相关文章

网络通信(15)-C#TCP客户端掉线重连实例

本文上接前面的文章使用Socket在C#语言环境下完成TCP客户端的掉线重连实例。 掉线重连需要使用心跳包发送测试网络的状态,进而进入重连循环线程。 前面实例完成的功能: 客户端与服务器连接,实现实时刷新状态。 客户端接收服务器的数据。 客户端发送给服务器的数据。 客…

pytorch代码实现注意力机制之MLCA

MLCA注意力机制 简要&#xff1a;注意力机制是计算机视觉中使用最广泛的组件之一&#xff0c;可以帮助神经网络强调重要元素并抑制不相关的元素。然而&#xff0c;绝大多数信道注意力机制仅包含信道特征信息而忽略了空间特征信息&#xff0c;导致模型表示效果或目标检测性能较…

docker之部署青龙面板

青龙面板是一个用于管理和监控 Linux 服务器的工具&#xff0c;具有定时运行脚本任务的功能。在实际情况下也可以用于一些定期自动签到等任务脚本的运行。 本次记录下简单的安装与使用&#xff0c;请提前安装好docker&#xff0c;参考之前的文章。 一、安装部署 1、拉取镜像 # …

weak_ptr 与 一个难发现的错误(循环依赖问题)笔记

推荐B站视频&#xff1a;7.weak_ptr与一个非常难发现的错误_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV18B4y187uL/?p7&spm_id_frompageDriver&vd_sourcea934d7fc6f47698a29dac90a922ba5a3一、weak_ptr weak_ptr并不拥有所有权并不能调用 -> 和 解引…

ACL--访问控制列表概述、组成、分类、应用

目录 一、ACL概述 二、ACL的组成 三、ACL分类 四、举例说明 1、基于标准ACL和基础的高级ACL应用 2、基于端口的ACL 一、ACL概述 访问控制列表ACL&#xff08;Access Control List&#xff09;是由一条或多条规则组成的集合。所谓规则&#xff0c;是指描述报文匹配条件的…

黑马程序员——javase进阶——day02——关键字,接口,代码块,枚举

目录&#xff1a; Java中的关键字 static关键字final关键字Java中的权限修饰符代码块 构造代码块静态代码块接口 接口的介绍接口的定义和特点接口的成员特点接口的案例接口中成员方法的特点枚举随堂小记 继承方法重写抽象类模板设计模式staticfinal权限修饰符接口回顾上午内容…

大数据开发之Spark(完整版)

第 1 章&#xff1a;Spark概述 1.1 什么是spark 回顾&#xff1a;hadoop主要解决&#xff0c;海量数据的存储和海量数据的分析计算。 spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。 1.2 hadoop与spark历史 hadoop的yarn框架比spark框架诞生的晚&#xff…

Objective-C方法的声明实现及调用

1.无参数的方法 1)声明 a.位置&#xff1a;在interface括弧的外面 b.语法&#xff1a; - (返回值类型)方法名称; interface Person : NSObject -(void) run; end 2)实现 a.位置&#xff1a;在implementation中实现 b.语法&#xff1a;加大括弧将方法实现的代码写在大括孤之中 …

KernelGPT: LLM for Kernel Fuzzing

KernelGPT: Enhanced Kernel Fuzzing via Large Language Models 1.Introduction2.Background2.1.Kernel and Device Drivers2.2.Kernel Fuzzing2.2.1.Syzkaller规约2.2.2.规约生成 3.Approach3.1.Driver Detection3.2.Specification Generation3.2.1.Command Value3.2.2.Argum…

基于静态顺序表实现通讯录

目录 一、设计框架 1、功能要求​ 2、菜单函数的实现 二、头文件实现​ Contact.h SeqList.h 三、Test.h 四、通讯录的初始化和销毁 五、增加通讯录 六、在通讯录中查找姓名下标 七、删除通讯录 八、显示通讯录 九、查找通讯录 一、设计框架 test.c&#xff1a;通…

《尊思想人文地理环境》新书亮相,叶无为集30年智慧破解环境密码

在探索人与自然和谐共生的今天&#xff0c;叶无为教授的新作《尊思想人文地理环境》应时而生&#xff0c;为读者揭开了地理环境与人文发展之间深刻联系的神秘面纱。本书集结了作者三十多年的实战经验&#xff0c;通过易医体系对大自然的山川河流进行独到解析&#xff0c;融合传…

飞越天空之城

欢迎来到程序小院 飞越天空之城 玩法&#xff1a;左边的按钮是控制小人儿飞起来的方向的&#xff0c;右边的按钮是控制它飞的高度的&#xff0c; 左边控制在正上方时可以让小人儿沿着一个方向飞跃&#xff0c;否则会撞到两边的黑墙&#xff0c; 右边的按钮如果加足够的话&…

GPTs大受欢迎但问题多,企服厂商的AI Agent更被B端客户器重

2023年11月&#xff0c;OpenAI在首届开发者大会上推出了GPTs和Assitant API&#xff0c;不仅改写了AI Agent的构建范式&#xff0c;也把AI智能体的应用推向一个新高潮。 GPTs和GPT商店&#xff0c;使得用户无需编码通过自然语言就能创建并拥有多个专属私人助理&#xff0c;且可…

【Servlet】如何编写第一个Servlet程序

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Servlet】 本专栏旨在分享学习Servlet的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; Servlet是Java编写的服务器端…

5.【SpringBoot3】文件上传

1. 文件上传到本地 需求分析 在用户更换头像或发布文章时&#xff0c;需要携带一个图片的 url 地址&#xff0c;该 url 地址是当用户访问文件上传接口&#xff0c;将图片上传成功后&#xff0c;服务器返回的地址。所以&#xff0c;后台需要提供一个文件上传接口&#xff0c;用…

Android HIDL概述与绑定模式的实现

一、前言 Android O(8.0) 版本之后&#xff0c;底层实现有了比较大的变化&#xff0c;最显著的一个方面就是 HIDL 机制的全面实施。本文对于理解系统源码中 Gnss、Usb、Camera 等模块的工作原理有极大帮助。 二、HIDL 设计目的 在 Android O(8.0) 之前系统的升级牵扯多方协作…

Python tkinter (5) 选项按钮与复选框

Python的标准Tk GUI工具包的接口 tkinter系列文章 python tkinter窗口简单实现 Python tkinter (1) —— Label标签 Python tkinter (2) —— Button标签 Python tkinter (3) —— Entry标签 Python tkinter (4) —— Text控件 目录 CheckButton 简单示例 获取选中 Ra…

RBD —— Visualizing fractured geometry

RBD Exploded View&#xff08;与Exploded View SOP类似&#xff09;从中心炸开几何体&#xff0c;以更好查看被破碎和约束的碎块&#xff1b; 可视化高精度和低精度几何体的不同&#xff0c;Show Proxy Geometry显示代理几何体&#xff1b; Show Constraints显示约束&#xff…

6.jmeter非GUI命令及Beanshell组件

一、非GUI&#xff08;界面&#xff09;命令详解 1. -n 使用非gui方式&#xff0c;不能单独使用&#xff0c;必须和-t&#xff08;指定jmeter的脚本&#xff09;一起用。 #cmd命令行模式下&#xff0c;进入存放测试jmx文件的目录下 jmeter -n -t hello.jmx只会生成一个log日…

数据结构实验八:排序的应用

目录 一、实验目的 二、实验原理 1.直接插入排序 2.快速排序 三、实验内容 实验1 代码 截图 实验2 代码 截图 一、实验目的 1、掌握排序的基本概念&#xff1b; 2&#xff0e;掌握并实现以下排序算法&#xff1a;直接插入排序、快速排序。 二、实验原理 1.直接插…