C语言复习

 

标识符不能是关键字 所有标识符必须以字母或下划线开头 其他部分可以由字母、下划线不能是其他字符和数字组成。

变量的三要素:变量名(variable name) 数据格式(data type) 值(value)

data type:

int 2字节

long(int)    2字节

short(int) 4字节

unsigned int  short  2字节   

long  4字节

float 4字节   32位   有效数字6-7位

double 8字节   64位   有效数字15-16位

16字节  128位  有效数字18-19位

char 1字节

void 函数没有返回值

 

函数调用:

 

嵌套调用:  C语言不允许进行嵌套的函数定义,因此各函数之间是平行的,不存在上一级 函数和下一级函数的问题;但是C语言允许在一个函数的定义中出现对另一个 函数的调用,这样就出现了函数的嵌套调用,即在被调函数中又调用其他函数。 这与其他语言的子程序嵌套的情形是类似的。

函数嵌套定义 即在函数定义的内部不能定义函数。

递归调用:  在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递     归调用。C语言允许函数的递归调用。在递归调用中,主调函数又是被调函数。 执行递归函数将反复调用其自身,每调用一次就进入新的一层。从上面的描述 中会得到这样一个结论,即递归函数调用就是一个无终止的自身调用。在编写 程序的过程中,很明显不需要这种无终止的递归调用。这时候就可以设置一个 条件作为递归调用的出口,使递归调用走向终止,而不会再无休止地运行下去 (递归需要有递归结束条件和简化成过程)。

 

优点:可读性强,可以把算法写的比使用非递归函数时更清晰、更简洁(递归   的目的是简化程序,递归函数能更自然的反应问题)。

缺点:效率相对非递归程序较低。

 

形式参数与实际参数:

 

实际参数出现在主调函数中,进入被调函数后,实际参数变量不能使用

形式参数出现在函数定义中,在整个函数体都可以使用,离开函数则不能使用

(在下面的程序中 x为形式参数 i为实际参数)

#include<stdio.h>

int ping(int x)

{

    int z;

    z=x*x;

    return z;

}

int main (void)

{

    int i;

    for(i=1;i<11;i++)

    {

        printf("%d square =%d\n",i,ping(i));

    }

    return 0;

}

 

形式参数和实际参数的功能是进行数据传送。

(发生函数调用时,主调函数把实际参数的值传送给被调函数的形式参数,从而实现主调函数与被调函数间的数据传送。)

实际参数可以是常量、变量、表达式、函数等。无论实际参数是何种类型变量,在进行函数调用之前每个实际参数必须具有确定的值。因此,应预先用赋值、输入等方法是实际参数获得确定值。C语言规定,实际参数变量对形式参数变量的数值传递是单向的。即只能由实际参数传递给形式参数,而不能由形式参数再传给实际参数。

 

局部变量和全局变量:

 

局部变量:  也成为内部变量。局部变量实在函数内部定义的变量,只在本函数范围内有 ,在函数外则不能使用该变量。

全局变量:  也成为外部变量,就是在函数定义外的变量。其作用范围从定义的位置开始到 该源文件结束

(在下面的程序中,a为全局变量,b、c、d均为局部变量。)

 

#include<stdio.h>

int a;

int f1(int b)

{

int c;

}

main( )

{

int d;

}

 

在不同函数中,可以使用相同的变量名。

 

主函数中定义的变量可以在其所调用的函数中使用

 

printf格式字符:

d 以十进制形式输出带符号整数(正数不输出符号)

o 以八进制形式输出无符号整数(不输出前缀O)

x 以十六进制形式输出无符号整数(不输出前缀OX)

u 以十进制形式输出无符号整数

c 输出单个字符

s 输出字符串

f 以小数形式输出单、双精度实数

e 以指数形式输出单、双精度实数

g 以%f、%e中较短的输出宽度输出单、双精度实数

前缀是XX进制数的标识

除了格式字符x、e、g在使用时可以大写外,其余格式字符必须小写

输出%时应注意,必须在控制格式中连写两个%才能得到预期效果。

 

 

 

