4.17的

4.17的,第1张

1.数据类型
2.运算符,表达式和语句
3.循环
4.分支和跳转
5.函数
6.数组
7.结构体,联合体(重要)
8.指针(重要)
9.宏定义

一.数据类型

 

例如:


int a = 1;
float b = 1.0;
double c = 1.0;
char ch = 'A';
long d = 1;
printf("a = %d,b = %f,c = %lf,ch = %c,d = %ld", a, b, c, ch, d);

 

 

二.运算符 表达式和语句

1.C语言提供五个基本运算符:

+加法运算符

- 减法运算符,负号运算符

* 乘法运算符

/ 除法运算符

%取余运算符(模运算符)

运算符+、-的优先级相同,*、/、%的优先级相同且高于+、-运算符, 算术运算符都是左结合的运算符。“-”作为负号运算符时是右结合性的。

2.算术表达式

用算术运算符和括号(运算符将运算对象连接起来的符合C语言规则的式子,称为算术表达式。符合C语言规则就是符合运算符对运算对象的要求。运算对象必须能够表示 一个“确定值”。反过来讲只要能够表示“确定的值” 的任何内容都可以作为运算对象,如常量、变量、 数组元素、有值函数等。

3.赋值运算符和赋值表达式

C语言的赋值运算符是“=”,赋值运算符是双目运算符,优先级仅高于逗号运算符,是右结合性的。由赋值运算符构成的赋值表达式为:

变量=确定的值

若有如下变量定义:


int a;

float x;

char C;



则下列表达式是符合C语言规则的表达式:

a=123

a=123.456

c=a+ 'A'

X=a+C

a+(x=a+4)/c /*算术表达式*/

(x=a)+(b=3) /*算术表达式*/

 

而下列的表达式则是非法的:

x=a+b=3 /*第 2个=前的运算对象是表达式a+b,不是变量*/

3=a+C/*运算符=前是常量3,不是变量*/

复合的算术赋值运算符和复合的算术赋值表达式

在赋值运算符“=”前加上其他的运算符,可以构成复合的赋值运算符。如在“=”前加上“:运算符就构成了“+=”运算符。

C语言提供了5种复合的算术赋值运算符,分别是+=、-、*=、/=、 %=,复合的算术腻运算符是双目运算符,优先级和赋值运算符相同,也是右结合性的。
复合的算术赋值运算符构成的复合算术赋值表达式为:
变量复合的算术赋值运算符确定的值
复合算术赋值表达式等效于:变量=变量算术运算符确定的值
例如:
a+=5 等效于a=a+5

x*=y+7 等效于x=x* (y+7)

r%=p 等效于r=r*p

4.自增自减

举例

#include 

void main()
{
int i=2,j=3;

k=(i++)+(j++)+4

printf ("result:k=%d, i=%d, j=%d\n",k,i,j) ;
}



程序执行后输出:

result:k=9,i=3,j=4

表达式的运算可理解为:先运算表达式k=i+j+4,再算i++和j++

(2)自增自减返算符是前缀运算符时,应先完成自增自减,然后使用运算后的结果运算整个表达式的值

5.逗号

逗号运算符优先级最低,功能是把两个表达式连接起来组成一个表达式

举例:

#include 

void main ()

int a=2,b=4,c=6,x,y;

y=((x=a+b)(b+c));

printf("x=%d,y=%d" ,x,y);


运行结果:

x=6,y=10

本例中的x等于6,y是逗号表达式“(x=a+b)(b+c)” 的值10。如果把“y=((x=a+b),(b+c))”写为“y=(x= a+b),(b+c)”,则y的值为6。


三.循环

1.while语句
while语句是控制表达式在循环体之前的循环语句,它的格式如下:

while (表达式) 
这里的圆括号是强制要求的,圆括号之内的表达式为控制表达式,圆括号之外的语句为循环体。

while语句的执行步骤,首先计算控制表达式的值,如果表达式的值不为0(为真),则执行循环体,接着再次判断控制表达式,如果其值不为0,再次执行循环体。执行这个步骤直到控制表达式的值为0时停止。

举例:

 

#include 
void main()
{
float score, sum, average;
int i;
sum=0;
i=0;
while (i<30)
scanf ("%f", &score) ;
sum+=score ;
i++ ;
}
average=sum/ 30;
printf ("average=%. 1f\n", average) ;


程序中语句“i=0;"是设置循环控制变量初值,关系环体中的语句“i++;"是使循环趋于结束的部分

2.do~while语句

do~while语句是实现直到型循环的语句,其一般形式为:
do
循环体语句
while (逻辑量);
其中,while 和do是关键字;语句中的逻辑量可以是任意表达式,反映的是循环的条件;循环体语句有且只能有一条语句; while 之后的分号是do~ while循环语句结束的标志。do~ while语句是一条语句。
do~while语句执行时,首先执行循环体语句,然后判断逻辑量,如果为1,则继续执行循环体语句;如果为0,则结束循环,执行循环的后续语句。do~while 语句是一条语句。

举例:

3.for语句

for语句是实现当型循环结构的语句,for语句是c语言所提供的功能更强,使用更广泛的一种循环语句。其形式为:

for (表达式1;逻辑量;表达式2)

     循环体语句
for语句的执行过程如下:
(1)求解表达式1。
(2)判断逻辑量,如果为1,则执行循环体语句,然后执行第3步;如果为0,则结束循环,执行循环的后续语句。
(3)求解表达式2,转向第2步执行。

举例:


四.分支和跳转

1.if语句

形式1:

if (逻辑表达式)

执行语句

如果逻辑表达式为真,则执行执行语句

形式2:

if (逻辑表达式)

执行语句1

else

执行语句2

如果逻辑表示是为真则执行执行语句1,否则执行执行语句2

形式3:

if (逻辑表达式1)

执行语句1

else if (逻辑表达式2)

执行语句2

else

执行语句3

如果逻辑表达式1为真,则自行执行语句1,如果逻辑表达式1为假而逻辑表达式2为真,则执行执行语句2,否则,如果两个表达式都为假,执行执行语句3

2.switch

实现多分支选择结构的switch语句的具体形式如下:switch (表达式)
实现多分支选择结构的switch语句的具体形式如下:
switch (表达式)

{

case常量1:语句组1
case常量2:语句组2

case常量n:语句组n
[default : 语句组n+1]

}



五.函数

1.定义

函数是完成定功能的程序段,必须先定义函数,然后才能通过函数调用实现函数定义的功能。函数的定义就是对函数功能的定义。
函数定义的一般形式为:

类型说明符函数名(带类型说明的形式参数表列)
{

数据描述部分
算法实现部分

}

2.函数的调用

math.h:sin(x),cos(x)等

stdio.h:scanf(),printf(),gets(),puts(),getchar(),putchar()等

string.h:strcmp(),strcpy(),strcat(),strlen()等

只有通过函数调用,才能实现函数定义的功能。
函数调用的一般形式为:

函数名(实际参数表列)

函数调用时括号中的参数称为实际参数,简称实参,各实参之间用逗号分开。实参必须是量、变量或表达式等具有确定值的量。
函数调用时,实参与形参数量应相同,类型要匹配,并且按顺序对应。

举例:

3.嵌套和递归

(1)C语言不允许函数嵌套定义。函数定义必须互相独立,互不包含,一个函数的定 义不能包含在另一个函数内部。 但是C语言允许函数嵌套调用。即在被调函数的函数体中可以调用其他函数,并且函数调用可以根据需要多层嵌套。

(2)函数的递归调用是种特殊的嵌套调用。个函数在它的函数体内直接或间接地调用自 身称为函数的递归调用。一个函数直接调用自身,称为直接递归调用,这样的函数称为递归函数。函数A( )调用函数B(),函数B( )又调用了函数A(),称之为间接递归调用。程序设计中常用的是直接递归调用。C语言允许函数递归调用。在递归调用中,主调函数又是被调函数。执行递归函数将反复用递归函数自身。


六.数组

1.一维数组

一维数组的定义形式为:
类型说明符数组名 [整型常量表达式];
例如:

int a[10];
定义了一个维数组a,包括10个元素,分别用a[0] a[1] .. a[9]表示。数组。中每个元素的数据类型都为int型。

2.二维数组

二维数组的定义形式为:

类型说明符数组名
[整型常量表达式][整型常量表达式2];
“整型常量表达式1”规定了二维数组的行数,称为行长度,记为M;“整型常量表达式2”规定了二维数组的列数,称为列长度,记为N;二维数组元素的个数是M*N。

3.指针数组

指针数组的定义形式如下:

类型说明符* 数组名[整型常量表达式];

其中“类型说明符”用来指定该指针数组的元素可以指向的数据类型。数组名前面的*”"是必须的,表示定义的是一个指针数组。 整型常量表达式用于指明数组元素的个数。和普通数组一样,程序执行时指针数组在内存单元中分配连续的存储空间,指针数组名表示该指针数组的首地址。例如:

int *p[4];

定义了包含4个元素的一维指针数组p,每个元素都可以指向整型数据,即数组中每个元素可用来存放指向整型数据的指针。指针数组在定义形式上与指向一维数组的指针很相似,使用时应注意区别。

举例:

 

 


七.结构体,联合体

1.结构体

结构体类型定义的一般形式为:

struct  结构体类型名

{

类型说明符成员名1;

类型说明符成员名2;
...
类型说明符成员名n;
}
其中,struct 是定义结构体类型的关键字,不能省略。结构体类型名遵循标识符命名来标识所定义的结构体类型。花括弧内是该结构体所包含的各个成员,类型说明符用来说明每个成员的类型,它们必须是有效的数据类型,可以是int、float、 double、 char 以及指针、联合体等类型。

例如,定义一个“学生信息”的结构体类型:

 

struct student

{
int num;

char name[10] ;

char sex ;

int age;

char addr[50];

int score;
};

2.联合体

联合体类型的定义方式与结构体很类似,定义的一般形式为:

union联合体类型名
{
类型说明符 成员名1;

类型说明符 成员名2;

…                  …

类型说明符 成员名 n;
}
其中,union是定义联合体类型的关键字。联合体类型名遵循标识符命名规则,用来标识所定义的联合体类型。花括弧{}内是联合体中的各个成员,成员名也是一个 合法的标识符,用来标识联合体成员,类型说明符指定每个成员的类型,必须是有效的数据类型。

例如:
 

union udata
{
int i;

char C;

float f;
};



同定义了一个名为union udata的联合体类型,它由3个成员i, c和f组成,每个成员有各自的数据类型,分别为int、 char 和float,即整型、字符型和单精度型。


八.指针

在C语言中,指针是一种特殊的变量,它是存放地址的。指针变量前面的“*”表示该变量的类型为指针型变量。

一般形式为:

类型说明符 *变量名;


 

九.宏定义

1.不带参数的宏定义

不带参数的宏定义的一般定义形式如下:

#define宏字符序列

define为宏定义的特定字,宏是用户标识符,字符序列可以是任意字符序列。该命令功能是将字符序列定义为宏。宏起作用的范围是从定义开始到本文件结束。宏定义之后的程序中就可以使用宏表示字符序列。

举例:

 

2.带参数的宏定义

带参数的宏定义的一般形式如下:

#define宏(形参表列)字符序列

形参表列由一一个或多个参数组成,参数之间用逗号分隔。字符序列中应包含有形参表列中的参数。程序中使用带参数宏,称为宏调用,方法如下:

宏(实参表列)

实参为程序中引用宏的参数。编译预处理时,宏调用展开不是进行简单的字符序列替换,而是使用实参替换字符序列中的形参。

举例:

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/676147.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存