从零开始探索C语言(一)----C语言程序结构、基本语法与数据类型

news2025/1/12 20:55:12

文章目录

  • 1. 程序结构
    • 1.1 Hello World示例
    • 1.2 编译并执行C程序
  • 2. 基本语法
    • 2.1 C 标记
    • 2.2 分号
    • 2.3 注释
    • 2.4 标识符
    • 2.5 关键字
    • 2.6 C中的空格
  • 3. 数据类型
    • 3.1 整数类型
    • 3.2 浮点类型
    • 3.3 void类型

从第一次学习C语言到现在已经时隔五年了,大部分知识都还给老师了,近期想着看一些教程复习一下C语言基础,从零开始做一下学习笔记记录。

1. 程序结构

1.1 Hello World示例

#include <stdio.h>

int main() {
   /* my first program in C */
   printf("Hello, World! \n");
   
   return 0;
}

让我们看一下上述程序的各个部分:

  • 程序#include <stdio.h>的第一行是预处理程序命令,该命令告诉C编译器在进行实际编译之前先包含stdio.h文件。
  • 下一行int main()是程序执行开始的main函数。
  • 下一行/*...*/将被编译器忽略,并且已在程序中添加了附加注释。因此,这些行在程序中称为注释。
  • 下一行printf(...)是C语言中可用的另一个函数,该函数将消息“ Hello,World!”。在屏幕上显示。
  • 下一行return 0;终止main()函数并返回值0。

即一个C程序基本上由以下部分组成:

  • 预处理器命令
  • 函数
  • 变量
  • 陈述与表达
  • 注释

1.2 编译并执行C程序

以下是编译和运行C程序简单的步骤:

  • 打开一个文本编辑器并添加上述代码。
  • 将文件另存为hello.c
  • 打开命令提示符,然后转到保存文件的目录。
  • 键入gcc hello.c,然后按Enter编译代码。
  • 如果代码中没有错误,则命令提示符将带你进入下一行,并将生成一个a.out可执行文件(windows 系统是a.exe)。
  • 现在,键入./a.out以执行你的程序。
  • 你将在屏幕上看到输出“Hello World”。

在这里插入图片描述

2. 基本语法

2.1 C 标记

一个C程序由各种标记组成,令牌可以是关键字,标识符,常量,字符串文字或符号。例如,以下C语句由五个标记组成:

printf("Hello, World! \n");
printf
(
   "Hello, World! \n"
)
;

2.2 分号

注释就像在C程序中帮助文本一样,它们会被编译器忽略。它们以**/*开头并以字符*/**结束,如下所示-

/* my first program in C */

不能在注释中包含注释,并且它们也不会出现在字符串或字符文字中。

2.3 注释

在C程序中,分号是语句终止符。也就是说,每个单独的语句必须以分号结尾。它指示一个逻辑实体的结尾。

下面给出了两个不同的陈述-

printf("Hello, World! \n");
return 0;

2.4 标识符

C标识符是用于标识变量,函数或任何其他用户定义项目的名称。标识符以字母A到Z,a到z或下划线“_”开头,后跟零个或多个字母,下划线和数字(0到9)。C不允许在标识符中使用标点符号,例如@,$和%。C是区分大小写的编程语言。因此,Manpower和manpower是C中两个不同的标识符。这是一些合法的标识符示例-

mohd       zara    abc   move_name  a_123
myname50   _temp   j     a23b9      retVal

2.5 关键字

下表显示了C中的保留(关键)字。这些保留字不得用作常量或变量或任何其他标识符名称。

  • auto
  • else
  • long
  • switch
  • break
  • enum
  • register
  • typedef
  • case
  • extern
  • return
  • union
  • char
  • float
  • short
  • unsigned
  • const
  • for
  • signed
  • void
  • continue
  • goto
  • sizeof
  • volatile
  • default
  • if
  • static
  • while
  • do
  • int
  • struct
  • _Packed
  • double

2.6 C中的空格

仅包含空格(可能带有注释)的行称为空白行,而C编译器完全忽略它。空格是C语言中用来描述空格,制表符,换行符和注释的术语。

空格将语句的一部分与另一部分分开,并使编译器能够识别语句中一个元素(例如int)在何处结束以及下一个元素在何处开始。因此,在以下语句中

int age;

int和age之间必须至少有一个空格字符(通常是一个空格),以便编译器能够区分它们。另一方面,在以下语句中:

fruit = apples + oranges;   // get the total fruit

在fruit和=之间,或在=和apples之间,不需要空格字符,但是如果你想增加可读性,可以随意添加一些字符,以便更好的维护性。

3. 数据类型