scanf语句[*][域宽][长度]:

 

[*]

一般形式中“*”用来表示该输入项读入后不赋予相应变量,即跳过该输入值。

例:scanf(“%d  %*d  %d , &a , &b) ;

当输入12 23 15时12赋值给a  23被跳过 15赋值给b

 

[域宽]

所谓“域宽”就是指定输入数据所占宽度,域宽应为正整数。

例:scanf(%5d , &x);

当输入12345678时只把12345赋值给x,其余部分被截去。

例:scanf(%4d%4d , &x , &y);

当输入1234678是把1234赋值给x 把5678赋值给y。

 

[长度]

“长度”格式字符为l和h,l表示输入长整形数据和双精度浮点数,h表示输入短整型数据。

 

使用scanf函数时应注意,scanf函数没有精度控制,所以scanf(%10.2f , &x) ; 这类语句是非法的。scanf函数中要求给出变量地址,所以“&”不可少,即scanf(%d , x) ;这类语句也是不合法的。

 

 

 

If语句的三种表达方式:

 

第一种:if(表达式)语句

 

第二种:if(表达式)

语句组1

else(表达式)

语句组2

 

第三种:if(表达式)

语句组1

else if(表达式)

语句组2

else if(表达式)

语句组3

.

.

.

else

语句组n

 

三种表达方式中if后面都有“表达式”,一般为为逻辑表达式或关系表达式。

else语句不能作为语句单独使用,必须是if语句的一部分,与if配对使用。并且else总是与其上面最近的未配对的if配对。

 

for语句:

 

for(表达式1;表达式2;表达式3) 语句;

执行过程如下:

步骤一:先求解表达式1

步骤二:求解表达式2,若其值非0,则执行for语句中指定内嵌语句,然后执行步骤三。 若其值为0,则结束循环,转到步骤五

步骤三:求解表达式3

步骤四:返回步骤二继续执行

步骤五:循环结束,执行for语句下面的一条语句

表达式1通常用来给循环变量赋初值,一般是赋值表达式。也允许在for语句之外给循环变量赋初值,此时可以省略该表达式。

表达式2通常是循环条件,一般为逻辑表达式或关系表达式。如果表达式2省略,即不判断循环条件,也就是认为表达式2始终为真,则循环将无终止的进行下去。

表达式3通常用来修改循环变量的值,一般是赋值语句。表达式3也可以省略,但此时应另外设法保证循环能正常结束。

表达式可以省略但分号不能省,即for语句的括号内必须有两个分号。

 

while语句:

 

while(表达式) 语句

 

先判断表达式,后执行语句。

表达式一般是关系表达式或逻辑表达式,只要表达式的值为真(非0)即可继续循环。

(while括号中可以包含多个语句(中间用逗号隔开),但时只判读最后一个语句是否为真,如:while(x>10,x==10,x<10),如果x<10,则继续执行循环,否则退出循环。)

循环体如果包含一条以上语句,应用大括号括起来。如不加大括号,则while语句的范围直到while后面的第一个分号处。

在循环体中应有使循环趋向结束的语句,以避免死循环。

(如循环结束的条件是i>100,则循环体中应该有使i增值到100的语句i++,若无此语句,则i的值始终不变,循环将永不结束)

 

do-while语句:

 

do

循环语句

while(表达式);

 

先执行一次制定的循环体语句,然后判别表达式。

注意事项与while语句基本相同。

1.for一般是在循环个数已知的情况下使用的

2.while一般是在循环个数未知,且循环受到严格控制的情况下使用的。

3.do-while一般也是在循环个数未知,但是它和while最大的不同点在于,不管循环的条件是什么,do-while都会至少执行一次。

4.while循环、do-while循环、for循环这三种循环之间可以相互嵌套。

 

 

数组指针(指向数组的指针):

int a[2][2]={1,2,3,4};//这是一个2*2的二维数组  

int (*p)[2];//数组指针  

p=a;//令p指向数组a  

 

 

a是一个数组名,类型是指向一维数组的指针,不是变量,a的值是指针常量,即不能有a++或者a=p这些操作。a指向这块连续空间的首地址,值是&a[0][0]。

