郭炜-C语言程序设计-程序设计与算法(一)-第六周

郭炜-C语言程序设计-程序设计与算法(一)-第六周,第1张

第六周 1.函数
  • “函数” 可以将实现了某一功能,并需要反复使用的代码包装起来形成一个功能模块(即写成一个“函数”),那么当程序中需要使用该项功能时,只需写一条语句,调用实现该功能的 “函数”即可。
  • 不同的程序员可以分别写不同的函数,拼起来形成一个大程序。
1.1函数的定义
返回值类型 函数名(参数1类型 参数1名称, 参数2类型 参数2名称……)
{
语句组(即“函数体”)
}
  • 如果函数不需要返回值,则返回值类型可以写void
1.2函数的调用和return语句

调用函数:

函数名(参数1,参数2,……)
  • 对函数的调用,也是一个表达式。函数调用表达式的值,由函数内部的return语句决定。return语句语法如下:
    return 返回值;

  • return语句的功能是结束函数的执行,并将“返回值”作为结果返回。“返回值”是常量、变量或复杂的表达式均可。如果函数返回值类型为“void”,return语句就直接写:

return ;

  • return 语句作为函数的出口,可以在函数中多次出现。多个return语句的“返回值”可以不同。在哪个return语句结束函数的执行,函数的返回值就和哪个return语句里面的“返回值”相等。
1.3函数的声明
  • 一般来说函数的定义必须出现在函数调用语句之前,否则调用语句编译出错。
  • 函数的调用语句前面有函数的声明即可,不一定要有定义!
返回值类型 函数名(参数1类型 参数1名称, 参数2类型 参数2名称……);
//参数名称可以省略。函数声明也称为“函数的原型”
  • C/C++程序从main函数开始执行,执行到main中的return则结束。
  • 一般来说函数的形参是实参的一个拷贝,且形参的改变不会影响到实参,除非类型是数组,引用。
1.4一维数组作为函数的参数
  • 一维数组作为形参时的写法如下:
    类型名 数组名[ ]
    不用写出数组的元素个数。
  • 数组作为函数参数时,是传引用的,即形参数组改变了,实参数组也会改变。
1.5二维数组作为函数的参数
  • 二维数组作为形参时,必须写明数组有多少列,不用写明有多少行:

    void PrintArray( int a[][5])
    {
    cout << a[4][3];
    }
    
  • 必须要写明列数,编译器才能根据下标算出元素的地址。
    a[i][j]的地址:

    数组首地址+i×N×sizeof(a[0[0])+j×sizeof(a[0][0])

    (N是数组列数)形参数组的首地址就是实参数组的首地址.

2.库函数和头文件
  • 库函数:C/C++标准规定的,编译器自带的函数
  • 头文件:C++编译器提供许多“头文件”,如: iostream cmath
    string 等头文件内部包含许多库函数的声明以及其他信息,如cin,cout的定义。
  • #include<头文件>即可将头文件包含到程序中,此后即可使用头文件中声明的库函数及其他信息。
数学函数
数学库函数声明在cmath中,主要有:
int abs(int x) 求整型数x的绝对值
double cos(double x) 求x(弧度)的余弦
double fabs(double x) 求浮点数x的绝对值
int ceil(double x) 求不小于x的最小整数
double sin(double x) 求x(弧度)的正弦
double sqrt(double x) 求x的平方根
......
字符处理函数
这些库函数在ctype中声明,主要有:
int isdigit(int c) 判断 c 是否是数字字符
int isalpha(int c) 判断 c 是否是一个字母
int isalnum(int c) 判断 c 是否是一个数字或字母
int islower(int c) 判断 c 是否是一个小写字母
int isupper(int c) 判断 c 是否是一个大写字母
int toupper(int c) 如果 c 是一个小写字母,则返回对应大写字母
int tolower (int c) 如果 c 是一个大写字母,则返回对应小写字母
3.递归
  • 一个函数,自己调用自己,就是递归。
  • 递归函数需要有终止条件,否则就会无穷递归导致程序无
    法终止甚至崩溃。
4.位运算
  • 用于对整数类型(int,char, long 等)变量中的某一位(bit),或者若干位进行 *** 作。

  • C/C++语言提供了六种位运算符来进行位运算 *** 作。

1.按位与 “&”
  • 将参与运算的两 *** 作数各对应的二进制位进行与 *** 作,只有对应的两个二进位均为1时,结果的对应二进制位才为1,否则为0。
  • 通常用来将某变量中的某些位清0且同时保留其他位不变。也可以用来获取某变量中的某一位。
2.按位或 “|”
  • 将参与运算的两 *** 作数各对应的二进制位进行或 *** 作,只有对应的两个二进位都为0时,结果的对应二进制位才是0,否则为1。
  • 按位或运算通常用来将某变量中的某些位置换1且保留其他位不变。
3.按位异或 “^”
  • 将参与运算的两 *** 作数各对应的二进制位进行异或 *** 作,即只有对应的两个二进位不相同时,结果的对应二进制位才是1,否则为0。
  • 按位异或运算通常用来将某变量中的某些位取反,且保留其他位不变。
  • 如果 a^b=c,那么就有 c^b = a以及c^a=b。
  • 异或运算还能实现不通过临时变量,就能交换两个变量的值
int a = 5, b = 7;
a = a ^ b;
b = b ^ a;
a = a ^ b;
4.按位非 “~”
  • 按位非运算符“~”是单目运算符。其功能是将 *** 作数中的二进制位0变成1,1变成0。
5.左移运算符 “<<”
  • 表达式:a << b的值是:

    将a各二进位全部左移b位后得到的值。左移时,高位丢弃,低位补0。a 的值不因运算而改变。

  • 实际上,左移1位,就等于是乘以2,左移n位,就等于是乘以2n 。而左移 *** 作比乘法 *** 作快得多。

6.右移运算符 “>>”
  • 表达式:a >> b的值是:将a各二进位全部右移b位后得到的值。右移时,移出最右边的位就被丢弃。 a 的值不因运算而改变。
  • 对于有符号数,如long,int,short,char类型变量,在右移时,符号位(即最高位)将一起移动,并且大多数C/C++编译器规定,如果原符号位为1,则右移时高位就补充1,原符号位为0,则右移时高位就补充0。
  • 对于无符号数,右移时高位就补充0。
  • 实际上,右移n位,就相当于左 *** 作数除以2 n ,并且将结果往小里取整。
总结
位运算符特点作用
&皆1为1尾位清零,保前位
|皆0为0尾位换1,保前位
^同0异1尾位取反,保前位
~0、1互换全数取反
<<左移*2n左移高丢左补零
>>右移/2n右移低丢左补0或1
  • 只有非是单目运算符

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

原文地址:https://54852.com/langs/1325850.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存