C中的数据类型是指用于声明不同类型的变量或函数的扩展系统。变量的类型决定了它在存储中占据多少空间以及如何解释所存储的位模式。

C中的类型可以分类如下:

类型描述
基本类型它们是算术类型,并且进一步分为:(a)整数类型和(b)浮点类型。
枚举类型它们还是算术类型,用于定义只能在整个程序中分配某些离散整数值的变量。
类型void类型说明符void指示没有可用值。
派生类型它们包括(a)指针类型,(b)数组类型,(c)结构体类型,(d)联合类型 (e)函数类型。

数组类型和结构类型统称为集合类型。

函数的类型指定函数的返回值的类型。

3.1 整数类型

下表提供了标准整数类型的详细信息及其存储大小和值范围:

类型容量取值范围
char1 byte-128 to 127 or 0 to 255
unsigned char1 byte0 to 255
signed char1 byte-128 to 127
int2 or 4 bytes-32,768 to 32,767 or -2,147,483,648 to 2,147,483,647
unsigned int2 or 4 bytes0 to 65,535 or 0 to 4,294,967,295
short2 bytes-32,768 to 32,767
unsigned short2 bytes0 to 65,535
long8 bytes-9223372036854775808 to 9223372036854775807
unsigned long8 bytes0 to 18446744073709551615

要获取特定平台上类型或变量的确切大小,可以使用sizeof运算符。表达式sizeof(type)产生对象或类型的存储大小(以字节为单位)。下面给出的示例使用limits.h头文件中定义的不同常量获取计算机上各种类型的大小-

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>

int main(int argc, char** argv) {

    printf("CHAR_BIT    :   %d\n", CHAR_BIT);
    printf("CHAR_MAX    :   %d\n", CHAR_MAX);
    printf("CHAR_MIN    :   %d\n", CHAR_MIN);
    printf("INT_MAX     :   %d\n", INT_MAX);
    printf("INT_MIN     :   %d\n", INT_MIN);
    printf("LONG_MAX    :   %ld\n", (long) LONG_MAX);
    printf("LONG_MIN    :   %ld\n", (long) LONG_MIN);
    printf("SCHAR_MAX   :   %d\n", SCHAR_MAX);
    printf("SCHAR_MIN   :   %d\n", SCHAR_MIN);
    printf("SHRT_MAX    :   %d\n", SHRT_MAX);
    printf("SHRT_MIN    :   %d\n", SHRT_MIN);
    printf("UCHAR_MAX   :   %d\n", UCHAR_MAX);
    printf("UINT_MAX    :   %u\n", (unsigned int) UINT_MAX);
    printf("ULONG_MAX   :   %lu\n", (unsigned long) ULONG_MAX);
    printf("USHRT_MAX   :   %d\n", (unsigned short) USHRT_MAX);

    return 0;
}

当编译并执行上述程序时,它在Linux上产生以下结果-

CHAR_BIT    :   8
CHAR_MAX    :   127
CHAR_MIN    :   -128
INT_MAX     :   2147483647
INT_MIN     :   -2147483648
LONG_MAX    :   9223372036854775807
LONG_MIN    :   -9223372036854775808
SCHAR_MAX   :   127
SCHAR_MIN   :   -128
SHRT_MAX    :   32767
SHRT_MIN    :   -32768
UCHAR_MAX   :   255
UINT_MAX    :   4294967295
ULONG_MAX   :   18446744073709551615
USHRT_MAX   :   65535

在这里插入图片描述

windows运行结果则有些不同:

CHAR_BIT    :   8
CHAR_MAX    :   127        
CHAR_MIN    :   -128       
INT_MAX     :   2147483647 
INT_MIN     :   -2147483648
LONG_MAX    :   2147483647 
LONG_MIN    :   -2147483648
SCHAR_MAX   :   127        
SCHAR_MIN   :   -128       
SHRT_MAX    :   32767      
SHRT_MIN    :   -32768     
UCHAR_MAX   :   255        
UINT_MAX    :   4294967295 
ULONG_MAX   :   4294967295 
USHRT_MAX   :   65535 

在这里插入图片描述

3.2 浮点类型

下表提供了标准浮点类型的详细信息以及存储大小和值范围及其精度-

类型容量取值范围精确
float4字节1.2E-38至3.4E + 38小数点后6位
double8字节2.3E-308至1.7E + 308小数点后15位
long double10字节3.4E-4932至1.1E + 4932小数点后第19位

头文件float.h定义了宏,这些宏使得我们可以使用这些值以及有关程序中实数二进制表示形式的其他详细信息。

以下示例显示浮点类型占用的存储空间及其范围值:

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>

