C++课堂笔记五

C++课堂笔记五

函数


  1. 函数的定义:
1
2
3
4
5
返回值类型  函数名(参数1类型 参数1名称, 参数2类型 参数2名称.....)
{
语句组(即“函数体”)
}
如果函数不需要返回值,则“返回值类型”可写“void”

调用函数:

函数名(参数1,参数2,……)

对函数的调用,也是一个表达式。函数调用表达式的值,由函数内部的return语句决定。

return语句的功能是结束函数的执行,并将“返回值”作为结果返回。

“返回值”是常量,变量或复杂的表达式均可。如果函数返回值类型为“void”,return语句就直接写: return;

例:

1
2
3
4
5
6
7
8
9
10
11
12
int Max(int x,int y)//求两个整型变量中的较大值
{
if(x>y)
return x; //形参
return y;
}
int main() //形参=实参,类型需兼容
{
int n = Max(4,6);
cout<<n<<","<<Max(20,n)<<endl; //实参
return 0;
} //=>6,20

例2:判断是素数的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
bool isprime(unsigned ingt n)
{
if(n<=1)
return false;
for(int i = 2;i<n;++i) //是否有n的因子
if(n%i==0)
return false;
return true;
}
int main(){
cout<<isprime(2)<<","<<isprime(4)<<","<<isprime(5);
return 0;
}//=> 1,0,1
  1. 函数的声明

函数参数的传递

函数的形参是实参的一个拷贝,且形参的改变不会影响到实参

1
2
3
4
5
6
7
8
int main()
{
int a = 4, b = 5;
Swap(a,b);
cout<<"After swaping: a=" << a <<" b="<<b;
return 0;
}// In Swap : a= 5 b=4
After swaping: a=4 b=5
1
2
3
4
5
一维数组作为函数的参数:

类型名 数组名[]

数组作为函数的参数,是传引用的,即形参数组改变了,实参数组也会改变。

例: 求整型数组最大值的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
int a1[4] = {4,15,6,9};
int a2[] = {3,18,56,40,78};
int FindMax(int a[], int length){// length是数组的长度
int mx= a[0];
for(int i=1;i<length;++i)
if(mx<a[i])
mx=a[i];
return 0;
}
int main() {
cout<<FindMax(a1,sizeof(a1)/sizeof(int))<<endl;
cout<<FindMax(a2,sizeof(a2)/sizeof(int))<<endl;
}

二维数组作为函数的参数

二维数组作为形参时,必须写明数组有多少列,不用写明多少行:

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

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

形参数组的首地址就是实参数组的首地址

函数库和头文件

1
2
3
4
5
6
7
8
库函数: C/C++标准规定的,编译器自带的函数
头文件: C++编译器提供许多“头文件”,如
iostream
cmath
string
头文件内部包含许多库函数的声明以及其他信息,如cin,cout的定义
#include<iostream>
即可将头文件包含到程序中,此后即可使用头文件的库函数及其他信息

示例:

1
2
3
4
5
6
7
8
9
数学函数:camth

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:


字符串

1
2
3
4
5
c++中的字符串
三种形式:
1. 用双引号括起来的字符串常量, 如"CHINA"
2. 存放于字符数组中,以'\0'字符(ASCII码为0)结尾
3. string 对象。 string是C++标准模板库里的一个类,专门用于处理字符串。

1.

2. 示例:

用scanf读入字符串:

读入一行到字符数组

1
2
3
4
5
6
7
cin.getline(char buf[], int bufSize);

读入一行(行长度不超过bufSize-1)或bufSize-1个字符到buf, 自动添加'\0' 回车换行符不会写入buf,但是会从输入流中去掉

char line[10];
cin.getline(line, sizeof(line));//或cin.getline(line,10);读入最多9个字符到line
cout<<line;

1
2
3
4
5
6
7
8
9
gets(char buf[] );

读入一行,自动添加'\0'
回车换行符不会写入buf,但是会从输入流中去掉。可能导致数组越界

char s[10];
while( gets(s) ){
printf("%s\n",s);
}

字符串函数库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
使用字符串函数需要 #include<cstring>
字符串函数都根据'\0'来判断字符串结尾
形参为char []类型,则实参可以是char数组或字符串常量

字符串拷贝
strcpy(char [] dest, char []src ); // 拷贝src到dest

字符串比较大小
int strcmp(char []s1, char []s2);//返回0则相等
求字符串长度
int strlen(char []s);
字符串拼接
strcat(cahr []s1, char []s2);//s2拼接到s1后面
字符串转成大写
strupr(char []);
字符串转成小写
strlwr(cahr []);

解决方法:

应取出s的长度存放在一个变量里面,然后在循环的时候使用该变量