您的位置:首页 > 其它

第六章作业

2014-05-16 09:25 176 查看

作业1

例题6.1 举例说明了指针的几种表示形式,*p指向指针指向的变量,&p指向该变量的存储地址,

/**********************************
**   例题6.1 指针的几种形式    **
**   自动化1121  李庆典        **
**********************************/

#include <iostream>    //预编译处理命令
using namespace std;   //标准名字空间

int main()
{
int a =10;
int * p;
p=&a;
cout<<" a = "<<a<<endl;
cout<<" p = "<<p<<endl;
cout<<"&a = "<<&a<<endl;
cout<<"*p = "<<*p<<endl;
cout<<"&p = "<<&p<<endl;
cout<<endl;
* p=15;
cout<<" a = "<<a<<endl;
cout<<" p = "<<p<<endl;
cout<<"&a = "<<&a<<endl;
cout<<"*p = "<<*p<<endl;
cout<<"&p = "<<&p<<endl;

return 0;
}

运行结果如下 可以看出&a与p是指向相同的地址,并且此时*p=a的值,但是这个p本身的存储位置是在0012FF78的,并不是与a的存储地址相同



例题6.2

运用指针的形式对比两个数据大小,这里是用到了更改指针指向地址来达到程序目的的,这样做的好处就是不会更改原先的数据,仅仅是更改我们定义的指针来达到输出排序后的数据的目的\

/**********************************
**   例题6.2     **
**   自动化1121  李庆典        **
**********************************/

#include <iostream>    //预编译处理命令
using namespace std;   //标准名字空间

int main()             //主函数
{
int a,b;
int *p=&a,* q=&b,* tp;
cout<<"请输入两个数:";
cin>>a>>b;
if (a<b)
{
tp=p;p=q;q=tp;          //依据大小来更改指针的指向地址
}
cout<<"初始的两个数为:"<<a<<'\t'<<b<<endl;
cout<<"排序之后的数为:"<<* p<<'\t'<<* q<<endl;

return 0;
}

这里 例题6.3也是类似的题目,不同的是 这里用指针来改变了a,b的值,此时p和q指向的地址依旧不变,变的只是a,b的实际的值

/**********************************
**   例题6.3     **
**   自动化1121  李庆典        **
**********************************/

#include <iostream>    //预编译处理命令
using namespace std;   //标准名字空间

int main()             //主函数
{
int a,b,tp;
int *p=&a,* q=&b;
cout<<"请输入两个数:";
cin>>a>>b;
cout<<"初始的两个数为:"<<a<<'\t'<<b<<endl;
if (a<b)
{
tp=*p;*p=*q;*q=tp;
}

cout<<"排序之后的数为:"<<a<<'\t'<<b<<endl;
cout<<"排序之后的数为:"<<*p<<'\t'<<*q<<endl;

return 0;
}


例题6.4 指针的关系运算

/**********************************
**   例题6.4  指针的关系运算   **
**   自动化1121  李庆典        **
**********************************/

#include <iostream>    //预编译处理命令
#include <iomanip>     //控制流头文件
using namespace std;   //标准名字空间

int main()             //主函数
{
int a=10,b=10,*part1,*part2;
part1=&a;
part2=&b;
cout<<boolalpha<<(*part1 ==*part2)<<endl;
cout<<boolalpha<<(part1 == part2)<<endl;
return 0;
}


例题6.5

三种方法输出数组的值

/**********************************
**   例题6.5 三种方法输出数组   **
**   自动化1121  李庆典        **
**********************************/

#include <iostream>    //预编译处理命令
#include <iomanip>     //控制流头文件
using namespace std;   //标准名字空间

