C语言的基本语法详解

目录
  • 1、标识符与关键字
  • 2、常量和符号常量
    • (1)常量和常量符号
    • (2)变量
  • 3、C语言数据类型
    • (1)整型常量
      • 整型变量
      • 原码、反码和补码
    • (2)实型数据
      • 实型常量
      • 实型变量
      • 实型变量的定义以及初始化
    • (3)字符型数据
      • ASCII码
      • 字符型变量
      • 转义字符字符
      • 字符串常量
      • 字符串变量
  • 总结

1、标识符与关键字

给变量所取的名字叫变量名,定义变量的名字需要遵循标识符的命名规则。
标识符是用来标识变量、符号常量、数组、函数、文件等名字的有效字符序列。

标识符的命名规则:

1.只能由字母、数字和下划线组成(例如:Score1,Stu_name)

2.第一个字符必须为字母或下划线

3.区分大小写字母

4.C语言内部规定的标识符(即关键字)不能作为用户标识

C语言的关键字:

C语言的关键字,是保留的一些特殊作用的词语,一共32个关键字

关键字 说明
auto 声明自动变量
break 跳出当前循环
case 开关语句分支
char 声明字符型变量或函数返回值类型
const 定义常量,如果一个变量被 const 修饰,那么它的值就不能再被改变
continue 结束当前循环,开始下一轮循环
default 开关语句中的"其它"分支
do 循环语句的循环体
double 声明双精度浮点型变量或函数返回值类型
enum 声明枚举类型
extern 声明变量或函数是在其它文件或本文件的其他位置定义
float 声明浮点型变量或函数返回值类型
for 一种循环语句
goto 无条件跳转语句
if 条件语句
int 声明整型变量或函数
long 声明长整型变量或函数返回值类型
register 声明寄存器变量
return 子程序返回语句(可以带参数,也可不带参数)
unsigned 声明无符号类型变量或函数
union 声明共用体类型
void 声明函数无返回值或无参数,声明无类型指针
volatile 说明变量在程序执行中可被隐含地改变
while 循环语句的循环条件

C99新建关键字:

_Bool _Complex_Imaginaryinline restrict

C11新建关键字:

_Alignas _Alignof _Atomic _Generic _Noreturn_Static_assert _Thread_local

2、常量和符号常量

常量:在程序运行过程中,其值不会发送变化的量。

变量:在程序运行过程中,其值可以发送变化的量

(1)常量和常量符号

C语言提供的常量类型有整型常量、实型常量、字符常量、字符串常量和符号常量。

用一个标识符来代表一个常量,该标识符叫做符号常量,其一般形式为:

#define 标识符 常量

例如:

#define PI 3.1415926

关于typede和defin的用法与区别:

1.#defien是预处理指令,在编译预处理时进行简单替换,不作正确性检查,不管含义是否正确照样带入,只要在编译器已被展开的源程序时才会发现可能的错误并报错。

例如:#define PI 3.1415926

程序:area = PIrr替换3.1415926r

2.rtypedef是在编译时处理的,通常是用于对已有数据类型取别名,而#define只是简单地替换。

例如:typedef unsigned int uint;

这样就为unsigned int型引入新助记符uint,以后使用uint直接代表unsigned int型。

例如:typedef PI 3.1515926;

编译器会直接报错,原因PI并非已存在类型,其次“3.1515926”不符合命名规则。

(2)变量

1.变量在内存中占用一定的储存单元,在该储存单元中存放变量值。

2.程序中用到的所有变量都必须有一个变量名

3.变量名和变量值是两个不同的概念

4.不同类型的变量在内存中占据储存单元的数量及储存的格式不相同,例如:char ch = ‘1';int i = 1;

5.变量必须“先定义后使用”,这样做的目的是:

1、便于编译程序程序检测对该变量的运算是否合法。例如:整型变量可以进行求模(余数)运算,实型变量不可以进行求模运算。

2、程序中变量名的正确使用

3、C语言数据类型

(1)整型常量

