/*
函数和函数模板
1.函数的参数以及传递方式
参数参数传地址值和传地址对象对象指针对象引用也可以使用const限制,函数的参数还可以设计成默认形式。
3.1.1对象作为函数参数。
3.1.2对象指针作为函数参数
3.1.3引用作为函数参数。
3.5间接引用数组的例子
3.1.4默认参数可以多于一个但必须放在参数序列的后面,默认参数需要致命一个特定值在其之前的所有参数都必须赋值。
3.1.5使用const保护数据
3.2返回引用的函数。
3.2.3返回指针函数。
3.2.3返回对象的函数。
3.2.4函数返回值作为函数的参数
3.3内联函数
3.4函数的重载和默认参数
3.5函数模板
3.16使用类模板作为函数模板参数的程序
3.17使用显示规则和关键字typename编制函数模板的例子
作业题
1.函数原型声明C++函数double abc (double,char)表示一个返回值是double的函数。参数一个是double一个是char
2.inline
3.三种对象引用对象指针可以当参数传递
4.int * method(char ,int )
二。A string input(const int);不允许干煸函数参数的声明
2.重载的正确C函数的返回值可以相同
3.template
三。改错题
1.T不是变量而是一种类型不能做运算。
2.y没有类型
3.const是不可以更改参数。可以使用。
四编程题
1.求方程的根并且写出判断。
2.定义函数up(ch)如果字符变量ch是小写字母就转换成大写字母并通过up返回,否则字符ch不改变,要求在短小而
完全的程序中显示程序怎样被调用?
3.编写主程序调用带实数r和整数n两个参数的函数并输出r的n次幂。
4.编写有字符参数C和整形参数N的函数让他们显示出由字符C组成三角形其中方式为第一行有
1个字符C第2行有2个字符C等等。
5.编写一个ieqiu字符串长度的函数strlen()再用strlen()函数编写一个函数revers(s)的倒序递归程序使字符串s逆序。
6.用函数模板实现3个数值中按最小值到最大值排序的程序。
7.利用函数模板设计一个求数组元素中和的函数。
8.重载上题中的函数模板,使他能够进行两个数组的求和。
*/
/* 7.利用函数模板设计一个求数组元素中和的函数。
8.重载上题中的函数模板,使他能够进行两个数组的求和。
#include
using namespace std;
template
T sum(T a[],int n)
{
int i;
T s=0;
for (i=0;i
s=s+a[i];
}
return s;
}
template
T sum(T a[],int n,T b[],int m)
{
return sum(a, n)+sum(b, m);
}
int main()
{
int a[5]={1,2,3,4,5};
int b[10]={1,2,3,4,5,6,7,8,9,10};
int s1=sum(a, 5);
int s2=sum(a, 5, b, 10);
cout<
cout<
return 0;
}
*/
/* 6.用函数模板实现3个数值中按最小值到最大值排序的程序。
#include
using namespace std;
typedef double Array[8];
template
void sort(T a,T b,T c)
{
T Array[3],temp;
int i,j;
Array[0]=a;
Array[1]=b;
Array[2]=c;
for ( i=0;i<3 ; i++) {
for ( j=0; j<2; j++) {
if (Array[j]>Array[j+1]) {
temp=Array[j];
Array[j]=Array[j+1];
Array[j+1]=temp;
}
}
}
cout<
}
int main()
{
sort(1,8,4);
}
*/
/* 5.编写一个ieqiu字符串长度的函数strlen()再用strlen()函数编写一个函数revers(s)的倒序递归程序使字符串s逆序
#include
using namespace std;
int strlen(char * str)
{
int len=0;
while (str[len]!='\0') {
len++;
}
return len;
}
void reverse(char * b)
{
char c;
int j,len;
len=strlen(b);
j=len/2-1;
while (j>=0) {
c=*(b+j);
*(b+j)=*(b+len-j-1);
*(b+len-j-1)=c;
j--;
}
b[len]='\0';
}
intmain()
{
char str[]={"123456789"};
cout<
reverse(str);
cout<
}
。*/
/*4.编写有字符参数C和整形参数N的函数让他们显示出由字符C组成三角形其中方式为第一行有
1个字符C第2行有2个字符C等等。
#include
using namespace std;
void print_ln(char c,int n)
{
int i,j;
for (i=0; i
for (j=0; j<=i; j++) {
cout<
}
cout<
}
}
int main()
{
print_ln('a', 10);
}
*/
/**编程题
3.3.编写主程序调用带实数r和整数n两个参数的函数并输出r的n次幂
#include
using namespace std;
#include
double power(double a,int b)
{
int i;
double result =1.0;
for (i=0; i
result =result*a;
}
returnresult;
}
int main()
{
double r;
int n;
cout<<"r=";
cin>>r;
cout<<"n=";
cin>>n;
cout<<"r的n次幂是"<< power(r,n);
}
*/
/*编程题
2.定义函数up(ch)如果字符变量ch是小写字母就转换成大写字母并通过up返回,否则字符ch不改变,要求在短小而
完全的程序中显示程序怎样被调用?
#include
using namespace std;
char up(char c)
{
if (c>=97&&c<=123) {
return c-32;
}
else
{
return c;
}
}
int main()
{
char c[4]={'a','S','D','T'};
for (int i=0; i<4; i++) {
cout<
cout<
}
return 0;
}
*/
/*四编程题1.求方程的根并且写出判断。
#include
#include
using namespace std;
//a>b
void equaltion_1(int a,int b,int c)
{
double x1,x2,temp;
temp =b*b-4*a*c;
x1=(-b+sqrt(temp))/(2*a*1.0);
x2=(-b-sqrt(temp))/(2*a*1.0);
//两个不相等的实根
cout<
}
//a==b
void equaltion_2(int a,int b,int c)
{
double x1,x2,temp;
temp =b*b-4*a*c;
x1=(-b+sqrt(temp))/(2*a*1.0);
x2=x1;
cout<<"两个相等的实根"<
cout<
}
//a
void equaltion_3(int a,int b,int c)
{
double temp,real1,real2,image1,image2;
temp=-(b*b-4*a*c);
real1=-b/(2*a*1.0);
real2=real1;
image1=sqrt(temp);
image2=-image1;
}
int main()
{
int a, b, c;
double temp;
cin>>a>>b>>c;
temp =b*b-4*a*c;
if (temp>0) {
equaltion_1(a, b, c);
}
if (temp==0) {
equaltion_1(a, b, c);
}
if (temp<0) {
equaltion_1(a, b, c);
}
}**/
/* 3.4函数的重载和默认参数引出3.5函数模板conplex模板类参数的重载使用
#include
#include
using namespace std;
template
T ma7(T m1,T m2)
{
return (m1>m2)?m1:m2;
}
template
void printer(complex a)
{
string str1("dsad"),str2="dssa";
cout<
}
int main()
{
cout<< ma7(2,3 );
complexnum(1,2);
complexnum1(2,3);
printer(num);
printer(num1);
return 0;
}
*/
/* 3.3内联函数除了循环和switch的语句外其他函数都可以称为内联函数。
#include
using namespace std;
int isnumber(char c){
return( c>'0'&&c<='9')?1:0;
}
int main()
{
char c;
cin>>c;
if (isnumber(c)) {
cout<<"是数字字符";
}
else
{
cout<<"不是数字字符";
}
return 0;
}
*/
/* 3.2.4函数返回值作为函数的参数
#include
using namespace std;
int max(int,int);
int main()
{
cout<
}
int max(int a,int b)
{
return (a>b)?a:b;
}
*/
/* 3.2返回引用的函数
3.2.3返回指针函数。
3.10返回对象
#include
using namespace std;
int a[] ={2,4,6,8};
int& index(int i);
float * input(int &);
string inputs(const int);
int main()
{
index(3)=16;
cout<
int num;
float * data;
data=input(num);
if (data) {
for (int i=0; i
cout<
}
}
delete data;
cout<<"请输入一个整数";
int n;
cin>>n;
cout<
}
int& index(int i)
{
return a[i];
}
float * input(int & n)
{
cout<<"请输入一个整数";
cin>>n;
if (n==0) {
return NULL;
}
float * buf=new float[n];
if (buf) {
return NULL;
}
for (int i=0; i<4; i++) {
cin>>buf[i];
}
return buf;
}
string inputs(const int n)
{
string s1,s2;
for (int i=0; i
cin>>s1;
s2=s2+s1+"";
}
return s2;
}
。*/
/*
3.1.5使用const保护数据主要是表示参数不能修改原函数没有修改。
#include
#include
using namespace std;
void change(const string&);
int main()
{
string str("Can you change it");
change (str);
cout<
return 0;
}
void change(const string&s)
{
string s2=s+"No";
cout<
} */
/* 3.1.4默认参数可以多于一个但必须放在参数序列的后面,默认参数需要致命一个特定值在其之前的所有参数都必须赋值。设计一个根据参数数量输出信息的函数
#include
using namespace std;
void Display(string s1,string s2="",string s3="");
int main()
{
string str1("现在"),str2("过去"),str3("将来");
Display(str1,str2,str3);
Display(str3,str1);
Display(str2,str3);
return 0;
}
void Display(string s1,string s2,string s3)
{
if (s2==""&&s3=="") {
cout<
}else if (s3=="" && s2!="")
{
cout<
}
else
{
cout<
}
}
*/
/*
3.5间接引用数组的例子
#include
using namespacestd;
typedef double Array[8];
void avccout(Array &b,int n)
{
double ave(0);
intcount(0);
for (int j=0; j
ave=ave+b[j];
if (b[j]<60) {
count++;
}
//平均数
//不及格的人数
b[n-2]=ave/(n-2);
b[n-1]=count;
}
}
int main()
{
Array b={12,1324,3214324,43,9,0};
avccout(b,8);
cout<
return 0;
}
*/
/*
3.1.1对象作为函数参数。
3.1.2对象指针作为函数参数
3.1.3引用作为函数参数。
#include
#include
using namespace std;
//不会改变原来对象数据成员值的例子。
void swap(string,string);
//指针作为参数
void swap1(string *,string *);
//引用作为函数参数
void swap2(string&,string &);
int main()
{
string str1("现在"),str2("过去");
cout<
swap(str1,str2);
cout<
swap1(&str1, &str2);
cout<
swap2(str1, str2);
cout<
return 0;
}
void swap(string s1,string s2)
{
string temp=s1; s1=s2; s2=temp;
cout<
}
void swap1(string * s1,string * s2)
{
string temp=*s1; *s1=*s2;*s2=temp;
cout<<*s1<<*s2<
}
void swap2(string& s1,string & s2)
{
string temp=s1; s1=s2;s2=temp;
cout<
}*/