数据类型

整形的每一种都有无符号(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};