int main(int argc, char** argv) {

    printf("Storage size for float : %d \n", sizeof(float));
    printf("FLT_MAX     :   %g\n", (float) FLT_MAX);
    printf("FLT_MIN     :   %g\n", (float) FLT_MIN);
    printf("-FLT_MAX    :   %g\n", (float) -FLT_MAX);
    printf("-FLT_MIN    :   %g\n", (float) -FLT_MIN);
    printf("DBL_MAX     :   %g\n", (double) DBL_MAX);
    printf("DBL_MIN     :   %g\n", (double) DBL_MIN);
    printf("-DBL_MAX     :  %g\n", (double) -DBL_MAX);
    printf("Precision value: %d\n", FLT_DIG );

    return 0;
}

当编译并执行上述程序时,它在Linux上产生以下结果-

Storage size for float : 4 
FLT_MAX      :   3.40282e+38
FLT_MIN      :   1.17549e-38
-FLT_MAX     :   -3.40282e+38
-FLT_MIN     :   -1.17549e-38
DBL_MAX      :   1.79769e+308
DBL_MIN      :   2.22507e-308
-DBL_MAX     :  -1.79769e+308
Precision value: 6

windows上运行结果与linux相同:

在这里插入图片描述

3.3 void类型

void类型指定没有可用值。

它在三种情况下使用:

类型说明
函数返回为空C中有各种函数不返回任何值,或者可以说它们返回void。没有返回值的函数的返回类型为void。例如,void exit(int status;
函数参数为voidC中有各种函数,它们不接受任何参数。没有参数的函数可以接受空白。例如,int rand(void;
void指针类型为void *的指针表示对象的地址,但不表示其类型。例如,一个内存分配函数void * malloc(size_t size); 返回指向void的指针,该指针可以转换为任何数据类型。

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

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

相关文章

C++day7(封装一个学生的类,定义一个学生这样类的vector容器, 里面存放学生对象【保存+读取】、实现与list相关的函数 )

1.封装一个学生的类&#xff0c;定义一个学生这样类的vector容器, 里面存放学生对象 再把该容器中的对象&#xff0c;保存到文件中。&#xff08;至少3个&#xff09; 再把这些学生从文件中读取出来&#xff0c;放入另一个容器中并且遍历输出该容器里的学生。 #include <…

STM32f103入门(5)定时器中断

STM32 TIM&#xff08;定时器/计数器&#xff09;模块的中断流程如下&#xff1a; 配置TIM寄存器&#xff1a;首先&#xff0c;通过配置TIM相关的寄存器来设置计时器的基本参数&#xff0c;例如预分频系数、计数模式、计数器周期等。 使能TIM中断&#xff1a;使用TIM_ITConfig函…

时序预测 | MATLAB实现基于QPSO-BiLSTM、PSO-BiLSTM和BiLSTM时间序列预测

时序预测 | MATLAB实现基于QPSO-BiLSTM、PSO-BiLSTM和BiLSTM时间序列预测 目录 时序预测 | MATLAB实现基于QPSO-BiLSTM、PSO-BiLSTM和BiLSTM时间序列预测效果一览基本描述程序设计参考资料 效果一览 基本描述 1.Matlab实现QPSO-BiLSTM、PSO-BiLSTM和BiLSTM神经网络时间序列预测…

王老吉与加多宝共同的课题:受困于第二招牌

王老吉曾经凭借凉茶单品反超可口可乐&#xff0c;却在2015年后面临增速下滑、市场规模逐年缩小的增长困境。事实上&#xff0c;王老吉所在的凉茶市场现已成为存量市场&#xff0c;甚至在不断激化的竞争中逐年萎缩。为了打破原有业务的局限&#xff0c;王老吉曾推出过许多新品&a…

网站应用微信登录

准备工作 | 微信开放文档 <template><wxloginid"wxLoginForm"self_redirect"false":appid"appid":scope"scope":state"state":redirect_uri"redirect_uri"></wxlogin> </template><…

智慧实景无人直播带货系统搭建方案,一起来了解一下吧!

随着无人直播和带货的兴起&#xff0c;智慧实景无人直播带货系统成为了电商行业的新宠。本文将提出一种专业的搭建方案&#xff0c;通过技术驱动和商业机遇&#xff0c;实现智慧实景无人直播带货系统的成功落地。我们将深入探讨系统架构、技术支持和商业模式等关键要素&#xf…

安卓学习笔记

文章目录 1. Android系统架构2. Activity2.1 生命周期2.2 生命状态2.3 启动模式 3. Service3.1 定义3.2 两种启动方式3.3 生命周期3.4 跨进程service3.5 IntentService 4. BroadCastReceiver4.1 概念4.2 组成4.3 广播接收器的分类4.4 生命周期4.5 静态注册和动态注册 5. Conten…

C语言初阶学习笔记

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 1.复杂概念 1.1大小端 1.2 整形提升 1.2.1整形提升的意义…

达梦数据库物化视图介绍

概述 本文将介绍达梦数据库物化视图&#xff0c;给出其概念及相关创建、使用示例。 1.物化视图概念 物化视图 (MATERIALIZED VIEW) 是目标表在特定时间点上的一个副本&#xff0c;占用存储空间&#xff0c;即将查询出来的数据存储在数据库中。当所依赖的一个或多个基表的数据…

Vue 项目性能优化 — 实践指南

前言 Vue 框架通过数据双向绑定和虚拟 DOM 技术&#xff0c;帮我们处理了前端开发中最脏最累的 DOM 操作部分&#xff0c; 我们不再需要去考虑如何操作 DOM 以及如何最高效地操作 DOM&#xff1b;但 Vue 项目中仍然存在项目首屏优化、Webpack 编译配置优化等问题&#xff0c;所…

vs2008下的mfc hello world实现

笔者不知道会写这种博文&#xff0c;好久没写mfc程序&#xff0c;hello world都不会创建了。起因是来了个mfc任务&#xff0c;那就得把mfc熟悉起来&#xff0c;先看下实现效果吧 因为是基于2008的&#xff0c;那就按照2008创建吧 文章目录 第一步&#xff1a;文件新建项目第二…

串口接收数据-控制LED灯

目标 通过串口接收数据&#xff0c;对数据分析&#xff0c;控制8个LED灯按照设定时间闪烁。 8个LED灯可以任意设计&#xff0c;是否闪烁。闪烁时间按ms计算&#xff0c;通过串口发送&#xff0c;可设置1~4,294,967,296ms&#xff0c;也就是4字节数据协议自拟&#xff0c;有数…

(AcWing)Dijkstra求最短路 I

给定一个 n 个点 m 条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c;所有边权均为正值。 请你求出 1 号点到 n 号点的最短距离&#xff0c;如果无法从 1 号点走到 n 号点&#xff0c;则输出 −1。 输入格式 第一行包含整数 n 和 m。 接下来 m 行每行包含三个整…

06:流与并发

一般来说&#xff0c;在CUDA C编程中有两个级别的并发&#xff1a; &#xff08;1&#xff09;内核级并发 单一的内核被GPU的多个线程并行执行。 &#xff08;2&#xff09;网格级并发 多个内核在同一设备上同时执行。 一、流和事件概述 CUDA流是一系列异步的CUDA操作&am…

概念解析 | 端边云协同智能计算

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:端边云协同智能计算。 揭秘边缘计算与云计算的完美融合:端边云协同智能计算 物联网学报 | “端—边—云”协同的智慧物联网 在云计算和边缘计算日益发展的背景下,如何将两者…

顺序表链表OJ题(3)——【数据结构】

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 前言&#xff1a; 今天是链表顺序表OJ练习题最后一次分享&#xff0c;每一次的分享题目的难度也再有所提高&#xff0c;但是我相信大家都是非常机智的&#xff0c;希望看到博主文章能学到东西的可以一键三连关注一下博主…

Visual Studio 2022的MFC框架——AfxWinMain全局对象

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重新审视一下Visual Studio 2022下开发工具的MFC框架知识。 当程序调用了CWinApp类的构造函数&#xff0c;并执行了CMfcApp类的构造函数&#xff0c;且产生了theApp 对象之后&#xff0c;接下来就…

Maven入门教程(二):idea/Eclipse使用Maven

Maven入门教程(一)&#xff1a;安装Maven环境 4.开发工具配置 4.1 idea配置 idea有多个版本&#xff0c;配置是一样的&#xff0c;只是配置页面的入口不一样 旧版idea 新版idea 4.2 Eclipse配置 打开Eclipse&#xff0c;菜单中选择&#xff1a;Window -> Preference ->…

Redis项目实战——商户查询缓存

目录 为什么要用Redis实现商户查询缓存&#xff1f;用Redis实现商户查询缓存的基本思路&#xff1f;使用Redis缓存的问题及解决方法&#xff1f;一、如何保持数据库数据和Redis缓存数据的一致性&#xff1f;1 内存淘汰机制2 超时剔除机制3 主动更新机制&#xff08;胜&#xff…

【三进制状态压缩】Gym Plates

Problem - A - Codeforces 题意&#xff1a; 思路&#xff1a; 首先读完题目思路肯定就是状压背包 但是怎么状压 这个和一般的状态压缩不太一样&#xff0c;每个数位的状态有三种&#xff0c;意味着要用三进制的状态压缩 可以这样考虑&#xff1a;99887766554433221100 一…