整型常量就是整数,有3种表示形式

1.十进制整常数:就是通常整数的写法,数码取值为0-9。例如:25、-623、0等

2.八进制整数:以0为前缀,数码取值0-7,

例如:

020(十六进制16)

016(十六进制14)

0177777(十六进制65535)

-010(十进制数-8)

几种不合法的八进制数:

256(无前缀0)

079(包含了非八进制数码9)

3.十六进制整型常数:以数字和字母0x开头,即0x作为前缀,数码的取值为0-9和A-F(或字母a-f)

几种合法的十六进制数:

0x2A(十进制数42)

0x1AB0(十进制数6832)

几个不合法 的十六进制数:

5A(无前缀)、0x2H(包含了非十六进制数码H)

整型变量

整型变量分为:基本整型、长整型、短整型、无符号型

整型变量的定义及初始化:

定义变量及初始化的一般形式 为:

类型说明符 变量名1 = 值1

例如:

int a,b,c;	//定义a,b,c为整型变量
long x = 10;	//定义x为长整型变量,并附初值10
unsigned int p=2,q=5,m;	//定义p,q,m为无符号整型变量。p赋初值为2,q赋初值为5

整型变量需要注意:
1、允许在一个类型说明符后,定义多个相同类型变量,类型说明符与变量名之间至少用一个空格间隔,各变量名之间用逗号间隔
2、最后一个变量名后面用“;”号结尾
3、变量定义必须放在变量使用之前,一般放在函数体开头
4、没有给变量赋初值,并不意味着该变量中没有数值,只表面给变量中没有确定的值,因此直接使用这种变量的话可能产生莫名其妙的结果,有可能导致运算错误

例程:

#include <stdio.h>
void main(void)
{
    int a = 3, b = 5, c, d;
    c = a+b;
    d = a-b;
    printf("a+b=%d,a-b=%d\n",c,d);
}

原码、反码和补码

计算机中数分为有符号和无符号。他们是以二进制形式表示的,有三种表示方法,即原码和补码。

三种表示方式由符号位和数值位两部分构成

符号位在最高位,用0表示“正”,1表示“负”。

取余位为数值位

原码:按照二进制的方法来表示数的绝对值,用这个方法得到的就是数的原码。

反码:正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位 按为取反。

补码:正数的补码与其原码相同,负数的补码是将其原码除符号位之外的各位求反之后,在末位再加1

正数的原码、反码。补码相同;负数的原码、反码、补码不同。数值在计算机中以补码形式存放。

例如:求-127的补码

(2)实型数据

实型数据又称为实数或浮点数,指是带有小数部分的非整数数值。

实型常量

在C语言中,实数常量只能用十进制数表示,有两种表示方法:

1.小数形式:由数字0~9和小数点组成,当小数部分为零时,小数点不能省略。例如:0.0/24.4、-56.33等均为合法的实型常量

2.指数形式:由十进制数、加阶码标志小写字母“e”(或大写字母“E”)和阶码(必须是整数)组成。

例如:2.3E5(相当于2.3 x 10^5)

以下是不合法的实型常量:

123(无小数点)

E4(阶码“E”之前无数字)

23.-E3(负号的位置不对)

2.7E(无阶码)

实型变量


实型变量的定义以及初始化

例如:

float a,b,c;			//定义a,b,c为单精度实型变量
double m=3.5,n=5.6;		//定义m,n为双精度实型变量,并分别赋值3.5和5.6

(3)字符型数据

字符常量是用一对单引号括起来的一个字符

如:‘b'、‘z'、‘='、‘?'、‘5'

字符常量特点:

1.字符常量只能是单个字符,不能是多个字符

2.字符常量是以ASCII码形式储存,一个字符常量占用一个字节空间。

ASCII码

ASCII码表示American Standrd Code for Information Interchange。ASCII编码能表示数据范围是00000000~11111111共2^8即256个数据

标准的ASCII码有128个字符,其中:

1.0-31为控制字符,例如,回车换行、文件结束标志、字符串结束标志

