01.C程序结构
include <stdio.h>
int main()//函数唯一入口
{
printf(" a ");
return 0;
}
02.C语言的标识符
组成:
1) 标识符由字母(A~Z,a~z),数字(0~9)、下划线( _ ) 组成
2) 只能由下划线或字母开头
注意:
1) 小于八位,有些版本的C中只有前八位有效
2) 严格区分大小写
3) 标识符有意义
4) 不是关键字
03.变量名
组成:
同上,标识符
结构:
04.基本数据类型
- 基本类型
- 整型
- 字符型
- 浮点型
- 单精度
- 双精度
- 构造类型
- 枚举类型
- 数组类型
- 结构体类型
- 共用体类型
- 指针类型
- 空类型
最常用的整型、浮点型(实型)与字符型
数据类型 | 说明 | 字节 | 应用 |
---|---|---|---|
char | 字符型 | 1 | 用于存储单个字符 |
int | 整形 | 2 | 用于存储整数 |
float | 单精度浮点型 | 4 | 小数 |
double | 双精度浮点型 | 8 | 小数 |
整形int细分
数据类型 | 说明 | 字节 | 取值 |
---|---|---|---|
int | 整形 | 2 | - 215 ~ 215 -1 |
short int | 短整形(int 可省略) | 2 | - 215 ~ 215 -1 |
long int | 长整形(int 可省略) | 4 | - 231 ~ 231 -1 |
int | 无符号整形 | 2 | 0~ 215 -1 |
short int | 无符号短整形(int 可省略) | 2 | 0~ 215 -1 |
long int | 无符号长整形(int 可省略) | 4 | 0~ 231 -1 |
浮点型细分
数据类型 | 说明 | 字节 | 取值 |
---|---|---|---|
float | 单精度浮点型 | 4 | -3.4x 10−38 ~3.4x 1038 |
double | 双精度浮点型 | 8 | -1.7x 10−308 ~1.7x 10308 |
long double | 单精度浮点型 | 16 | -1.2x 10−4932 ~1.7x 104932 |
05.格式化输出语句
06.不可改变的常量
分类:
-直接常量 字面量
-符号常量 #define标识符 常量值
#include<stdio.h>
#define PI 3.14
int main(){
printf("圆周率:%f/n",PI);
return 0;
}
注意:#define定义的常量不可变
07.自动类型转换
char类型数据转换为int类型数据遵循ASCII码中的对应值,ASCII码请查看WIKI。
注:字节小的可以向字节大的自动转换,但字节大的不能向字节小的自动转换
08.强制类型转换
强制类型转换是通过定义类型转换运算来实现的。其一般形式为: (数据类型) (表达式)
在使用强制转换时应注意以下问题:
1、数据类型和表达式都必须加括号,如把(int)(x/2+y)写成(int)x/2+y则成了把x转换成int型之后再除2再与y相加了。
2、转换后不会改变原数据的类型及变量值,只在本次运算中临时性转换。
3、强制转换后的运算结果不遵循四舍五入原则。
09.后面都是if语句switch语句什么的,在java里用挺多的,跳过去了
10.递归函数
从前以为自己已经掌握了,发觉太久,又是做安卓没用,就不记得怎么搞了,一笔试就发现问题。醉了。还是看看例题,挺经典的一个猴子吃桃子的故事:
猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,问第一天共摘下来多少个桃子?并反向打印每天所剩桃子数。
代码:
#include <stdio.h>
int getPeachNumber(n)
{
int num;//定义所剩桃子数
if(n==10)//递归结束条件
{
return 1;
}
else
{
num = (getPeachNumber(n+1)+1)*2;
//天数,所剩桃子个数
printf("第%d天所剩桃子%d个\n", n, num);
}
return num;
}
int main()
{
int num = getPeachNumber(1);
printf("猴子第一天摘了:%d个桃子。\n", num);
return 0;
}
11.变量存储类别
C语言根据变量的生存周期来划分,可以分为静态存储方式和动态存储方式。
静态存储方式:是指在程序运行期间分配固定的存储空间的方式。静态存储区中存放了在整个程序执行过程中都存在的变量,如全局变量。
动态存储方式:是指在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储区中存放的变量是根据程序运行的需要而建立和释放的,通常包括:函数形式参数;自动变量;函数调用时的现场保护和返回地址等。
C语言中存储类别又分为四类:自动(auto)、静态(static)、寄存器的(register)和外部的(extern)。
- auto:用关键字auto定义的变量为自动变量,auto可以省略,auto不写则隐含定为“自动存储类别”,属于动态存储方式。
- static:用static修饰的为静态变量,如果定义在函数内部的,称之为静态局部变量;如果定义在函数外部,称之为静态外部变量。如下为静态局部变量
注意:静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放;静态局部变量在编译时赋初值,即只赋初值一次;如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。- register:为了提高效率,C语言允许将局部变量得值放在CPU中的寄存器中,这种变量叫“寄存器变量”
注意:只有局部自动变量和形式参数可以作为寄存器变量;一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;局部静态变量不能定义为寄存器变量。- extern:用extern声明的的变量是外部变量,外部变量的意义是某函数可以调用在该函数之后定义的变量
12.内部函数与外部函数
在C语言中不能被其他源文件调用的函数称谓内部函数 ,内部函数由static关键字来定义,因此又被称谓静态函数,形式为:
static [数据类型] 函数名([参数])
这里的static是对函数的作用范围的一个限定,限定该函数只能在其所处的源文件中使用,因此在不同文件中出现相同的函数名称的内部函数是没有问题的。
在C语言中能被其他源文件调用的函数称谓外部函数 ,外部函数由extern关键字来定义,形式为:
extern [数据类型] 函数名([参数])
C语言规定,在没有指定函数的作用范围时,系统会默认认为是外部函数,因此当需要定义外部函数时extern也可以省略。
13.数组
C语言中的数组初始化是有三种形式的,分别是:
1、 数据类型 数组名称[长度n] = {元素1,元素2…元素n};
2、 数据类型 数组名称[] = {元素1,元素2…元素n};
3、 数据类型 数组名称[长度n]; 数组名称[0] = 元素1; 数组名称[1] = 元素2; 数组名称[n] = 元素n+1;
注意:
1、数组的下标均以0开始;
2、数组在初始化的时候,数组内元素的个数不能大于声明的数组长度;
3、如果采用第一种初始化方式,元素个数小于数组的长度时,多余的数组元素初始化为0;
4、在声明数组后没有进行初始化的时候,静态(static)和外部(extern)类型的数组元素初始化元素为0,自动(auto)类型的数组的元素初始化值不确定。
数组遍历时要注意以下几点:
C语言的数组长度一经声明,长度就是固定,无法改变,并且C语言并不提供计算数组长度的方法。
由于C语言是没有检查数组长度改变或者数组越界的这个机制,可能会在编辑器中编译并通过,但是结果就不能肯定了,因此还是不要越界或者改变数组的长度
数组作为函数参数时注意以下事项:
1、数组名作为函数实参传递时,函数定义处作为接收参数的数组类型形参既可以指定长度也可以不指定长度。
2、数组元素作为函数实参传递时,数组元素类型必须与形参数据类型一致。
14.字符串与数组:
在C语言中,是没有办法直接定义字符串数据类型的,但是我们可以使用数组来定义我们所要的字符串。一般有以下两种格式:
1、char 字符串名称[长度] = “字符串值”;
2、char 字符串名称[长度] = {‘字符1’,’字符2’,…,’字符n’,’\0’};
注意:
1、[]中的长度是可以省略不写的;
2、采用第2种方式的时候最后一个元素必须是’\0’,’\0’表示字符串的结束标志;
3、采用第2种方式的时候在数组中不能写中文。
在输出字符串的时候要使用:printf(“%s”,字符数组名字);或者puts(字符数组名字);
常用的字符串函数如下: string.h
使用字符串函数注意以下事项:
1、strlen()获取字符串的长度,在字符串长度中是不包括‘\0’而且汉字和字母的长度是不一样的。
2、strcmp()在比较的时候会把字符串先转换成ASCII码再进行比较,返回的结果为0表示s1和s2的ASCII码相等,返回结果为1表示s1比s2的ASCII码大,返回结果为-1表示s1比s2的ASCII码小
3、strcpy()拷贝之后会覆盖原来字符串且不能对字符串常量进行拷贝
4、strcat在使用时s1与s2指的内存空间不能重叠,且s1要有足够的空间来容纳要复制的字符串