数据类型
整形的每一种都有无符号(unsigned)和有符号(signed)两种类型,在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是有符号类型需要使用一个bit来表示数字的正负。另外,unsigned若省略后一个关键字,大多数编译器都会认为是unsigned int。
在c语言中,有很多不同的数据类型,它们所占字节数分别为:
char 1
int 4
double 8
short 2
long 4
注:short为short int,long为long int,即短整型和长整形。
输入和输出
字符输入输出:
putchar函数-字符输出函数
putchar("A')
putchar('\101')
putchar(x)
putchar('\n')
getchar函数-字符输入函数
char c=getchar()
格式输入输出:
printf函数-格式化输出
printf("格式控制字符串",输出列表)
printf("字符串")
%d 十进制带符号
%o 八进制无符号
%x 十六进制无符号
%u 十进制无符号
%f 单,双精度
%c 字符
%s 字符串
scanf函数-格式化输入
scanf("格式控制字符串",地址列表)
字符串输入输出 :
puts()函数-字符串输出
puts(字符串)
gets()函数-字符串输入
gets(字符数组)
流程控制语句
C语言是一种结构化和模块化通用程序设计语言,结构化程序设计方法可以使程序结构 更加清晰,提高程序的设计质量和效率。
流程控制语句一般分为四种:顺序结构,选择结构,循环结构,跳转结构。
选择结构:
if-else语句
(1)方式1: if(条件)
{
//条件满足时的执行代码
}
(2)方式2: if(条件)
{
//条件满足时的执行代码
}
else
{
//条件不满足时的执行代码
}
(3)方式3: if(条件1)
{
//条件1满足时的执行代码
}
else if(条件2)
{
//条件2满足时的执行代码
}
else
{
//条件1和2不满足时的执行代码
}
switch语句
switch(变量)
{
case 变量值1: //执行语句1 break;
case 变量值2: //执行语句2 break;
case 变量值3: //执行语句3 break;
... default: //执行语句n break;
}
循环结构:
for语句和while语句
数组和字符串
一维数组:
选择排序、冒泡排序、插入排序、二分查找
二维数组:
转置矩阵、两矩阵乘积、杨辉三角
字符数组和字符串:
字符数组是存放字符型数据的,其中每个数组元素存放的值都是单个字符。
字符串是C语言中的一种数据类型,它是由若干个字符组成的,其中最后一个字符是结 束标记'\0'
字符型变量只能存放字符
字符数组可以存放若干个字符,或存放字符串
char c1[]={'A','B','C','D'};
char c2[]={"ABCD"};
字符串处理函数:
字符串复制 strcpy(str1,str2);
字符串连接 strcat(目的字符数组名,源字符数组名)
字符串比较 strcmp(字符数组名1,字符数组名2)
注:按照ASCII码顺序比较两个数组中字符,并由函数的返回值返回比较的结果,
返回值如下:字符串1==字符串2 返回值 0
字符串1>字符串2 返回值 1
字符串1<字符串2 返回值 -1
字符串大小写转换:(英文字母大小写的转换 )
strupr(字符串) 将字符串中的小写字母变为大写字母
strlwr(字符串) 将字符串中的大写字母变为小写字母
字符处理函数:
函数库 ctype.h
isdigit 是否数字
isalpha 是否字母
isalnum 是否数字或字母
isxdigit 是否十六进制
islower 是否小写字母
isupper 是否大写字母
isspace 是否空白符
指针
地址与指针:
在程序中定义了一个变量,在进行编译时就会给该变量在内存中分配一个地址,通过访 问这个地址可以找到所需的变量,这个变量的地址称为该变量的指针。
变量与指针:
如果一个变量存储的是另一个变量的地址,则可以理解为第1个变量指向第2个变量。 所谓的指向是通过地址来体现的,因为指针变量是指向一个变量的地址,所以将一个变量的 地址值赋给这个指针变量后,这个指针变量就指向了该变量。 在程序代码中是通过变量名对内存单元进行存取操作,但是代码经过编译后已经将变量 名转换为该变量在内存中的存放地址,对变量值得存取都是通过地址进行的。
指针变量:
由于通过地址能够访问指定的内存存储单元,可以说地址指向该内存单元。地址可以形 象地称为指针,意思就是通过指针能找到内存单元。一个变量的地址称为该变量的指针。如果有一个变量专门用来存放另一个变量的地址,它就是指针变量。在C语言中有专门用来存 放内存单元地址的变量类型,即指针类型。
(1)指针变量的一般形式
如果有一个变量专门用来存放另一个变量的地址,则它称为指针变量。
如果一个变量包含指针(指针等同于一个变量的地址),则必须对它进行说明。
类型说明 *变量名;
(2)指针变量的赋值
指针变量同普通变量一样,使用之前不仅需要定义,而且必须赋予具体的值。
未经赋值 的指针变量不能使用。给指针变量所赋的值与给其他变量所赋的值不同,给指针变量的赋值只能赋予地址,而不能赋予任何其他数据。
C语言中提供了地址运算符“&”来表示变量的 地址。
&变量名;
定义指针变量的同时进行赋值: int a=3; int *p=&a;
先定义指针变量之后再赋值: int a=3; int *p; p=&a;
(3)指针变量的引用
引用指针变量是对变量进行间接访问的一种形式。
*指针变量;
(4)&和*运算符
& 返回操作数地址的单目运算符,叫作取地址运算符。
* 返回指针变量所指向的变量,单目运算符,叫作指针运算符。
(5)&*与*&的区别
&* 先返回指针变量所指的变量,再取其地址。
*&先取地址,再根据地址取值。
数组和指针:
一维数组和指针一起用,把数组的首地址赋给指针。
int *p,a[10]; p=&a[0];
字符串与指针:
访问一个字符串可以通过两种方式,第一种方式就是通过字符数组来存放一个字符串。 另一种就是指针操作数组。
字符串数组
字符数组是一个一维数组,而字符串数组是以字符串作为数组元素的数组,可以将其看成一个二维字符数组。如下定义:
char country[5][20]={ "China", "Japan", "Russia", "Germany", "American" }
这样有点浪费空间, 如何利用指针做字符串数组呢?如下定义:
char *country[]={ "China", "Japan", "Russia", "Germany", "American" }
双重指针
一个指针变量如果指向的是指针类型变量,则称之为指向指针的指针变量。
定义如下: 数据类型 **指针变量名;
int **p; int *(*p);
结构体
结构体类型的概念 :
结构体是一种构造类型,它是由若干成员组成的,其中的每一个成员可以是一个基本数 据类型或者又是一个构造类型。 定义如下:
struct 结构体名{ 成员列表 };
结构体变量的定义:
(1)声明结构体类型,再定义变量
struct Product product1;
struct Product product2;
(2)在声明结构类型时,同时定义变量
struct 结构体名{
成员列表
}变量名列表;
(3)直接定义结构体类型变量
struct{
成员列表;
}变量名列表;
结构体变量的引用:
定义结构体类型变量以后,当然可以用这个变量。但要注意的是,不能直接将这个变量 进行输出。要对结构体变量进行赋值、存取或运算实质上就是对结构体成员的操作。
结构变量成员的一般形式是:
结构变量名.成员名;
结构体类型的初始化
struct 结构体名{
成员列表
}变量名={元素1,元素2,...,元素n}; 或者
struct 结构体名 变量名={元素1,元素2,...,元素n};