int main()             //主函数
{
int a[10];
for(int i=0;i<10;i++)
a[i]=2*(i+1);  //为数组赋值

for(i=0;i<10;i++)  //方法1 下标法
cout<<setw(4)<<a[i];
cout<<endl;

for(i=0;i<10;i++)
*(a+1)=2*(i+1);
for(i=0;i<10;i++)  //数组名法求地址后输出
cout<<setw(4)<<*(a+i);
cout<<endl;

int *p =&a[0];
for(p =a,i=0;p<a+10;p++,i++)
*p=2*(i+1);
for(p=a;p<a+10;p++) //指针指向数组
cout<<setw(4)<<*p;
cout<<endl;

return 0;

}


例题6.6

/*************************************************
**   例题6.6    用指针变量实现字符串赋值        **
**   自动化1121    李庆典                       **
*************************************************/

#include<iostream>          //预编译处理命令
#include <cmath>            //标准c语言函数库
using namespace std;        //标准名字 空间

int main()
{
char a[]= "Hello world",b[20],*p,*q;
p=a,q=b;
for (;*p!='\0';p++,q++)
{
*q=*p;
}
*q='\0';
cout<<"string1 is:";
cout<<a<<endl;
cout<<"string2 is:";
cout<<b<<endl;

return 0;
}


例题6.7

/*******************************************
**  例题6.9    利用指针相减来计算字符长度 **
**  自动化1121  李庆典                    **
*******************************************/

#include <iostream>      //预编译处理命令
using namespace std;     //标准名字空间

int main()               //主函数
{
char*p="student";
for (;*p!='\0';p++)
{
cout<<p<<endl;
}

return 0;

}


例题 6.8

/*******************************************
**  例题6.8    用下标来引用字符           **
**  自动化1121  李庆典                    **
*******************************************/

#include <iostream>      //预编译处理命令
using namespace std;     //标准名字空间

int main()
{
char *p="student";
for (int i= 0;p[i]!='\0';i++)
{
cout<<p[i];
}
cout<<endl;

return 0;
}

例题6.9

/*******************************************
**  例题6.9    利用指针相减来计算字符长度 **
**  自动化1121  李庆典                    **
*******************************************/

#include <iostream>      //预编译处理命令
using namespace std;     //标准名字空间

int main()               //主函数
{
char s[50];
char *p;
cout<<"请输入一个字符串:";
cin.get(s,50);
p=s;                 //取数组s的首地址,即s[0]
for (;*p!='\0';)
p++;
cout<<"该字符串的长度为:"<<p-s<<endl;

return 0;

}


例题6.10

/*******************************************
**  例题6.10    多级指针的应用 **
**  自动化1121  李庆典                    **
*******************************************/

#include <iostream>      //预编译处理命令
using namespace std;     //标准名字空间

int main()               //主函数
{
int i=5,*p,**pp;
p=&i;
pp=&p;
cout<<&i<<'\t'<<i<<endl;
cout<<&p<<'\t'<<p<<'\t'<<*p<<endl;
cout<<&p<<'\t'<<pp<<'\t'<<*pp<<'\t'<<**pp<<endl;

return 0;

}

例题6.11

/*******************************************
**  例题6.11    指针数组举例             **
**  自动化1121  李庆典                    **
*******************************************/

#include <iostream>      //预编译处理命令
using namespace std;     //标准名字空间

int main()               //主函数
{
int a[5]={1,2,3,4,5
};
int *p[5]={&a[0],&a[1],&a[2],&a[3],&a[4]
};
for (int i =0;i<5;i++)
{
cout<<*p[i]<<'\t';
}
cout<<endl;

return 0;

}


例题6.12

/*******************************************
**  例题6.12    字符指针数组的举例 **
**  自动化1121  李庆典                    **
*******************************************/

#include <iostream>      //预编译处理命令
using namespace std;     //标准名字空间

int main()               //主函数
{
char a[]="computer system",b[]="hardware",c[]="software";
char *p[4];
p[0]=a;              //定义指针的指向
p[1]=b;
p[2]=c;
p[3]=NULL;
for (int i=0;p[i]!=NULL;i++)
{
cout<<p[i]<<endl;
}

cout<<endl;

return 0;

}

例题6.13

/*******************************************
**  例题6.13    用字符串来初始化字符指针数组**
**  自动化1121  李庆典                    **
*******************************************/

