5.C语言(2)

一、数组

1.一维数组

(1)一维数组的定义格式为:类型说明符  数组名[常量表达式];  例如:  int a[10];  它表示定义了一个整形数组,数组名为a,有10个元素

(2)在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度

(3)常量表达式中可以包括常量和符号常量,但不能包含变量 注意:C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值

(4)在定义数组时对数组元素赋以初值 例如:int a[10]={0,1,2,3,4,5,6,7,8,9} ;

 可以只给一部分元素赋值 例如: int a[10]={0,1,2,3,4}; 定义a数组有10个元素,但花括弧内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素值为0

如果想使一个数组中全部元素值为0,可以写成:int  a[10]={0,0,0,0,0,0,0,0,0,0};   或int a[10]={0};不能写成:int a[10]={0*10};

在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度 例如:int a[5]={1,2,3,4,5}; 也可以写成  int a[]={1,2,3,4,5};  int a[10]={1,

2,3,4,5};  只初始化前5个元素,后5个元素为0

数组的地址,a和&a

2.二维数组

二维数组定义的一般形式为:类型说明符  数组名[常量表达式][常量表达式];例如:float  a[3][4],b[5][10] 

4种方法对二维数组初始化:

(1)分行给二维数组赋初值 例如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 

(2)可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值 例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

(3)可以对部分元素赋初值 例如: int a[3][4]={{1}, {5}, {9}};也可以对各行中的某一元素赋初值,如int a[3][4]={{1}, {0,6}, {0, 0, 0, 11}}; 

(4)如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省 例如:int a[3][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};等价于:、int a[ ][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

3.字符数组

(1)char c[10];c[0]=′I′ ;  c[1]=′ ′;   c[2[=′a′;   c[3]=′m′;c[4]=′ ′;   c[5]=′h′;  c[6]=′a′;   c[7]=′p′;c[8]=′p′;   c[9]=′y′;

对字符数组初始化,可逐个字符赋给数组中各元素 例如:char c[10]={‘I’, ‘’,‘a’,‘m’,‘’,‘h’,‘a’,‘p’, ‘p’,,‘y’} 

为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”——‘\0’

(2)字符数组的输入输出可以有两种方法:

逐个字符输入输出。用格式符“%c”输入或输出一个字符 将整个字符串一次输入或输出 用“%s”格式符,意思是对字符串的输入输出

(3)用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名 如果数组长度大于字符串实际长度,也只输出到遇′\0′结束 输出字符不包括结束

\0′  如果一个字符数组中包含一个以上′\0′,则遇第一个′\0′时输出就结束 可以用scanf函数输入一个字符串

(4)如果利用一个scanf函数输入多个字符串,则在输入时以空格分隔 例如:scanf(″%s %s %s″,str1,str2,str3);

puts函数

其一般形式为:  puts (字符数组) 其作用是将一个字符串(以′\0′结束的字符序列)输出到终端

用puts函数输出的字符串中可以包含转义字符

gets函数

其作用是从终端输入一个字符串到字符数组,并且得到一个函数值 该函数值是字符数组的起始地址

strcat函数

Strcat的作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址

strcpy函数

是将字符串2复制到字符数组1中去 strncpy可以设置复制几位

strcmp函数

作用是比较字符串1和字符串2

比较的结果由函数值带回:(1) 如果字符串1=字符串2,函数值为0 (2) 如果字符串1>字符串2,函数值为一正整数 (3) 如果字符串1<字符串2,函数值为一负整数

strlen函数

作用是测试字符串长度的函数。函数的值为字符串中的实际长度(不包括′\0′在内)

strlwr函数

作用是将字符串中大写字母换成小写字母

strupr函数

作用是将字符串中小写字母换成大写字母

四、函数

(1)C程序:只包含一个主函数main()  也可以包含一个主函数和若干个其它函数(库函数和自定义函数)

函数类型     函数名(形式参数类型说明表)

{

声明部分

执行部分

}

(2)形参与实参

形式参数:定义函数时函数名后面括号中的变量名       实际参数:调用函数时函数名后面括号中的表达式

值传递方式方式: 函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值;特点:形参与实参占用不同的内存

元; 单向传递

地址传递方式:函数调用时,将数据的存储地址作为参数传递给形参   特点:形参与实参占用同样的存储单元;“双向”传递;实参和形参必须是地址常量或变量;

(3)寄存器变量register :对于使用频繁的变量,可以使用register声明为寄存器变量,其值存储在CPU中,加快了运行速度 如:register int x;

(4) static声明局部变量:函数中的局部变量的值在函数调用结束后不消失而保留原值,以便下一次调用该函数时可以使用上一次调用的最后结果 这时就应该指定该局部

量为“静态局部变量”

(5)xtern声明外部变量:外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中

个函数所引用 在一个文件内声明外部变量 在多个文件的程序中声明外部变量 外部变量只限于被本文件引用,而不能被其它文件引用,可以在定义外部变量时加一个static声明

五、预处理

(1)种类 1.宏定义         #define     2.文件包含      #include    3.条件编译      #if--#else--#endif等

(2)格式:“#”开头 占单独书写行 语句尾不加分号 在源程序中这些命令都放在函数之外,而且一般都放在源文件的前面,它们被称为预处理

(3)不带参数宏:一般形式:   #define   宏名    [宏体]  功能:用指定标识符(宏名)代替字符序列(宏体) 定义位置:任意(一般在函数外面)  作用域:从定义命令到文件结束

(4)带参数宏:一般形式:  #define    宏名(参数表)     宏体      

          宏展开: area=3*2;    宏展开:形参用实参换,其它字符保留

(5)文件包含:功能:一个源文件可将另一个源文件的内容全部包含进来

          处理过程:预编译时,用被包含文件的内容取代该预处理命令,再对“包含”后的文件作一个源文件编译










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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值