c语言的重要性
C语言产生于1972年,是计算机的一种高级语言,目前在国际上还是很流行的,因为它具有低级程序语言的功能,所以也有人说它是中级语言。
对于大多数程序员来说。C语言是学习编程的第一门语言,也可以说是入门语言,C语言是现在众多高级语言的鼻祖。
一、第一个c程序:hello,world
#include<stdio.h>
int main()
{
//屏幕上打印双引号中的内容其中\n是转义字符(不打印)
printf("hello,wrold!\n");
return 0;
}
执行程序后,在显示器上打印的内容:
程序说明:
- main在c程序中有且仅有一个,是程序的入口
- 而因为使用了printf所以要引用头文件#include<stdio.h>(printf是c语言标准库函数,定义与头文件<stdio.h>)
- printf函数一般格式为:printf("<格式化字符串>",<参量表>)
二、注释
在c程序中注释有两种
注释是给程序员看的,编译器不看
多行注释:/*要注释的内容*/ (不能嵌套)
单行注释://要注释的内容
三、c语言基本字符
1)关键字
关键字又称为保留字,是c语言预先声明的具有特殊意义的单词,用户不能将这些关键字作自定义的标识符
a)数据类型关键字:char、double、float、int、long、short、unsigned、union、viod、enum、signed、struct 等
b)控制语句关键字:do、break、case、continue、for、goto、return、else、default、if、while、switch、extern 等
c)储存类型关键字:auto、register、static 等
d)其他关键字:const、sizeof、typedef、volatile、inline 等
2)标识符
c语言对标识符规定:
- 构成:以字母或下划线“_”开头,后面由字母、数字、下划线组成
- 大小写字母含义不同,例如,name和Name是两个不同的标识符
- 一般c语言不对标识符的长度限制,但受c语言编译器限制(一般长度最好不要超8位,有些编译器会将前8位相同的标识符,认为是一个相同的标识符)
3)运算符
- 算术运算符
注:a++与++a的区别是:前者是先使用,再自增,后者是先自增,再使用。例如:
注:a--与--a的区别是:前者是先使用,再自减,后者是先自减,再使用。例如:
部分运算符的优先级和结合性
/运算
注:对于/运算,其操作数可以为整型或实型的常量、变量和函数。如果两个操作数中有一个是实型,则结果为实型,若两个操作数都是整型,则觉果为整形(舍去小数部分,没有四舍五入)
例如:5/2.0=2.5,5/2=2
而如果除数或被除数中有一个为负值,则按照c99规定,除运算舍入的方向采用向0舍入
例如:-9/7的值为-1
最后你们认为这个表达式的结果是多少呢?
2/3*1000(答案在最下面)
%运算
%运算符要求两个操作数必须为整数,其运算结果等于两数相除后的余数,余数的符号始终与分子(被除数)的符号一致。
要注意分母(除数)不能为0
例如:9%2=1,9%3=0,-9%4=-1,9%-4=1,-9%-4=-1
此外C语言支持求负运算,例如-(+9)的结果为9,-(+(-5))的结果为5
4)sizeof运算符
运算符sizeof是求某一操作对象占用的内存字节数,其运算结果为整型数据 如下表:
如果操作数为数据类型标识,则必须用括号括住,如sizeof(int);如果操作数是表达式,则可用可不用,如(sizeof(var_name)),sizeof var_name 等都是正确形式。
注:sizeof操作符不能用于函数类型、不完全类型或位字段。
sizeof(max)/*若此处max定义为interesting马修();*/
sizeof(void)
上面示例均为不正确的使用形式
c规定:sizeof(long long)>=sizeof(long)>=sizeof(int)>=sizeof(short)
四、数据类型
1)常量
在c语言中常量有三大类:数、字符、字符串。
常量:在程序执行中,其值不能改变的量称为常量
整型常量简称整数,在c语言中整型常量用三种数值来表示:
1.十进制整数:数码取值范围为0~9
2.八进制整数:数码取值范围为0~7,通常以数字0开头。如十进制数12,用八进制来表达为014
3.十六进制整数:数值取值范围为0~9、A~F或a~f,通常已0x(数字0和字母x)或0X开头。如0x1b23、0X2B等。
2)实型常量
在计算机科学中,把带小数的数称为实数。c语言中的实数有float(单精度)和double(双精度)实数,它们在计算机内存中是以浮点数形式存放的,又称浮点数,实型常量只能用十进制形式来表示,不能用八进制和十六进制表示。
实型有两种表示方法:
1.十进制形式:由数码0~9、小数点及正负号组成。
2.指数形式:由十进制a,加阶码标识e或E以及阶码n组成。如aen或aEn。
其中a为实数,n为十进制整数,“E”或“e”两边必须有数字。
如:2.1e5(2.1*10^5)、5.4E-8(5.4*10^-8)、-9.9E-5(-9.9*10^-5)
3)字符型常量
字符常量是由一对单引号括起来的的单个字符构成,例如'a'、'B'、'1'等都是有效的字符型常量
在c语言中字符是用其对应的ASCII码值来表示的,一个字符占一个字节。例如字符'a'、'B'、'0'的ASCII码值分别为97、57、48.
c语言中还有一种特殊形式的字符常量,这就是一反斜杠'\'开头,后面跟一个或几个字符,它们便没有原来的意义了而是具有特殊意义,故也称为“转义字符”。
例如:'\n'表示换行字符,他的ASCII码值为10,在字符常量中要使用单引号和反斜杠时,必须用转义字符,即在这些字符前加上反斜杠 '\\' '\''
给大家推荐一个好玩的程序:
测试'\a'响铃
4 )字符串常量
在c程序中编写时使用一对双引号括起来的字符序列就是字符串常量
注:这里的双引号仅起定界符作用,并不是字符串中的字符。
字符串常量在内存中存储时,除了一个字符占一个字节外,还会自动在其尾部增加一个转义字符'\0',用这个特殊的字符作为字符串结束的标识。或者说,若干个字符后有了结束标识,'\0,'才称为c语言的字符串。
例如字符串"computer"包含8个字符,但其在内存中占用9个字节 如下表
c | o | m | p | u | t | e | r | \0 |
系统规定字符串的结束标识'\0'的值是0。因此,'\0'的写法等同于0,而不等同与'0',
因为'\0'的ASCII码值为0,'0'的ASCII码值为48。
程序说明 :printf()函数输出4个常量的值,前两个常量的类型是字符常量,后面两个是字符串常量。
- 第一个字符是转义字符'\''
- 第二个字符是转义字符'\\'
- 第一个字符串常量是"ab\"c\"",它包含两个双引号“"”,在字符串中用转义字符表示
- 第二个字符串常量是"a\\b",它包含了一个反斜杠“\”,在字符串中用转义字符表示
字符串中字符的个数(不包括结束标识'\0')称为字符串长度。因此字符串“a”长度为1,储存
长度为2,字符串"ab\"c\""长度为5.
以上几种常量一般从字面上即可判别,统称为字面常量或直接常量。
5)符号常量
在c语言中还可以用标识符来代表一个常量,符号常量在使用之前必须先定义。
使用宏定义命令#define定义符号常量。一般形式为:
#define 标识符 常量表达式
#include<stdio.h>
#define PI 3.14
int main()
{
float r, s, v;
scanf("%f", &r);//输入球的半径
s = 4 * PI * r * r;//求球的表面积
v = r * s / 3;//求球的体积
printf("s=%f v=%f\n", s, v);
return 0;
}
本程序中用#define宏定义命令定义PI,它代表常量3.14,此后凡在本程序中出现PI都代表3
.14,它和常量一样参运算。
习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别
用字符常量的好处是含义清楚,也可以实现“一改全改”的效果
#define PI 3.1415926
#define PI2 PI*2 //定义PI2符号常量,值为2*3.1415926
宏定义中常数表达式可由常量、以声明过的符号常量和运算符组成
如果那些常量没有讲到的 欢迎补充!!!
6)变量
变量与常量相对,顾名思义:在程序运行过程中其值可以发生变化的一种数据对象称为变量
每一个变量都用一个标识符来表示,该标识符称为变量名。每一个变量都属于某个确定的数据类型,在内存中占一定的存储单元,在该存储单元中存放变量的值。
变量具有属性如下:
- 地址:变量所在存储单元编号。不同类型的变量占据不同数量的存储单元,存放变量第一个存储单元地址(变量的起始地址)就是该变量的地址
- 变量名:变量所在存储单元起始地址的助记符
- 变量值:存储在相应存储单元中的数据,即该变量所具有的值。程序通过变量名存取该存储单元的值
- 类型:变量所属的数据类型。类型决定了变量的存储方式(该变量占据的存储单元的字节和存储格式)以及允许对变量采取的操作
如图变量a的属性:类型为int,分配在1000开始的存储单元中,它的值为10
int i, j num;//说明i,j,num为整形变量
float a, b, sum;//说明a,b,sum为实型变量
char ch, c;//说明ch,c为字符型变量
1,整型变量
例如:int i =7
整形变量在内存中的存储形式
十进制7的二进制形式为111,但在内存中却占4个字节
整型变量的分类
整型变量的基本类型符为int,可以根据数值的范围将变量定义为基本整形、短整型、长整型
在int之前可以根据需要加上修饰符:short(短型)、long(长型)
a.基本整形:int
b.短整型:short int 或 short
c.长整型:long int 或long
一个int型变量的取值范围-2^31~(2^31)-1
加上unsigned修饰符以指定其“无符号数”
加上signed修饰符以指定其“有符号数”
例如: 有符号基本整形:[signed] int
有符号基本整形:[signed] short [int]
有符号基本整形:[signed] long [int]
无符号基本整形:[unsigned] int
无符号基本整形:[unsigned] short [int]
无符号基本整形:[unsigned] long [int]
其中 signed一般省略 方括号可有可无
类型 | 字节数 |
int | 4 |
unsigned int | 4 |
short | 2 |
unsigned short | 2 |
long | 4 |
unsigned long | 4 |
程序说明:int类型的整形变量允许的最大值为2147453647,如果加1会溢出
当数据超过范围时就会溢出,但运行时不会报错,所以加1后并不能得到2147483648,而是-2147483648
2.实型变量
实型变量分为单精度(float)、双精度(double)和长双精度(long double)
在vs2019的环境下结果如下:
初学者知道有long double即可
3.字符型变量
类型 | 字节数 | 取值范围 |
[signed char] | 1 | -128~127 |
unsigned char | 1 | 0~255 |
int main()
{
char ch1, ch2 = 0;
ch1 = 'a';
ch2 = 'b';
ch1 = ch1 - 32;//字母大写转下写运算 小写字母的ASCII码值比大写字母多32
ch2 = ch2 - 32;
printf("%c %c\n",ch1, ch2);//以字符形式输出
printf("%d %d\n", ch1, ch2);//以整数形式输出
return 0;
}
执行结果:
如果将程序中 ch1='a';ch2='b'; 改为 ch1=97;ch2=93; 结果不变
注:不能把字符串常量赋值给字符型变量 如char ch ="a";
"a"占两个字节,而字符型变量仅有一个字节的容量
在从语言中如果想把字符串存到变量中,可以使用字符数组,数组中每个元素存放一个字符
最后表达式2/3*1000的值为0,因为2/3的值为0。