#include <iostream>      //预编译处理命令
using namespace std;     //标准名字空间

int main()               //主函数
{
char *weeekn[]={"Sunday","Monday","Tuesday","Wednesday",
"Thursday","Friday","Saturday"
};
int i;
while (1)
{
cout<<"please input week No : ";
cin>>i;
if(i<0||i>6)
break;
cout<<"week NO."<<i<<"----"<<weeekn[i]<<endl;
}

cout<<endl;

return 0;

}


例题6.14

/*******************************************
**  例题6.14    字符串排序     **
**  自动化1121  李庆典                    **
*******************************************/

#include <iostream>      //预编译处理命令
using namespace std;     //标准名字空间

int main()               //主函数
{
char *p[]={"beijing","guangzhou","jieyang"
};

char *t;
int i,j,n=4;
for(i=0;i<n-1;i++)    //冒泡法排序
for(j=0;j<n-1;j++)
if (strcmp(p[j],p[j+1])>0)
{
t=p[j],p[j]=p[j+1];p[j+1]=t;
}

for(i=0;i<n;i++)
cout<<p[i]<<endl;

cout<<endl;

return 0;

}


例题6.15

/*******************************************
**  例题6.15  用指针数组处理二维数组   **
**  自动化1121  李庆典                    **
*******************************************/

#include <iostream>      //预编译处理命令
using namespace std;     //标准名字空间

int main()               //主函数
{
int a[2][3],*p[2];
int i,j;
p[0]=a[0];
p[1]=a[1];
for(i=0;i<2;i++)
for(j=0;j<3;j++)
a[i][j]=j+1;

for(i=0;i<2;i++)
for(j=0;j<3;j++)
{
cout<<"a["<<i<<"]["<<j<<"] : ";
cout<<*(p[i]+j)<<endl;
}

cout<<endl;

return 0;

}


例题6.17

/*******************************************
**  例题6.17  用指针数组处理多个二维数组  **
**  自动化1121  李庆典                    **
*******************************************/

#include <iostream>      //预编译处理命令
using namespace std;     //标准名字空间

int main()               //主函数
{
char * a[]={"rebacca","Heavean","MIchael chang",NULL};
char ** pp;
pp=a;
while(* pp != NULL)
cout<<* pp++<<endl;

return 0;

}


例题6.18

这里要注意指针数组与数组指针的区别

int * p[3] 为一个指针数组,指一个数组

int (*p)[3] 为一个数组指针,为一个指针,一个数组的指针,输出一个一维数组的指针

/*******************************************
**  例题6.18 用数组指针处理二维数组       **
**  自动化1121  李庆典                    **
*******************************************/

#include <iostream>      //预编译处理命令
#include <iomanip>       //控制符处理文件
using namespace std;     //标准名字空间

int main()               //主函数
{
int a[2][3]={1,2,23,4,5,6};
int (*p)[3];          //一个一维数组指针
int i,j;
p=a;
for (i=0;i<2;i++)
{
for (j=0;j<3;j++)
{
cout<<setw(3)<<(*p)[j];
}
p++;
}
cout<<endl;

return 0;

}


例题6.19

/*******************************************
**  例题6.19 用指针来作为函数参数举例     **
**  自动化1121  李庆典                    **
*******************************************/

#include <iostream>      //预编译处理命令
#include <iomanip>       //控制符处理文件
using namespace std;     //标准名字空间

void dia(int *,int *);

int main()               //主函数
{
int a=5,b=10;
int *pa=&a;         //赋给地址,使*pa指向a的值
int *pb=&b;
dia(pa,pb);         //作为实参,调用另一函数

cout<<endl;

return 0;

}

void dia(int *p1,int*p2)
{
cout<<"第一个数为: "<<*p1<<endl;
cout<<"第二个数为: "<<*p2<<endl;
}


例题6.20

/*******************************************
**  例题6.20 用指针来转换大小写    **
**  自动化1121  李庆典                    **
*******************************************/

