前言
学习c语言是一项非常系统的工程,要循序渐进,以下文章只是初识c语言,就是简单认识一下c语言,从简单的认识c语言,由浅入深,学习一门编程语言是一条艰辛与快乐共存的一条路,一定要坚持下去 。
首先对c语言有一个简单的认识,再对这些基础的知识进行扩展,进行更加细致的学习。
一,什么是C语言
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易
的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语
言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的
C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超
级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制
定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 [1] 目前2011年12月8
日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标
准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉
字编程。
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
二,第一个c语言程序
#include <stdio.h> int main() { printf("Hello word"); return 0; }
这段代码的功能是在屏幕上打印一个 “Hello word”。
代码解析;
第一行:头文件,在使用c语言自带的库函数之前一定要包含对应的 ,“头文件”。
第二行:main函数,在c语言中main函数是程序的入口,程序是从main函数开始执行的,main函数在程序中只能存在一个。
第三行:printf,printf是一个库函数 - c语言编译器提供的一个现成的函数,直接可以使用,其功能就是在屏幕上打印数据。
第四行:return 0 - 返回值。
这就是第一个c语言程序的内容;同学们有没有get到呢?
三, 数据类型
char //字符数据类型 short //短整型 int //整形 long //长整型 long long //更长的整形 float //单精度浮点数 double //双精度浮点数
int类型
数据类型大小是 4 字节,能表示的数值范围是
-2^(32-1) – 2^(32-1)-1 (即 -2147483648 ~ 2147483647)
打印类型是 %d ,使用格式为 int 名 = 值;
short类型
数据类型大小是 2 字节,能表示的数值范围是
-2^(16-1) – 2(16-1) -1 (即 -32768 ~ 32767)
打印类型是 %hd ,使用格式为 short 名 = 值;
long类型
数据类型大小是 4 字节,能表示的数值范围是
-2^(32-1) – 2^(32-1)-1 (即 -2147483648 ~ 2147483647)
打印类型是 %ld ,使用格式为 int 名 = 值;
long long类型
数据类型大小是 8 字节,能表示的数值范围是
-2^(63) ~ 2^(63)-1 (这个数足够大了)
打印类型是 %lld ,使用格式为 long long 名 = 值;
单精度浮点型(float)
单精度浮点型的大小是 4 字节
float v1 = 4.345;
unsigned float v1 = 4.345; 无符号的 float 数据
格式匹配符是:%f , 默认保留 6 位小数。
双精度浮点型(double)
双精度浮点型的大小为 8 字节
double v2 = 5.678;
unsigned double v2 = 5.678; 无符号的 double 数据
当然在c语言里面,肯定不止这些数据类型,比如在c99里面还引入了:Bool(布尔),long double
各种c语言数据类型在内存中所占空间的大小(单位:字节)
注:sizeof - 是一个操作符,是计算类型 / 变量所占内存空间的大小。
注:%d - 是一10进制的形式打印一个整数 , \n – 是换行
四,变量,常量
变量和常量在c语言中就是一个容器,通常是一块内存。
生活中有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)
有些值是可变的(比如:年龄,体重,薪资等等)
不变的值,在c语言中用常量的概念来表示,变化的值用变量来表示。
4.1定义变量的方法
int age = 150; float wei = 42.1f; char ch ='w';
方法如下:
类型 变量名;
类型 变量名 = 初始值 (最好给一个初始值)
4.2变量的命名
只能由字母(包括大写和小写)、数字和下划线( _ )组成。
不能以数字开头。
长度不能超过63个字符。
变量名中区分大小写的。
变量名不能使用关键字。
起名字是非常讲究的,最好要有意义。
4.3变量的分类、
局部变量 ;函数内部定义的变量只在本函数范围内有效,也就是只有本函数内才能引用它们,在此函数外不能使用这些变量
局部变量出现在三种地方:
(1)在函数的开头定义的变量
(2) 在函数内的复合语句内定义的变量
(3)形式参数
全局变量; 在函数外部定义的变量就是全局变量或外部变量;全局变量为该源文件中所有函数所共有,它的作用范围是从变量定义的位置到源文件结束
#include <stdio.h> int a=20; //全局变量 int main() { int a=10; //局部变量 printf("a=%d",a); return 0; }
总结:原则上变量名尽量不要冲突,当全局变量和局部变量的名字冲突的情况下,局部优先。
4.4变量的使用
写一个代码算两个数的值
#include <stdio.h> int main() { int num1 = 0; int num2 = 0; int sum = 0; printf("输入两个操作数:>"); scanf("%d %d", &num1, &num2); sum = num1 + num2; printf("sum = %d\n", sum); return 0; }
注;scanf是一个输入函数。
4.5变量的作用域和生命周期
作用域
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用
的而限定这个名字的可用性的代码范围就是这个名字的作用域。
- 局部变量的作用域是变量所在的局部范围。
- 全局变量的作用域是整个工程。
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段 - 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
- 全局变量的生命周期是:整个程序的生命周期。
4.6常量
常量顾名思义,就是一个不变的量,在生活中我们会发现有很多值是不会发生改变的,这种量在c语言中我们就称为“常量”。
常量在c语言中的定义和变量还是有差距的。
常量分为以下几种
1.字面常量
2.coust修饰的常变量
3.#define定义的标识符常量
4.枚举常量
以下是常量的使用
#include <stdio.h> //举例 enum Sex { MALE, FEMALE, SECRET }; //括号中的MALE,FEMALE,SECRET是枚举常量 int main() { //字面常量演示 3.14;//字面常量 1000;//字面常量 //const 修饰的常变量 const float pai = 3.14f; //这里的pai是const修饰的常变量 pai = 5.14;//是不能直接修改的! //#define的标识符常量 演示 #define MAX 100 printf("max = %d\n", MAX); //枚举常量演示 printf("%d\n", MALE); printf("%d\n", FEMALE); printf("%d\n", SECRET); //注:枚举常量的默认是从0开始,依次向下递增1的 return 0; }
五,字符串
“Hello word”
像这种由双引号引起来的一系列字符,在c语言中叫做字符串。
1.字符串所占内存空间
在c语言中,字符串的结束标志是一个‘\0’,的转义字符。在计算字符串长度的时候’\0’,不算字符串的长度。
那我们直接上代码展示吧;
我们再来看一个代码就能说明’\0’,的重要性。
在这个代码中,ch1没有定义’\0’,程序就会一直往后读,直到找到’\0’,所以会产生一个随机值。
注:strlen是用来求字符串长度的。
2.字符串的初始化
为了保存字符,我们将每一个字符都一 一赋值不是一件简单的事情。
我介绍两种初始化方式
char str1 []={'a','b','c','\0'} char str2 []="abc"
通过这种方式初始化会更加简洁也更加常用。
六,转义字符
转义字符 – 转变它原来的意思
\? | 在书写连续多个问号是使用,防止他们被解析成三字母词 |
\’ | 用于表示字符常量 |
\" | 用于表示一个字符串内部的双引号 |
\\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制的数字。如:\130表示字符X |
\xdd | dd表示2个十六进制数字。如:\30表示字符0 |
在这里简单介绍一下转义字符的用法
如果说我们想在屏幕上输出”c:\tset\test.c“这样一串字符
正常来说我们可以这样写
为什么会出错呢?
这里就涉及到了转义字符,’\t‘会被解释成水平制表符,我们可以加一个’\‘,防止被解释为一个转义序列符。
七,注释
- 代码中有不需要的代码可以直接删除,也可以注释掉
- 代码中有些代码比较难懂,可以加一下注释文字
- 注释有两种风格:
C语言风格的注释 /xxxxxx/
缺陷:不能嵌套注释
C++风格的注释 //xxxxxxxx
可以注释一行也可以注释多行。
八,操作符
在这样只是简单认识一下操作符,分别有哪些类型的操作符,后期的文章会做详细说明。
算数操作符
+ - * / %
移位操作符
>> <<
位操作符
& ^ |
赋值操作符
= += -= *= /= &= ^= |= >>= <<=
单目操作符
! 逻辑反操作 - 负值 + 正值 & 取地址 sizeof 操作数的类型长度(以字节为单位) ~ 对一个数的二进制按位取反 -- 前置、后置-- ++ 前置、后置++ * 间接访问操作符(解引用操作符) (类型) 强制类型转换
关系操作符
> >= < <= != 用于测试“不相等” == 用于测试“相等”
逻辑操作符
&& 逻辑与 || 逻辑或
条件操作符
exp1 ? exp2 : exp3
逗号表达式
exp1, exp2, exp3, …expN
下标引用、函数调用和结构成员
[] () . ->
九,关键字
c语言中提供了非常丰富的关键字,这些关键字都是语言本身预先设定好的,用户自己是不能创造关键字的。
可以大致可分为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。
1、数据类型关键字(12个):
(1) char :声明字符型变量或函数
(2) double :声明双精度变量或函数
(3) enum :声明枚举类型
(4) float:声明浮点型变量或函数
(5) int: 声明整型变量或函数
(6) long :声明长整型变量或函数
(7) short :声明短整型变量或函数
(8) signed:声明有符号类型变量或函数
(9) struct:声明结构体变量或函数
(10) union:声明共用体(联合)数据类型
(11) unsigned:声明无符号类型变量或函数
(12) void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)
2、控制语句关键字(12个):
A. 循环语句
(1) for:一种循环语句
(2) do :循环语句的循环体
(3) while :循环语句的循环条件
(4) break:跳出当前循环
(5) continue:结束当前循环,开始下一轮循环
B. 条件语句
(1) if: 条件语句
(2) else :条件语句否定分支(与 if 连用)
(3) goto:无条件跳转语句
C. 开关语句
(1) switch :用于开关语句
(2) case:开关语句分支
(3)default:开关语句中的“其他”分支
D. 返回语句
return :子程序返回语句(可以带参数,也看不带参数)
3、存储类型关键字(4个)
(1)auto :声明自动变量 一般不使用
(2)extern:声明变量是在其他文件正声明(也可以看做是引用变量)
(3)register:声明寄存器变量
(4)static :声明静态变量
4、其它关键字(4个):
(1)const :声明只读变量
(2)sizeof:计算数据类型长度
(3)typedef:用以给数据类型取别名(当然还有其他作用
(4)volatile:说明变量在程序执行中可被隐含地改变c