C语言程序结构、基本语法与数据类型

news2025/1/15 20:52:27

文章目录

  • 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类型

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/926874.html

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

相关文章

DirectExchange直连交换机

目录 一、简介 二、使用步骤 三、demo 父pom文件 pom文件 配置文件 config 消费者 生产者 测试 一、简介 直连型交换机&#xff0c;根据消息携带的路由键将消息投递给对应队列。 大致流程&#xff0c;有一个队列绑定到一个直连交换机上&#xff0c;同时赋予一个路由…

AMEYA360代理品牌:纳芯微芯片解决方案为光伏市场赋能

近年来&#xff0c;光伏市场进入了一个新的增长维度。SolarPower Europe数据显示&#xff0c;2022年全球光伏新增装机量达239GW&#xff0c;占所有可再生能源新增容量的三分之二。国家能源局也宣称&#xff0c;2022年我国工商业光伏新增装机达25.87GW&#xff0c;同比增长236.7…

淘宝商品数据采集(如何快速获取淘宝商品信息),淘宝API接口申请指南

淘宝作为国内的电商平台&#xff0c;拥有海量的商品信息。对于想要进行淘宝商品数据采集的人来说&#xff0c;如何快速获取淘宝商品信息是一个重要的问题。本文将介绍一些快速获取淘宝商品信息的方法。 1. 使用淘宝开放平台PI 淘宝开放平台提供了多种PI接口&#xff0c;可以通…

如何选择合适的开源许可证?

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

java八股文面试[java基础]——异常

自定义异常&#xff1a; 异常Exception 是指程序运行时&#xff0c; 由于输入错误、网络、程序逻辑等原因导致运行时出现的问题。出现异常时&#xff0c;程序会暂时中断执行&#xff0c;并根据产生异常的原因&#xff0c;创建对应异常类型的异常对象&#xff0c;并抛出给JVM捕…

高速收费站的智慧之选,工控机助力顺畅通行!

2020年初取消高速公路省界收费站后&#xff0c;全国高速公路进入“一张网运行、一体化服务”的新阶段。随着ETC用户量快速增长、驾乘人员对收费站高效通行需求不断提升&#xff0c;收费数据在线化运营及精准化、智能化、人性化的收费服务将成为主流。如何提高收费系统集成度、降…

Day4:前端路由(进阶篇)

目标: 持续输出&#xff01;每日分享关于web前端常见知识、面试题、性能优化、新技术等方面的内容。 主要面向群体&#xff1a;前端开发工程师&#xff08;初、中、高级&#xff09;、应届、转行、培训等同学 Day4-今日话题 今天分享的是前端路由的进阶篇&#xff0c;将从路由的…

传感网应用开发1+X实训室建方案

一、概述 1.1建设背景 从院校实际教学情况与人才培养计划为出发点&#xff0c;贯彻传感网应用开发1X实训室职业技能等级标准&#xff0c;充分考虑传感网应用开发1X实训室从业人员的职业发展路径与成长路径&#xff0c;以职业素养、职业技能、知识水平为主要框架结构&#xff…

无涯教程-进程 - 镜像

现在&#xff0c;我们已经了解了如何获取进程及其父进程的基本信息&#xff0c;是时候来研究进程信息的细节了。 以下是进程镜像的图形表示。 进程镜像(Process Image)到底是什么? 进程镜像是执行程序时所需的可执行文件&#xff0c;该镜像通常包含以下部分- 代码段或文本片段…

三维模型数据加载速度不理想?这三种加载方式供你选择!

在四维轻云平台的使用过程中&#xff0c;有用户反映三维模型数据加载速度较慢。因此&#xff0c;平台推出了默认方式、质量优先、速度优先三种数据加载方式供用户选择。下面就来简单介绍一下这三种加载方式的特点&#xff0c;用户可根据需求选择合适的数据加载方式。 默认方式…

Django(2)-编写你的第一个 Django 应用

创建一个基本的投票应用程序。 它将由两部分组成&#xff1a; 一个让人们查看和投票的公共站点。 一个让你能添加、修改和删除投票的管理站点。 创建应用 $ python manage.py startapp polls每一个应用是一个python包&#xff0c;一个项目可以包含多个应用。 可以看到生成…

Telegraf 本地代码vscode调试

需要安装的软件&#xff1a; golang 1.20vscodevscode推荐的go插件 在RUN按钮中&#xff0c;创建Launch 自动生成launch.json文件&#xff0c;此处增加了&#xff1a;args参数。 {// Use IntelliSense to learn about possible attributes.// Hover to view descriptions…

JS逆向系列之商指针数据解密

文章目录 声明案例地址y解密算法分析ecryptByPrivateKey 解密算法分析写代码前的流程梳理参考代码往期逆向文章推荐声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请私信我立即删除! 案例地址 aHR0cDovL…

系统上线安全测评需要做哪些内容?

电力信息系统、航空航天、交通运输、银行金融、地图绘画、政府官网等系统再正式上线前需要做安全测试。避免造成数据泄露从而引起的各种严重问题。 那么系统上线前需要做哪些测试内容呢&#xff1f;下面由我给大家介绍 1、安全机制检测-应用安全 身份鉴别 登录控制模块 应提供…

字节一面:post为什么会发送两次请求?

前言 最近博主在字节面试中遇到这样一个面试题&#xff0c;这个问题也是前端面试的高频问题&#xff0c;因为在前端开发的日常开发中我们总是会与post请求打交道&#xff0c;一个小小的post请求也是牵扯到很多知识点的&#xff0c;博主在这给大家细细道来。 &#x1f680; 作者…

视频尺寸缩小,一键批量剪辑,轻松制作精简版

大家好&#xff01;在视频剪辑中&#xff0c;有时我们需要将大尺寸的视频缩小&#xff0c;以适应特定的需求和平台要求。为了帮助您轻松制作精简版视频&#xff0c;我们推出了一款全新的工具——视频尺寸缩小批量剪辑软件&#xff01;让您一键批量将视频尺寸缩小&#xff0c;轻…

为什么叫源表?源表是如何四象限工作的?

为何称呼为源表&#xff1f; “源”为电压源和电流源&#xff0c;“表”为测量表&#xff1b; “源表”即指一种可作为四象限的电压源或电流源提供精确的电压或电流&#xff0c;同时可同步测量电流值或电压值的测量仪表。&#xff08;恒流源时测电压&#xff0c;恒压源时测电…

手机盖板IR油墨透光率检测仪T03

手机盖板作为手机最外层玻璃面板&#xff0c;其加工一般有落料、倒边、抛光、镀膜、丝印等多道加工工序组成&#xff0c;其中任何一个工序出现差错&#xff0c;都有可能导致手机盖板产生缺陷&#xff0c;例如漏油、透光、IR孔不良、视窗划伤、油墨区划伤、內污、边花等&#xf…

基于Android水果蔬菜果蔬到家商城系统 微信小程序uniAPP的开发与实现

果蔬到家是商家针对用户必不可少的一个部分。在商铺发展的整个过程中&#xff0c;果蔬到家担负着最重要的角色。为满足如今日益复杂的管理需求&#xff0c;各类果蔬到家程序也在不断改进。本课题所设计的springboot基于HBuilder X的果蔬到家APP&#xff0c;使用SpringBoot框架&…

Spring Boot 整合MyBatis-Plus

&#x1f600;前言 本篇博文是关于Spring Boot 整合MyBatis-Plus的&#xff0c;希望你能够喜欢&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的…