c++学习总结(一)---函数
2018-03-23 20:41
253 查看
一.心得总结
在上学期的c语言的学习中,我初次接触了编程,感觉比较新奇也比较有挑战性,从一开始什么都不会,到慢慢可以写程序,心中慢慢积累起成就感。在上学期编程中解决一道难题,虽然很好,但代码很长,有些语句反复使用,但却没有方法找到简单的方法。老师说过写出好程序才是一个程序员该做的。而这一学期学的函数,便可以起到简化代码的功能,使用可以使冗长的代码缩短,而且还可以缩短运行时间。在解决简单的题目时,可能感觉不到代码缩短过程序变得简单,但当遇到十分复杂的题目时,函数的功能便可以完全展现出来了。因此用好函数,是接下来阶段学习c++及更多语言的重要任务,我也因此要求自己反复琢磨函数的正确用法。下学期的课程都十分难,在刚开学这几周的学习,就可以完全感受到,而越难的题目就越应该用好函数。接下来简单介绍总结一下函数。
二、内容总结
1.函数定义的一般形式为:
↙返回值类型 ↙形参表可以为空,但括号不能省略
类型标识符 函数名(形参表) ← 函数首部
{
语句 ←函数体,可以为空,但花括号不能省略
}←没有分号
2.形参与实参
类似于局部变量,函数的形参为函数提供了已命名的局部储存空间。他们之间的差别在于形参是在函数的形参表中定义的,并由调用函数时传递函数的实参初始化。
实参则是一个表达式。它可以是变量或字面值常量,甚至是包含一个或几个操作符的表达式。在调用函数时所传递的实参个数必须与函数的形参个数完全相同。与初始化式的类型必须与初始化对象的类型匹配一样,实参的类型也必须与其对应形参的类型完全匹配:实参必须具有与形参类型相同,或者能隐式转换为形参类型的数据类型。
3.函数返回类型
函数的返回类型可以是内置类型(如 int 或者 double )、类类型或复合类型(如 int& 或 string*),还可以是void类型,表示该函数不返回任何值,bool类型,表示判断。
4.引用
类型名&引用名=某变量名;
某个变量的引用,和这个变量是一回事,相当于该变量的一个别名
int n=4; 定义引用时一定要将其初始化成引用某个变量,不初始化编译不过。
int &r=n;
r=4;
cout<<r;//输出4;
cout<<n;//输出4;
n=5; 引用只能引用变量,不能引用常量和表达式
cout<<r;//输出5;
5.指针变量
<1>其内容为地址(储存位置)的变量,简称指针。它所指向的地址上存放的变量称作目标变量。
形式:类型标识符 *变量名
int *i-point,*j-point;
<2>指针变量同也可以赋值:
int i,*-point;
i-point=&i;
也可以在定义指针变量时赋初值:
int i;
int *i-point=&i;//取地址运算;
*i-point=3;//取内容运算;
<3>一个指针变量只能指向同一类型的变量。即整型指针变量只能指向整型数据的地址,而不能放其它类型数据的地址。绝对不能对未赋值的指针变量作“取内容”运算。
int main()
{int a,b;
int *p1,*p2;
*p1=10;*p2=100;
cout<<a<<'\t'<<b<<endl;
cout<<*p1<<'\t'<<*p2<<endl;//p1,p2为随机值,应在“取内容”前加上p1=&a;p2=&b;
}
<4>指针的运算
++(--):指向下一个(或上一个)同种类型的数据
-int a[4];int *p=a;p++;
-int b=2;int *q=&b;p--;
+n(-n)
-int a[4];int *p=a;p+=2;
-int b=2;int *q=&b;p-=2;
<5>指针变量作为函数参数:
函数的参数可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中。指针变量作为函数参数与变量本身作函数参数不同,变量作函数参数传递的是具体指,二指针作函数传递的是内存的地址。
<6>数组与指针
int a[10],*p;
p=&a[0];//数组第一个元素的地址
p=a;//直接用数组名赋值,p是变量,a是常量
若数组元素为int型,则指向其的指针变量也应定义为int型。
int a[10];
int *p=a; int *p=&a[0];//这两种情况均为赋初值;
通过指针引用数组元素
int a[10];
int *p=a;//为指针变量赋初值;
*p=1;//通过指针变量为数组元素赋值;
*(p+1)=2;a[1]=2;//p+1指向数组的下一个元素,而不是下一个字节;
三、常见题型
1.用传址调用来实现swap:
#include<iostream>
using namespace std;
void swap(int &a,int &b)//定义swap()函数,形参是传址调用
{int tmp=a;a=b;b=tmp;
}
int main()
{int c=1,d=2;
swap(c,d);//交换变量
cout<<c<<‘'d<<endl;
return 0;
}//程序输出为:2 1
2.求任意两个自然数的最大公约数
#include<iostream>
int gys(int m,int n);
int main()
{int x,y,ys;
cin>>x>>y;
ys=gys(x,y);
cout<<ys<<endl;
return 0;
}
int gys(int m,int n)
{int r,t)
if(m<n)
{t=m;m=n;n=t;
}
r=m%n;
while(r!=0)
{m=n;n=r;r=m%n;}
return n;
}
3.判断一个素数的函数,输入一个数,判断它是否是素数,是输出yes,不是输出no
#include<cstdio>
#include<cmath>
int ss(int x);
int main()
{int n;
cin>>n;
if(ss(n))cout<<"yes";
else
cout<<"no";
return 0;
}
int ss(int x)
{int j;
if(x=2)return 1;
j=2;
while(j<=sqrt(x)&&x%j!=0)j++;
if(x%j==0)
return 0;
else
return 1;
}
以上就是我对函数方面的总结。
在上学期的c语言的学习中,我初次接触了编程,感觉比较新奇也比较有挑战性,从一开始什么都不会,到慢慢可以写程序,心中慢慢积累起成就感。在上学期编程中解决一道难题,虽然很好,但代码很长,有些语句反复使用,但却没有方法找到简单的方法。老师说过写出好程序才是一个程序员该做的。而这一学期学的函数,便可以起到简化代码的功能,使用可以使冗长的代码缩短,而且还可以缩短运行时间。在解决简单的题目时,可能感觉不到代码缩短过程序变得简单,但当遇到十分复杂的题目时,函数的功能便可以完全展现出来了。因此用好函数,是接下来阶段学习c++及更多语言的重要任务,我也因此要求自己反复琢磨函数的正确用法。下学期的课程都十分难,在刚开学这几周的学习,就可以完全感受到,而越难的题目就越应该用好函数。接下来简单介绍总结一下函数。
二、内容总结
1.函数定义的一般形式为:
↙返回值类型 ↙形参表可以为空,但括号不能省略
类型标识符 函数名(形参表) ← 函数首部
{
语句 ←函数体,可以为空,但花括号不能省略
}←没有分号
2.形参与实参
类似于局部变量,函数的形参为函数提供了已命名的局部储存空间。他们之间的差别在于形参是在函数的形参表中定义的,并由调用函数时传递函数的实参初始化。
实参则是一个表达式。它可以是变量或字面值常量,甚至是包含一个或几个操作符的表达式。在调用函数时所传递的实参个数必须与函数的形参个数完全相同。与初始化式的类型必须与初始化对象的类型匹配一样,实参的类型也必须与其对应形参的类型完全匹配:实参必须具有与形参类型相同,或者能隐式转换为形参类型的数据类型。
3.函数返回类型
函数的返回类型可以是内置类型(如 int 或者 double )、类类型或复合类型(如 int& 或 string*),还可以是void类型,表示该函数不返回任何值,bool类型,表示判断。
4.引用
类型名&引用名=某变量名;
某个变量的引用,和这个变量是一回事,相当于该变量的一个别名
int n=4; 定义引用时一定要将其初始化成引用某个变量,不初始化编译不过。
int &r=n;
r=4;
cout<<r;//输出4;
cout<<n;//输出4;
n=5; 引用只能引用变量,不能引用常量和表达式
cout<<r;//输出5;
5.指针变量
<1>其内容为地址(储存位置)的变量,简称指针。它所指向的地址上存放的变量称作目标变量。
形式:类型标识符 *变量名
int *i-point,*j-point;
<2>指针变量同也可以赋值:
int i,*-point;
i-point=&i;
也可以在定义指针变量时赋初值:
int i;
int *i-point=&i;//取地址运算;
*i-point=3;//取内容运算;
<3>一个指针变量只能指向同一类型的变量。即整型指针变量只能指向整型数据的地址,而不能放其它类型数据的地址。绝对不能对未赋值的指针变量作“取内容”运算。
int main()
{int a,b;
int *p1,*p2;
*p1=10;*p2=100;
cout<<a<<'\t'<<b<<endl;
cout<<*p1<<'\t'<<*p2<<endl;//p1,p2为随机值,应在“取内容”前加上p1=&a;p2=&b;
}
<4>指针的运算
++(--):指向下一个(或上一个)同种类型的数据
-int a[4];int *p=a;p++;
-int b=2;int *q=&b;p--;
+n(-n)
-int a[4];int *p=a;p+=2;
-int b=2;int *q=&b;p-=2;
<5>指针变量作为函数参数:
函数的参数可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中。指针变量作为函数参数与变量本身作函数参数不同,变量作函数参数传递的是具体指,二指针作函数传递的是内存的地址。
<6>数组与指针
int a[10],*p;
p=&a[0];//数组第一个元素的地址
p=a;//直接用数组名赋值,p是变量,a是常量
若数组元素为int型,则指向其的指针变量也应定义为int型。
int a[10];
int *p=a; int *p=&a[0];//这两种情况均为赋初值;
通过指针引用数组元素
int a[10];
int *p=a;//为指针变量赋初值;
*p=1;//通过指针变量为数组元素赋值;
*(p+1)=2;a[1]=2;//p+1指向数组的下一个元素,而不是下一个字节;
三、常见题型
1.用传址调用来实现swap:
#include<iostream>
using namespace std;
void swap(int &a,int &b)//定义swap()函数,形参是传址调用
{int tmp=a;a=b;b=tmp;
}
int main()
{int c=1,d=2;
swap(c,d);//交换变量
cout<<c<<‘'d<<endl;
return 0;
}//程序输出为:2 1
2.求任意两个自然数的最大公约数
#include<iostream>
int gys(int m,int n);
int main()
{int x,y,ys;
cin>>x>>y;
ys=gys(x,y);
cout<<ys<<endl;
return 0;
}
int gys(int m,int n)
{int r,t)
if(m<n)
{t=m;m=n;n=t;
}
r=m%n;
while(r!=0)
{m=n;n=r;r=m%n;}
return n;
}
3.判断一个素数的函数,输入一个数,判断它是否是素数,是输出yes,不是输出no
#include<cstdio>
#include<cmath>
int ss(int x);
int main()
{int n;
cin>>n;
if(ss(n))cout<<"yes";
else
cout<<"no";
return 0;
}
int ss(int x)
{int j;
if(x=2)return 1;
j=2;
while(j<=sqrt(x)&&x%j!=0)j++;
if(x%j==0)
return 0;
else
return 1;
}
以上就是我对函数方面的总结。
相关文章推荐
- C++学习总结2——函数
- 【C++ STL学习与应用总结】22: 函数组合之1:如何使用std::bind (since C++11)
- 学习C++Primer Plus 函数探幽总结
- C++学习总结(十一)——类的静态函数,成员函数的默认参数,类中包含引用和常量
- C++学习总结系列--虚函数与多态
- c++函数学习总结
- 【C++学习与应用总结】1: 两种变长参数函数比较
- C/C++日常学习总结(第十一篇)函数指针
- C/C++函数学习总结
- 第六章c++函数学习总结
- C++函数学习总结
- [编程学习]C++ 函数模板学习总结
- C/C++日常学习总结(第六篇)多基派生引起的虚函数访问二义性问题&重载,覆盖,隐藏的区别
- C/C++ 日常学习总结(第十八篇)参数个数可变的函数
- C/C++ 日常学习总结(第二十篇)实现自己的printf函数
- imooc 学习总结——离港篇:C++函数新特性
- C++学习总结系列--函数部分
- C++学习总结_成员函数的声明和实现需要注意问题
- C++学习——const成员函数总结
- 学习c++对类的6个成员函数的简单总结