#include <iostream>      //预编译处理命令
#include <iomanip>       //控制符处理文件
using namespace std;     //标准名字空间

void dia(char *c);

int main()               //主函数
{
char ch;
cout<<"请输入一个字母:";
cin>>ch;
dia(&ch) ;       //取出ch的地址
cout<<"转换后的小写字母为:";
cout<<ch<<endl;

return 0;
}

void dia(char *pch)    //自定义函数
{
if(*pch>='A'&&*pch <='Z')
*pch +='a'-'A';
}


例题6.21

/*******************************************
**  例题6.201 用指针来实现两个数据的互换    **
**  自动化1121  李庆典                    **
*******************************************/

#include <iostream>      //预编译处理命令
#include <iomanip>       //控制符处理文件
using namespace std;     //标准名字空间

void dia(int *,int *);

int main()               //主函数
{
int a=3,b=4;
cout<<"交换前的数据为: ";
cout<<"a  =  "<<a<<"\tb  =  "<<b<<endl;
dia(&a,&b);
cout<<"交换后的数据位: ";
cout<<"a  =  "<<a<<"\tb  =  "<<b<<endl;
return 0;

}

void dia(int *u,int *v)    //自定义函数
{
int t=*u;
*u=*v;
*v=t;
}


例题6.22

/*******************************************
**  例题6.22     **
**  自动化1121  李庆典                    **
*******************************************/

#include <iostream>      //预编译处理命令
#include <iomanip>       //控制符处理文件
using namespace std;     //标准名字空间

void inpue(int *s,int n);
int min(int *s,int n);

int main()               //主函数
{
int a[10],small;
inpue(a,10);
small=min(a,10);
cout<<"数组中最小的值为 :"<<small<<endl;

return 0;
}

void inpue(int *s,int n)
{
cout<<"请输入"<<n<<"个数值:"<<endl;
for (int i=0;i<n;i++)
cin>>s[i];

}

int min(int *s,int n)
{
int min ,i;
min= *s;
for(i=1;i<n;i++)
if (s[i]<min)
min=s[i];

return min;
}


例题6.23

/*******************************************
**  例题6.23  利用指针变量调用函数     **
**  自动化1121  李庆典                    **
*******************************************/

#include <iostream>      //预编译处理命令
#include <iomanip>       //控制符处理文件
using namespace std;     //标准名字空间

int main()               //主函数
{
int fun(int a,int b);
int (* pf)(int a, int b);
pf=fun;

cout<<"请输入两个数"<<endl;
int m,n;
cin>>m>>n;
int re =(*pf)(m,n);
cout<<"输出结果为"<<re<<endl;

return 0;
}

int fun(int a,int b)
{
return a+b;
}


例题6.24

函数指针,用来指定一个函数的入口地址

形式为 数据类型(*指针变量名)(形参列表);

/*******************************************
**  例题6.24  课本一个比较长的题目(函数指针)     **
**  自动化1121  李庆典                    **
*******************************************/

#include <iostream>      //预编译处理命令
#include <iomanip>       //控制符处理文件
using namespace std;     //标准名字空间

int max(int,int);
int min(int,int);
int add(int,int);
void pro(int, int ,int (*fun)(int,int));//一个函数指针

int main()               //主函数
{
int a,b;
cout<<"enter a and b :"<<endl;
cin>>a>>b;
cout<<"max = "
<<pro(a,b,max)
<<endl;

cout<<"min = "
<<pro(a,b,min)
<<endl;

cout<<"sum = "
<<pro(a,b,add)
<<endl;

return 0;
}

int max(int x,int y)
{
int z;
if (x>Y)  z=x;
else z=y;
return z;
}

int min(int x,int y)
{
int z;
if(x<y) z=x;
else z=y;

return z;
}

int add(int x,int y)
{
int z;
z=x+y;
return z;
}

void pro(int x,int y,int(*fun)(int,int))
{
int re;
re = (*fun)(x,y);
cout<<re<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: