【C语言程序设计学习】一、C语法基础


一、 概述

数据 是C语言程序操作的基本对象,在C语言中,按被定义变量的性质、表示形式、占据存储空间的多少、构造特点可把数据划分为基本数据类型、构造数据类型、指针类型和空类型,如图所示:

二、标识符

在C语言中,所谓标识符,是指用来标识程序中用到的变量名、函数名、类型名、数组名、文件名及符号常量名等的有效字符序列。标识符的命名规则是:

  1. 组成:由字母、数字及下划线组成;
  2. 开头:不能以数字开头,第一个字符必须是字母或下划线;
  3. 不能是关键字。

三、关键字

在c语言中,具有特别意义的字符串称为关键字,也称保留字。

四、常量和变量

C程序的数据中,按其值是否可改变分为常量和变量。在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。

1.常量

常量可分为直接常量和符号常量两种。

  • 直接常量又包括整型常量、实型(浮点型)常量和字符常量。
  • 符号常量是用标识符来表示一个常量。符号常量在使用之前必须先定义,其一般形式为:
cpp 复制代码
#define PI 3.1415926

其含义是以标识符PI来代表数据3.1415926。宏定义命令之后,程序中用到的3.1415926的地方都可以用标识符PI来替代。

宏定义可以增强程序的可维护性。例如,当需要修改某一常量时,只需要修改定义中的常量值即可。

习惯上符号常量的标识符用大写字母表示。

2.变量

每个变量都有一个名字,这个名字称为变量名。变量名必须是合法的标识符,它代表了某个存储空间及其所存储的数据。这个空间所存储的数据称为该变量的值。

(1)变量的定义

变量在使用之前必须先定义,定义变量的一般格式为:

cpp 复制代码
类型说明符 变量名;

例如,定义一个整型变量a

cpp 复制代码
int a;

定义变量时,应注意下面4点:

  • 允许在一个类型说明符后定义多个相同类型的变量,各变量名之间用逗号隔开,具体格式为:
cpp 复制代码
类型说明符 变量名1,变量名2,变量名3,......
  • 类型说明符与变量名之间至少有一个空格;
  • 最后一个变量名之后必须以;结尾
  • 变量定义必须放在变量使用之前,一般放在函数体的开始部分。

(2)变量的赋值

在定义变量的时候,可以同时给变量赋初始值,这种形式也成为变量的初始化。例如,定义一个整型变量a,并为其赋值0

cpp 复制代码
int a = 0;

也可以先定义变量,再对变量赋值。

cpp 复制代码
int a;
a = 0;

五、基本数据类型

1.整型

(1)整型常量

整型常量的表示形式如下:

  • 十进制整数:如18,-175
  • 八进制整数:以0开头,用0~7这8个数字组合表达。例如:0154
  • 十六进制数:以0x或0X开头,用0~9这10个数字及字母A~F组合表达。例如:0x15F

【注意】

默认整型常量为int类型

在常量后面加上字符L(l)和U(u)进行修饰,L表示该常量为长整型,U表示该常量为无符号整型。例如:12567895468L、500U等。

(2)整型变量

整型变量可分为有符号整型和无符号整型两大类。

有符号整型指的是所存储的数值可以带正负号,所以需要一个符号位。

无符号整型指的是数值只有整数。

【注意】默认情况下,C程序的整型表里是有符号的,若要使用无符号整型,需要用关键字unsigned声明。

为了适应不同的应用场合,C程序中可以定义多种整数类型,其长度各不相同。其中,最常用的是有符号整型(用关键字int表示)长度为32位(4个字节)。此外,还有长整型(用关键字long表示)和短整型(用关键字short表示)。

编写程序时,除可以指明变量是长整型或短整型,有符号整型或无符号整型,还可以把说明符组合起来。因此,整型变量可以分为有符号基本整型、无符号基本整型、有符号短整型、无符号短整型、有符号长整型和无符号长整型这6种。各类型的关键字和取值范围如表所示。

【数据溢出】

在c程序中,在C程序中,各种整型变量都有其特定的表示范围,当一个数据超出了其类型所能表示的范围时,称为数据溢出。

【案例3.1】

cpp 复制代码
#include <stdio.h>
int main(){
    short a,b;
    a = 32757;
    b = a+1;
    printf("a=%d,b=%d",a,b);
    return 0;
}

【运行结果】 程序运行结果如图所示。

【程序说明】 这里定义的变量a和b是有符号短整型,其取值范围为−32768~32767,所以当a的值加1变成了32768后就会发生"溢出"。但程序运行时并不报错,它好像汽车里程表一样,达到最大值以后,又从最小值开始计数。所以32767加1后得到的结果不是32768,而是−32768。

2.浮点型

浮点型数据也称为实型数据,是带有小数点或指数符号的数值数据,包括浮点型常量和浮点型变量两类。

(1)浮点型常量

浮点型常量的表示只采用十进制形式,包括直接十进制形式和指数形式两类。 (

1)直接十进制形式,如0.0013、−1482.5。

2)指数形式,通常用来表示一些比较大或者比较小的数值,格式为 实数部分+字母E或e+正负号+整数部分 其中字母E或e表示十次方,正负号表示指数部分的符号,整数部分为幂的大小。字母E或e之前必须有数字(实数部分),之后的数字必须为整数。例如,0.0013可表示为1.3e−3,−1482.5可表示为−1.4825e3。

(2)浮点型变量

根据其精度不同,浮点型变量可以分为单精度类型、双精度类型和长双精度类型。

1)单精度类型使用关键字float来定义变量,它在内存中占4个字节,提供6位有效数字,取值范围为−3.4×1038~−1.2×10−38、0和1.2×10−38~3.4×1038。

【例3-1-2】 单精度型数据的有效位。

cpp 复制代码
#include <stdio.h>
int main()
{
	float f;					/*定义单精度型变量f*/
	f=1234567.95789;			/*将值1234567.95789赋给变量f*/
	printf("f=%f\n",f);		                            /*输出变量f的值*/
	return 0;					/*函数返回值0*/
} 

【运行结果】 程序运行结果如图所示。

2)双精度类型使用关键字double来定义变量,它在内存中占8个字节,提供15位有效数字,取值范围为−1.7×10308~−2.3×10−308、0和2.3×10−308~1.7×10308。

【例3-1-3】 将例3-1-2中的变量定义为double类型。

cpp 复制代码
#include <stdio.h>
int main()
{
	double f;					/*定义双精度型变量f*/
	f=1234567.95789;			/*将值1234567.95789赋给变量f*/
	printf("f=%f\n",f);		/*输出变量f的值*/
	return 0;					/*函数返回值0*/
}

3)长双精度类型使用的关键字是long double。不同的编译系统对long double型的处理方法不同。例如,Turbo C 2.0对long double型分配16个字节,而Visual C++则对long double型和double型一样处理,其有效数字位数和取值范围也与double型一致。

3.字符型

字符型数据包括字符型常量和字符型变量。

1)字符型常量 字符型常量包括字符常量、字符串常量和转义字符。

  • C程序中的字符常量必须用单撇号(单引号)括起来,且单撇号中只能是单个字符,如'A'、'a'、'8'、'&'。

  • 由于字符型数据在C程序中是以ASCII码形式存储的,因此字符常量的值就是其对应的ASCII码值。例如,字符'A'的ASCII码值为65,'a'的ASCII码值为97。

2)字符串常量是一对双撇号(双引号)括起来的一个或多个字符。例如,"A"、"China"、"Welcome to beijing"等。 C程序中存储字符串常量时,系统会在字符串的末尾自动加一个'\0'作为字符串的结束标志。例如,字符串常量"China"在内存中的存储形式如图所示。

3)转义字符是C程序中表示字符的一种特殊形式,它以反斜杠"\"作为标志符号,后面跟一个字符(也可以是一个八进制或十六进制数)。转义字符具有特定的含义,不同于字符原有的意义,如转义字符'\0'表示字符串结束。常用转义字符如表所示。

字符型变量用来存储单个字符,类型说明符是char。字符型变量定义的格式和书写规则都与整型变量相同。例如:

cpp 复制代码
char c1,c2;			/*定义字符型变量c1和c2*/
c1='a';			/*将'a'赋值给c1*/
c2='b';			/*将'b'赋值给c2*/

4. 数据类型转换

在C程序中,不同类型的数据可以混合运算,但在运算之前应先转换成同一类型。数据类型的转换有自动类型转换和强制类型转换两种方式。

1)自动类型转换 自动类型转换是由编译系统自动进行的,不需要人为干预。自动类型转换要遵循以下3个基本规则。

  • 若参与运算的变量类型不同,须先转换成同一类型(自动转换),然后进行运算。
  • "低级向高级转换"原则。如果运算中有几种不同类型的操作数,则统一转换为最高级的数据类型后再进行运算。数据类型的转换方向如图所示。
  • 赋值运算两边的数据类型不同时,赋值号右边数据的类型将会转换为左边数据的类型。

【例3-1-4】 数据类型转换的应用。

cpp 复制代码
#include <stdio.h> 
int main() 
{
	int a,x;						/*定义整型变量a和x*/
	float b;						/*定义单精度型变量b*/
	double c,y;					/*定义双精度型变量c和y*/
	a=1; 							/*将1赋值给a*/
	b=2.1;							/*将2.1赋值给b*/
	c=3.2;							/*将3.2赋值给c*/
	x=a+b+c;						/*将a、b、c的和赋值给x*/
y=a+b+c;						/*将a、b、c的和赋值给y*/
	printf("x=%d,y=%f",x,y);	/*输出整型变量x和单精度型变量y*/
	return 0;
}

【运行结果】 程序运行结果如图所示。

【程序说明】 计算a+b+c时,先将变量a和变量b都转换成double型,然后计算,所以结果为double型。但赋值时,x为int型,故会将计算结果转换成int型赋值给x,x的值为6。

相关推荐
逝水如流年轻往返染尘2 小时前
JAVA中的抽象类
java·开发语言
困死,根本不会2 小时前
【C 语言】指针学习笔记:从底层原理到实战应用
c语言·开发语言·笔记·学习·算法
自动化和Linux2 小时前
C语言_scanf(),strlen(),size()的特性和各自的区别
c语言·开发语言
努力努力再努力...2 小时前
学习Multipath多路径
学习
小郝 小郝2 小时前
51 与32 单片机LED控制详解
c语言·开发语言·经验分享·学习·51单片机
星空露珠3 小时前
迷你世界UGC3.0脚本Wiki全局函数
开发语言·数据库·算法·游戏·lua
金山几座3 小时前
C#学习记录-类(Class)
开发语言·学习·c#
AsDuang3 小时前
Python 3.12 MagicMethods - 55 - __irshift__
开发语言·python
共享家95273 小时前
Java入门(多态)
java·开发语言