也就是说,函数可能不包含参数。
函数主体:函数主体包含一组定义函数执行任务的语句。
函数的返回值:返回语句 return 表达式;如下例的返回语句 return result;(函数中可以没有return 语句)
// 函数返回两个数中较大的那个数
int max(int num1, int num2)
{
// 局部变量声明
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}2. 函数的声明和调用
函数声明会告诉编译器函数名称及如何调用函数。在调用函数之前先要声明函数原型,在主调函数中或所有函数定义之前。
格式:
类型说明符 被调函数名(含类型说明的形参表)
例:
int js(int n);
C++里调用函数是否需要声明需要注意以下两点:
1.自己实现的函数,在调用的地方之前实现,无须声明,否则需要声明。
2.使用系统提供的函数,包含头文件即可使用。
#include <iostream>
using namespace std;
// 函数声明
int max(int num1, int num2);
int main ()
{
// 局部变量声明
int a = 100;
int b = 200;
int ret;
// 调用函数来获取最大值
ret = max(a, b);
cout << "最大值是 : " << ret << endl;
return 0;
}
// 函数返回两个数中较大的那个数
int max(int num1, int num2)
{
// 局部变量声明
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}3. 函数的传值调用
向函数传递参数的传值调用方法,把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。
#include <iostream>
using namespace std;
void swap(int a, int b)
{
int tmp=a;
s=b;
b=tmp;
return;
}
int main ()
{
// 局部变量声明
int c = 100;
int d= 200;
cout << "交换前,c 的值:" << c<< endl;
cout << "交换前,d 的值:" << d << endl;
// 调用函数来交换值
swap(c, d);
cout << "交换前,c 的值:" << c<< endl;
cout << "交换前,d 的值:" << d << endl;
return 0;
}在此例中,虽然在swap()函数中交换了a,b两数的值,但是在main中却没有交换,因为swap函数只是交换c,d两变量副本的值,实参值是没有改变的,并没有达到交换的目的;
4. 全局变量、局部变量及他们的作用域
作用域是程序的一个区域,一般来说有三个地方可以定义变量:
• 在函数或一个代码块内部声明的变量,称为局部变量。
• 在函数参数的定义中声明的变量,称为形式参数。
• 在所有函数外部声明的变量,称为全局变量。
局部变量
在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用
全局变量
在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。
全局变量可以被任何函数访问。也就是说,全局变量一旦声明,在整个程序中都是可用的
例:
#include <iostream>
using namespace std;
// 全局变量声明
int g;
int main ()
{
// 局部变量声明
int a, b;
// 实际初始化
a = 10;
b = 20;
g = a + b;
cout << g;
return 0;
}注:在程序中,局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。下面是一个实例
#include <iostream>
using namespace std;
// 全局变量声明
int g = 20;
int main ()
{
// 局部变量声明
int g = 10;
cout << g;
return 0;
}
//输出 105.作用域演示
作用域演示1 全局变量与局部变量覆盖
#include<iostream>
using namespace std;
int x=10;//全局变量
void pt(){
cout<<"pt cout x = "<<x<<endl;
}
int main(){
int x=50;//局部变量
cout<<"main cout x = "<<x<<endl;
for(int x=0;x<=5;x++){ //局部变量
cout<<"for cout x = "<<x<<endl;
}
pt();
}
作用域演示2 全局变量与局部变量覆盖
#include<iostream>
using namespace std;
int a=1;
void pt(){
int a=1024;
cout<<"pt cout a = "<<a<<endl;
}
int main(){
int a=100;
if(a==100){
int a=999;
cout<<"main cout a = "<<a<<endl;
pt();
}
}值传递演示 值传递不能修改实参
#include<iostream>
using namespace std;
void swap(int x,int y){
int t;
t=x;
x=y;
y=t;
return ;
}
int main(){
int a=100,b=50;
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
swap(a,b);
cout<<"after swap"<<endl;
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
} 引用传递 引用传递可以改变实参
#include<iostream>
using namespace std;
void swap(int &x,int &y){
int t;
t=x;
x=y;
y=t;
return ;
}
int main(){
int a=100,b=50;
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
swap(a,b);
cout<<"after swap"<<endl;
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
} 单个变量默认为值传递,数组默认为引用传递,演示
#include<iostream>
using namespace std;
void change(int a[],int b){
b=b*b;
for(int i=0;i<3;i++){
a[i]=a[i]*a[i];
}
}
int main(){
int a[3]={1,2,3};
int b=100;
cout<<"a : ";
for(int i=0;i<3;i++){
cout<<a[i]<<" ";
}
cout<<endl<<"b : "<<b<<endl;
} 1006 函数案例+复习
1.欧几里德算法(辗转相除法)
是指用于计算两个正整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) =gcd(b,a mod b)。
欧几里德算法是用来求两个正整数最大公约数的算法。是由古希腊数学家欧几里德在其著作《The
Elements》中最早描述了这种算法,所以被命名为欧几里德算法。 扩展欧几里德算法可用于RSA加密等领域。 假如需要求 1997 和615 两个正整数的最大公约数,用欧几里德算法,是这样进行的:
1997 / 615 = 3 (余 152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
至此,最大公约数为1 以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615的最大公约数 1。
#include<iostream>
using namespace std;
int GCD(int a, int b)//求最大公约数
{
int c;
while (b > 0)
{
c = a % b;
a = b;
b = c;
}
return a;
}
int LCM(int a,int b)//求最小公倍数
{
int c;
c = a * b / GCD(a, b);
return c;
}
int main()
{
int x, y;
cin >> x >> y;
cout << "x和y的最大公约数为:" << GCD(x, y) << endl;
cout << "x和y的最小公倍数为:" << LCM(x, y) << endl;
return 0;
}
2.素数判断
#include<iostream>
using namespace std;
int is_prime(int a)
{ int t;
if (a1) return 0;
for(int i=2;i<a;i++){
if(a%i0){
return 0;
}
}
return 1;
}
int main() {
return 0;
} 3.数字回文数
#include<iostream>
using namespace std;
int is_pal(int a)
{ int t=a,b=0,s=0;
while(t!=0){
b=t%10; //依次提取每一位数
t=t/10; //去除最后一位数
s=s*10+b;
}
if(s==a){
return 1;
}
else{
return 0;
}
}
int main() {
return 0;
} 补充排序
1. 冒泡排序
2. 选择排序
3. 桶排序
1007结构体
在实际问题中,一组数据往往具有不同的数据类型。
实例:
4. 成绩统计,输入n个学生的姓名,数学得分、语文得分,按总分从高到低输出,分数相同的按照输入现后输出。0<n<=100 ,分数范围<100, 姓名由不超过10个的小写字母组成。
#include <bits/stdc++.h>
using namespace std;----c++常用头文件以及函数
5. #include<iostream>
主要函数:cin、cout;
使用方法:cin>>变量名; 、cout<<变量名<<endl; //endl代表换行
6. #include<cmath>
主要函数:
(1)abs() 求绝对值
(2)pow() 求幂
(3)sqrt() 平方根
(4)pow(x,y) x的y次方
7. #include <cstring>
主要函数:
4 #include <iomanip>
io代表输入输出,manip是manipulator(操纵器)的缩写(在c++上只能通过输入缩写才有效。)
主要是对cin,cout之类的一些操纵运算子,比如setfill,setw,setbase,setprecision等等。它是I/O流控制头文件,就像C里面的格式化输出一样。
以下是一些常见的控制函数的:
dec 置基数为10 相当于"%d"
hex 置基数为16 相当于"%X"
oct 置基数为8 相当于"%o"
setfill( ‘c’ ) 设填充字符为c
setprecision( n ) 设显示有效数字为n位
setw( n ) 设域宽为n个字符
5.万能头
#include <bits/stdc++.h>