a[0]是一维数组名,类型是指向整型的指针,值是&a[0][0],这个值是一个常量。

a[1]是一维数组名,类型是指向整型的指针,值是&a[1][0],这个值是一个常量。

p是一个数组指针变量,指向一维数组的指针变量,值是&a[0][0]。可以执行p++;p=a等操作。

a+1表示指向下一行元素,也可以理解为指向下一个一维数组。

*(a+1)是取出第一行的首地址。

a[0]+1是指向第0行第1个元素,也可以理解为指向一维数组a[0]的第一个元素。

p+1同a+1

*(p+1)同*(a+1)

虽然a跟a[0]值是一样,但类型不一样,表示的意义不一样。通过分析就不难理解为什么*(*(a+i)+j)和a[i][j]等效了。

 

 

 

指针数组(存放指针的数组):

 int i=1,j=2;  

  //p先跟[]结合,然后再跟*结合  

 int *p[2];//指针数组,存放指针的数组  

p[0]=&i;  

p[1]=&j;  

 

 

 

指针函数:

 

int *f(int a, int b); 

 

让指针标志 * 与int紧贴在一起,而与函数名f间隔开,这样看起来就明了些了,f是函数名,返回值类型是一个int类型的指针。

 

 

函数指针:

 

定义指针变量,该指针变量可以指向特定函数的首地址

 

#include <stdio.h>

int (*fp)(int, int);

int max(int a,int b)

{

return a>b?a:b;

}

int min(int a, int b)

{

return a<b?a:b;

}

 

void main()

{

    int a=10;

    int b=20;

    int maxvalue;

    int minvalue;

    fp=max;

    printf("%d, %d\n",fp,max);//和max地址是一样的

    

    

    maxvalue = (*fp)(a,b);//和调用max(a,b)效果是一样的

    printf("%d\n", maxvalue);

    

    maxvalue = max(a,b);

    printf("%d\n", maxvalue);

    

    fp=min; //指向min函数的首地址

    printf("%d, %d\n",fp,min);//和min地址是一样的

    

    minvalue = (*fp)(a,b);//和调用min(a,b)效果是一样的

    printf("%d\n", minvalue);

    

    minvalue = min(a,b);

    printf("%d\n", minvalue);

    

}

 

 

 

 

ASC码大写字母和小写字母的转换规律:’A’+32=’a’(以此类推)

 

 

 

 

function 函数

recursive function 函数递归

nested function 函数嵌套

parameter 参数

actual parameter实际参数

Formal parameter 形式参数

expression 表达式

logic expression 逻辑表达式

relation expression 关系表达式

character set 字符集

identifier 标识符

keyword 关键字

statement 语句

letter 字母

digit 数字

special character 特殊字符

white space 空格

mathematical definition 数学定义

variable 变量

data 数据

element 要素 基础 原理

storage 储存

default value 默认值

random value 随机值

initialize 初始化

abstract 摘要

attribute 属性

overflow of integer numbers 数据溢出

operator and expression 运算符和表达式

arithmetic operator 算术运算符 + - * / %

relational operator 关系运算符 !=   ==  <  >  <=  >=

logical operator 逻辑运算符 ! &&  ||

assignment operator 赋值操作符 =  -=  +=

increment and decrement operator 增量和减量操作符 ++  --

conditional operator 条件运算符 ?  :

bitwise operator 逐位运算符 &  |  ~  ^

special operator 特殊运算符 &,  .,  ->

precedence and associativity 优先级和结合性

sequence structure 顺序结构

selection structure 选择结构

repetition structure 循环结构

 

 

 

 

blank space 空格键

horizontal tab   Tab键

carriage return Enter键

number sign   #

comma ,

dot(period) .

underscore _

dash(minus subtract) -

parenthese (

colon :

semicolon ;

bracket [ ]

brace { }

vertical bar |

back slash \

exclamation !

dollar sign $

percent sign %

and(ampersand) &

star(asterisk) *

singal quote    ‘ ’

double quote    “ ”

caret ^

tilde ~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值