2.10个阿拉伯‘0'~‘9'的码值是连续的

3.26个大写字母‘A'-‘Z'是连续的,26和大小写字母‘a'-‘z'是连续的

4.字符常量也可以参与各种运算,如:‘B'-‘A'值为1(字符‘B'的ASCII码值减去66字符‘A'的ASCII码值65结果为1)

字符型变量

1.字符型变量在内存中占用1个字节,只能存放一个字符,并以该字符的ASCII码的值的形式存放

2.在C语言中,一个字符型数据可以按照它的ASCII码进行数据运算

字符型数据储存空间和值范围

类型 字节数 取值范围
char 1 -128~127
unsigned char 1 0~255

例程:给字符变量赋整数值

#include <stdio.h>
int main()
{
    char ch1=65,ch2=66;
    printf("%c,%c\n",ch1,ch2);
    printf("%d,%d\n",ch1,ch2);
}

转义字符字符

转义字符:是由一个反斜杠“"后跟规定,具有特定含义的字符

常用转义字符如下表

转义字符使用如下:

#include <stdio.h>
int main()
{
    printf("\"china\"\n");
    printf("My \tCountry.\n");
    printf("I am hap\160\x79.\n");
}

字符串常量

字符串常量是简称字符串,是用一对双撇号(西方双引号英文)括起来的一串字符,包含字符的个数和字符长度
例如:“Hello World”。“a”,“C语言”都是字符串常量。

字符串常量和字符常量区别:

1.字符常量是右边单引号括起来的字符,而字符串常量是由双引号括起来的字符。尽管‘a'与“a”都包含一个字符,但在C程序中,它们都具有不同的含义

2.字符常量只能是一个字符,字符串常量可以是多个字符

3.可以把一个字符串常量赋值一个字符变量,但不能把一个字符常量赋值一个字符变量。

字符串变量

在C语言中没有专门的字符串类型,我们只能使用数组或者指针来间接地存储字符串。

char str1[] = "Hello World!"
char *str2 = "你好世界!"

str1 和 str2 是字符串的名字,后边的[]和前边的*是固定的写法。初学者暂时可以认为这两种存储方式是等价的,它们都可以通过专用的 puts 函数和通用的 printf 函数输出。

