在 C 语言程序中将数据分为两种:字面量(常量)和变量。数组
(一) 字面量字面量(也有叫“常量”的)指的是数值固定的量,“一看就能看出来”。在程序中,常量只能被引用,不能被修
改。ide
在 C 程序中经常使用的字面量有如下几种:
第 1 种 整型(整数类型)。例如:100、31四、0、-200 等。
示例代码函数
#include <stdio.h> int main() { printf("%d\n",200); printf("%d\n",-100); getchar(); return 0; }
程序分析:学习
第 2 种 浮点型。其实就是小数。3d
示例代码:调试
#include <stdio.h> int main() { printf("%f\n",3.14); printf("%f\n",-12.2); getchar(); return 0; }
默认状况下,输出浮点型保留小数点后 6 位数字。因此 3.14 会输出 3.140000,-12.2 输出-12.20000。blog
第 3 种 字符型。在程序中,使用英文单引号括起来的字符被称为字符型。例如:’a’、’1’、’=’、’?’、’#’等都是合法的字符。内存
【注意】
字符类型只能是单个字符,不能写成’ab’、’12’、’=?’。作用域
示例代码:字符串
#include <stdio.h> int main() { printf("%c\n",'A'); printf("%c\n",'#'); getchar(); return 0; }
第 4 种 字符串。在程序中,使用英文双引号将若干个字符括起来的都是字符串(注意不包括双引号自己)。例如:”124“、”hello”、”hello world”等。
【注意】
字符串只能使用双引号包裹,不能写成’124’、’hello’、’hello world’。
示例代码:
#include <stdio.h> int main() { printf("123\n"); printf("hello world"); getchar(); return 0; }(二) 变量
在 C 语言中,一个合法的变量由 3 部分组成:变量类型、变量名、变量值。变量类型:变量的类型是用来规定变量对应内存空间的大小和能盛放的东西。 变量名:变量名是用来标记变量对应的内存空间。就比如,有 10 个如出一辙的杯子,从外表看根本没法区分。可是,若是给每一个杯子都作一个标记,好比依次贴上标签:“1 号”、“2号”……“10 号”,这样就不会混淆了。同理,变量名也是一样的做用,经过变量名就能够精准的找到变量对应的内存空间。变量值:变量值是变量名标记内存空间中的数据。就比如,杯子中装的可乐、咖啡等。
(三) 标识符与关键字在 C 语言中,用来对变量,函数,数组等命名的字符序列被称为标识符。好比:变量名a、函数名 printf 等都是标识符。C 语言对标识符有如下规定:
【注意】C 语言是严格区分大小写的,好比:max,Max,MAx,MAX 就是 4 个不相同
的标识符。
C 语言中具备特殊用途的单词被称为关键字。当定义标识符时,不要让标识符与关键字相同,不然编译没法经过。C 语言共有以下的关键字:break、case、char、const、for、if、void、int、long 等。
(四) 基本数据类型定义变量并赋初值的基本语法:变量类型 变量名=变量值;
好比:int a=3; 定义一个整数类型变量 a,a 的值是 3
int 能够定义整数类型(简称整型)。int 类型数据在 printf 函数中通常采用%d 格式进行输出,%d 表示“十进制整数”形式。
#include<stdio.h> int main() { int a=200; printf("%d\n",a); getchar(); return 0; }
解释一下:int a=200;
printf("%d\n",a);的意思是:把 a 的值带入参数的这个位置。和 printf("%d\n",200);效果同样
注意,不要写成 printf("%d\n","a");什么都不加,才表明变量。
浮点型有如下几种:
float、double 的区别在于表示范围和精度不同。须要注意的就是给 float 赋值字面量的时候须要以 f 结尾,不然会有警告。
#include<stdio.h> int main() { float f=3.14f; double d=3.14; printf("%f\n",f); printf("%lf\n",d); getchar(); return 0; }
输出 double 要用%lf,虽然用%f 也行,可是建议用%lf。
VS2012 中执行的是 C89 标准,变量必须在全部其余代码以前。
char 类型数据在 printf 函数中通常采用%c 格式进行输出。
#include<stdio.h> int main() { char c='A'; printf("%c\n",c); getchar(); return 0; }
在 C 语言中,有一类特殊字符,该类字符是以字符\开头的字符序列。例’\n’,它表明一个“换行”符。这类字符没法用通常形式表示,只能采用这种特殊的形式表示,这类字符被称为转义字符。
‘\n’ 表明回车换行。
#include<stdio.h> int main() { printf("hello world\n"); printf("hello\nworld); getchar(); return 0; } /* 输出结果 hello world hello world */
\” 表明双引号字符(“)。
因为在 C 语言中,双引号已经被用于表示字符串的开始与结束标志,也就是说,双引号通常都是成对出现的。例如:”ABC”,’#?*’,”123”……等等。可是,若是在字符串中显示双引号,该如何表示呢?有些读者很天然的想到了下面的写法:
“hello”world” //错误写法
这是一种错误写法,前面已经讲过双引号(“)有特殊意义:当编译器读取到第一个双引号时认为是字符串的开始,读取到第二个双引号时认为是字符串的结束,而后把两个双引号之间的内容当作字符串解析。
因为编译器会把前两个双引号之间的内容当作字符串解析,把第三个单引号当作字符串开始标志对待,而后编译器会再去寻找下一个双引号当作字符串的结束标志,若是找不到就报错。
为了解决这种问题,在 C 语言中使用\对双引号进行转义例如:\”,此时双引号就是普通字符,再也不具备特殊的意义。
#include<stdio.h> int main() { printf("hello \"world"); getchar(); return 0; }
\
单斜线(\)也是字符,该如何显示呢?使用\对反斜线\进行转义例如:\\。
#include<stdio.h> int main() { printf("%c\n",'\\'); printf("hello\\world"); getchar(); return 0; }
在 C 语言中是没有字符串类型的,所谓的字符串本质上是由单个的字符构成,例如:”rupeng.com”,注意使用双银行包裹起来。”helloworld”能够看做由字符’h’、’e’、’l’、’l’、‘o’、’w’、’o’、’r’、’l’、’d’组成(其实结尾还有一个'\0',初学者先不用理解这一点)。
在 printf 中用%s 输出字符串。
字符串是被拆分为单个字符进行存储,输出时也按照存储的顺序连续输出。作个形象的比喻:若是把字符串当作一串糖葫芦,字符就是每个山楂:
占位符 | 类型 | 说明 |
---|---|---|
%d 或者%i | int | 以十进制输出,%i 是老用法 |
%f | float | 还能够指定精度,%.2f 就是保留 2 位小数。 |
%lf | double | |
%c | char | 也能够用%d 输出 char,输出的就是字符的 ASCII 码 |
%s | 字符串 |
printf 中数据类型必定不能用错,float 类型必须用%f,整数必须用%d,若是用错了会发现结果很怪异。好比下面的错误代码:
printf("%f",3);
printf("%d",3.14f);
原理层面,这涉及到数据在内存中表示格式的问题
还有,在 printf 中也能够同时使用多个占位符,只要和参数的类型、个数可以对的上就
行:
printf("name=%s,age=%d,height=%f","djb",18,3.14f);
C 语言中容许使用(双斜线)//注释一行代码,使用/* */注释多行代码,被注释的代码会被编译器忽略。
注释的做用主要有 2 点:
只能注释一行。在程序中,行注释以//开始,本行后面的内容都会被编译器忽略。
#include<stdio.h> int main() { printf("My name is oldwang!"); //oldwang //printf("oldwang\n"); getchar(); return 0; }
块注释又被称为多行注释,/*表示注释开始,*/表示注释结束,/*与*/以前的内容将被编译器忽略。 #include<stdio.h> int main() { printf("hello world"); /* printf("hello world"); printf("hello world"); printf("hello world"); */ getchar(); return 0; } 注意/**/不能嵌套。(六) 变量
在 C 语言中,变量只有被定义,才能使用,定义变量有两种形式:
第 1 种:先定义,后赋值,语法以下:
变量类型 变量名;
变量名 = 数据;
例如:
int a; //先定义 int 型变量 a
a =200; //而后将 200 赋值给变量 a
第 2 种 定义并赋值,语法以下:
变量类型 变量名=数据;
例如:
int a=200; //定义 int 变量 a 并赋值为 200
变量就是一个数据的“名字”,能够在代码中经过引用变量使用变量。分为 2 种状况:
若是变量出如今=号左边,就是给变量进行赋值,例如:a =100;
若是变量出如今=号右边,或单独出现就是读取变量中的保存的数据。例如:
a=100;
b=200;
a=b;
printf(“%d\n”,a);
上述第 3 行,变量 a 在=号左边,变量 b 在=号右边。所以,a=b 执行过程为:先读取变
量 b 中保存的数据 200,而后赋值给变量 a,此时变量 a 的值是 200。
第 4 行,在 printf 函数中变量 a 是单独出现的,表示读取变量 a 中保存的数据。
C 语言中,定义多个变量有 2 种形式:
第 1 种: 在一行语句中,定义多个变量,语法结构:
变量类型 变量名 1,变量名 2,变量名 3,……; //变量之间以逗号分割
第 2 种:多行语句,定义多个变量,语句结构:
变量类型 变量名 1;
变量类型 变量名 2;
……
下面经过例子来了解在程序中如何定义多个变量。
定义多个变量。
#include<stdio.h> int main() { int a=100,b=200; //一行定义 int 变量 a、b 且赋值 int c=300; //定义变量 c 且赋值 int d=400; //定义变量 d 且赋值 printf("a=%d\n",a); printf("b=%d\n",b); printf("c=%d\n",c); printf("d=%d\n",d); getchar(); return 0; } #include<stdio.h> int main() { int a,b; a=3; b=4; getchar(); return 0; }
在 C 语言中,程序执行的最小单位为语句,一条合法的语句必须在末尾有一个分号。
C 语言中经常使用的语句有 5 种:
赋值语句是 C 语言中最基本的语句,须要使用到赋值符号=,该符号的做用是将一个数据赋值给一个变量,例如:
a = 100; //将 100 赋值给变量 a
【注意】赋值语句中,赋值号=的左边必须是变量,不能是常量。
函数调用语句是 c 程序中,比较经常使用的语句,由函数调用与分号构成,例如:
printf(“hello world”);
该语句只有一个分号,例如:
;
空语句常常做为循环语句的循环体,表示什么也不作。
复合语句又被称为语句块,在程序中,使用{ }将多行语句括起来就能够成为复合语句,
例如:
{
int a=3;
printf("a=%d\n",a);
}
左花括号{表示复合语句开始,右花括号}表示复合语句结束。复合语句不会影响程序的正常执行,经常和控制语句一块儿使用。
语句块能够嵌套。
通常建议语句块中的代码进一步缩进,VS 也是默认这样控制的。
顺序结构是 C 程序中最简单的程序结构。顺序结构的程序从第一行语句开始,按照代码排列的顺序,从上到下依次逐句执行,上一条语句执行结束下一条语句才能执行,直到最后一条语句结束。
#include<stdio.h> int main() { int a=10; printf("a=%d\n",a); a=20; printf("a=%d\n",a); a=30; printf("a=%d\n",a); getchar(); return 0; } 解释: int a=10;//声明变量 a,而且给 a 赋值为 10 a=20;//给 a 赋值为 20
#include<stdio.h> int main() { a=200; //出错代码 printf("%d\n",a); //出错代码 getchar(); return 0; }
#include<stdio.h> int main() { printf("hello"); //出错代码 int a=200; printf("%d\n",a); getchar(); return 0; }
VS2012 用的是 C89 标准,变量的定义必须在方法或者语句块的最开始,变量声明以前不能写其余代码。到了 VS2017 就没这个问题。
C 语言规定,同一做用域内变量定义不能重名。因为还没有学习函数,读者能够暂时理解为,同一个{ }中的变量名不能相同。
#include<stdio.h> int main() { int a=100; char a='A'; //出错代码 printf("%d\n",a); printf("%c\n",a); //出错代码 getchar(); return 0; }(七) 局部变量
C 语言中,变量定义的位置能够分为 3 种:
在函数内部定义的变量被称为局部变量,在函数外部定义的变量被称为全局变量。前面编写的 C 程序中只包含一个 main 函数,而且变量也都定义在 main 函数中,所以前面中定义的变量都是局部变量。
变量的做用域指的是变量的有效做用范围,而局部变量的做用域仅限于函数内部以及语句块中。
局部变量的做用域须要分 2 种状况来讨论:
(1)在函数内部定义的变量只在本函数范围内有效,也就是说只有本函数内才能引用,本函数以外都不能引用这些变量。
(2)在函数内部语句块中定义的变量,只在本语句块范围内有效,也就是说只有在该语句块内才能引用,该语句块以外都不能引用这些变量。
#include<stdio.h> int main() { { //语句块开始 int a=200; } //语句块结束 printf("a=%d\n",a); //出错代码 getchar(); return 0; }
在 C 语言中,局部变量的做用域以花括号进行区分
#include<stdio.h> int main() { int a=100; { int b=200; printf("a=%d\n",a); printf("b=%d\n",b); } printf("a=%d\n",a); getchar(); return 0; }
语句块中能够定义变量,也必须定义在其余语句以前
#include<stdio.h> int main() { int a=100; printf("hello"); { int b=200; printf("a=%d,b=%d\n",a,b); } printf("a=%d\n",a); getchar(); return 0; }
在 C 语言中,第一次对变量进行的赋值操做被称为初始化。变量的初始化分为两种状况:
第一种 定义变量而且初始化,例如:
int a = 10; //定义而且初始化
第二种 先定义,后初始化,例如:
int a;
a=10;
变量初始化本质上就是赋值,不过只有第一次给变量赋值才能被称为初始化。而变量赋值就没有次数限制了,第几回均可以。
在 C 语言中,若是定义了局部变量,可是并未进行初始化,编译器并不会自动初始化局部变量,该局部变量的值将是未知的。所以,在程序中使用这样的变量是存在风险的。为了防止这种状况发生,在 VS2012 中,若是程序中使用了没有初始化的局部变量,调试程序的时候将报错(若是在运行模式下会输出不肯定的值),下面经过例子来了解一下。
#include<stdio.h> int main() { int a; printf("a=%d\n",a); //出错代码,使用了未初始化的局部变量 getchar(); return 0; }