#include <stdio.h>
int main()
{
    char web_url[] = "hHello World!";
    char *web_name = "你好世界";
    puts(web_url);
    puts(web_name);
    printf("%s\n%s\n", web_url, web_name);
    return 0;
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • C语言入门的一些基本资源推荐和程序语法概览

    为什么要学习C语言? 为什么要学习.使用C语言?为什么要学习一个可能比自己都岁数大的编程语言? 选择一门编程语言,"为什么而学"这个目的是最重要的,目的不明确就没法学好.这也是为什么很多学生朋友在大学里必修C语言却觉得没学明白的原因.因为学习的目的不明确,学习当然也没有动力.还有一个原因是C语言是工程实践性很强的语言,它不是来自某个研究所某个大学学院,而是实实在在从项目需要中产生,伴随着Unix的兴起而流行,语义简明清晰,功能强大而不臃肿,简洁而又不过分简单,实在是居家旅行工作学习必备

  • C语言 基本语法示例讲解

    C 基本语法 我们已经看过 C 程序的基本结构,这将有助于我们理解 C 语言的其他基本的构建块. C 的令牌(Tokens) C 程序由各种令牌组成,令牌可以是关键字.标识符.常量.字符串值,或者是一个符号.例如,下面的 C 语句包括五个令牌: printf("Hello, World! \n"); 这五个令牌分别是: printf ( "Hello, World! \n" ) ;  分号 ; 在 C 程序中,分号是语句结束符.也就是说,每个语句必须以分号结束.它表

  • C语言函数语法详解

    1.概述 在C语言中,函数是来完成子程序或者某个模块的功能.有主程序或者其他函数调用,其他函数之间可以相互调用.同一函数可以被一个或多个函数任意次调用. 注意:     a.一个C程序有一个或多个程序模块组成,每一个程序模块作为一个源程序文件.一个源文件可以为多个C程序共用.     b.程序在编译时是以源文件为单位进行编译,而不是以函数为单位进行编译.一个源文件就是一个编译单元     c.C程序的执行是从main函数开始,也是在main函数中结束整个程序     d.所有函数是平行的,即在定

  • python与c语言的语法有哪些不一样的

    python与C的区别如下: 1.语言类型不同. Python是一种动态类型语言,又是强类型语言.它们确定一个变量的类型是在您第一次给它赋值的时候.C是静态类型语言,一种在编译期间就确定数据类型的语言.大多数静态类型语言是通过要求在使用任一变量之前声明其数据类型来保证这一点的. 2.对象机制不同. Python中所有的数据,都是由对象或者对象之间的关系表示的,函数是对象,字符串是对象,每个东西都是对象的概念.每一个对象都有三种属性: 实体,类型和值. C中没有对象这个概念,只有"数据的表示&qu

  • C语言ASM汇编内嵌语法详解

    3 GCC Inline ASM GCC 支持在C/C++代码中嵌入汇编代码,这些汇编代码被称作GCC Inline ASM--GCC内联汇编.这是一个非常有用的功能,有利于我们将一些C/C++语法无法表达的指令直接潜入C/C++代码中,另外也允许我们直接写 C/C++代码中使用汇编编写简洁高效的代码. 1.基本内联汇编 GCC中基本的内联汇编非常易懂,我们先来看两个简单的例子: __asm__("movl %esp,%eax"); // 看起来很熟悉吧! 或者是 __asm__(&q

  • C语言的语法风格与代码书写规范指南

    C代码: #include <stdio.h> int main(void) { printf("That is Right Style\n"); return 0; } 在一个标准的C语言程序中,最特殊的莫过于main函数了,而说到底它就是一个函数而已,仅仅因为它地位特殊拥有第一执行权力,换句话说,难道因为一个人是省长它就不是人类了?所以函数该有的它都应该有,那么函数还有什么呢? 函数大体上分为内联函数(C99)(内联函数并非C++专属,C语言亦有,具体见前方链接)和非内

  • 基于JS脚本语言的基础语法详解

    JS脚本语言的基础语法:输出语法  alert("警告!");  confirm("确定吗?");   prompt("请输入密码");为弱类型语言: 开始时要嵌入JS代码:<script type="text/javascript"></script>: 关于写程序是需注意的基本语法: 1.所有的字符全都是英文半角的: 2.大部分情况下每条语句结束后要加分号: 3.每一块代码结束后加换行:4.程序前呼

  • C语言的基本语法详解

    目录 1.标识符与关键字 2.常量和符号常量 (1)常量和常量符号 (2)变量 3.C语言数据类型 (1)整型常量 整型变量 原码.反码和补码 (2)实型数据 实型常量 实型变量 实型变量的定义以及初始化 (3)字符型数据 ASCII码 字符型变量 转义字符字符 字符串常量 字符串变量 总结 1.标识符与关键字 给变量所取的名字叫变量名,定义变量的名字需要遵循标识符的命名规则. 标识符是用来标识变量.符号常量.数组.函数.文件等名字的有效字符序列. 标识符的命名规则: 1.只能由字母.数字和下划

  • C语言类的基本语法详解

    目录 1.由C语言的结构体进入到C++中的类 2.C++中如何定义类? 3.C++中实例化一个对象 4.C++类的访问限定及其封装 C++中的访问限定符 5.C++中类的作用域 6.成员变量和方法在类中是如何存储的? 总结 1.由C语言的结构体进入到C++中的类 我们在C语言中当需要定义多个变量的数据集合时,第一时间会想到使用结构体来进行定义,例如我们定义一个学生变量,包含姓名.年龄.性别等信息,代码示例如下: struct Student{ char name[12]; int age; ch

  • C语言自研定时器计划任务语法详解

    目录 为啥要自研 语法格式 执行计划 符号 模式 语法演示 基本操作 符号操作 模式操作 头文件 实现文件 为啥要自研 市面主流定时器计划任务语法: cron ,但是使用起来非常难受,设计的比较非人性话语法,我想一般人都没几个记住的,都是靠在线生成工具进行使用的,而且只能持续执行不是有限执行,下面举几个cron的案例: 具体想了解的可以自行百度,我试图记住语法,但是因为太混乱了,时间一长就忘了,没法只能到网上工具里生成,而且很多有限的场景没法生成因为cron不支持只执行几次或者有规律的执行,为了

  • Android Kotlin开发实例(Hello World!)及语法详解

    Android Kotlin开发实例及语法详解 前言 Kotlin是一种在 Java虚拟机上执行的静态型别编程语言,它主要是由俄罗斯圣彼得堡的JetBrains开发团队所发展出来的编程语言.该语言有几个优势 1. 简洁 它大大减少你需要写的样板代码的数量. 2. 安全 避免空指针异常等整个类的错误. 3. 通用 构建服务器端程序.Android 应用程序或者在浏览器中运行的前端程序. 4. 互操作性 通过 100% Java 互操作性,利用 JVM 既有框架和库. 配置 在我们的AndroidS

  • C语言柔性数组实例详解

    本文实例分析了C语言柔性数组的概念及用法,对于进一步学习C程序设计有一定的借鉴价值.分享给大家供大家参考.具体如下: 一般来说,结构中最后一个元素允许是未知大小的数组,这个数组就是柔性数组.但结构中的柔性数组前面必须至少一个其他成员,柔性数组成员允许结构中包含一个大小可变的数组,sizeof返回的这种结构大小不包括柔性数组的内存.包含柔数组成员的结构用malloc函数进行内存的动态分配,且分配的内存应该大于结构的大小以适应柔性数组的预期大小.柔性数组到底如何使用? 不完整类型 C和C++对于不完

  • Go语言正则表达式的使用详解

    正则表达式是一种进行模式匹配和文本操纵的功能强大的工具.正则表达式灵活.易用,按照它的语法规则,随需构造出的匹配模式就能够从原始文本中筛选出几乎任何你想要得到的字符组合. 准则 默认是最短匹配,只要字符串满足条件就返回. 如果没有匹配到,都是返回为nil. 如果需要做最长匹配,调用Longest()函数. 正则表达式功能:匹配(macth),查找(find)和替换(replace). 存在长度选择的函数,传入<0的数字表示匹配全部. 使用regexp调用 Match,MatchReader和 M

  • C++语法详解之封装、构造函数、析构函数

    大家先了解下什么是构造函数,什么是析构函数,作用是什么? 构造函数(方法)是对象创建完成后第一个被对象自动调用的方法.它存在于每个声明的类中,是一个特殊的成员方法.作用是执行一些初始化的任务.Php中使用__construct()声明构造方法,并且只能声明一个. 析构函数(方法)作用和构造方法正好相反,是对象被销毁之前最后一个被对象自动调用的方法.是PHP5中新添加的内容作用是用于实现在销毁一个对象之前执行一些特定的操作,诸如关闭文件和释放内存等. 下面在通过具体例子看下C++语法详解之封装.构

  • javascript中正则表达式语法详解

    好久都没有写博客了,主要是太懒了,尤其是在阳春三月,风和日丽的日子,太阳暖暖的照在身上,真想美美的睡上一觉.就导致了这篇博客拖到现在才开始动笔,javascript的正则这一块也不是什么新的东西,主要是以前本人一遇到写正则的需求就开始头大,头疼,网上剽窃,东拼西凑,反正就是各种不适应,所以我打算系统的把正则表达式看一遍,一来是自己有所提升,这一块知识点的查漏补缺,二来是给大家分享一下.好了,下面我们直接进入主题: 正则是匹配字符串特定模式的一种表达式,官方是这样说的,但我的理解不外乎就是匹配字符

随机推荐