第六章作业

作业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;
}


 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
xjtu计组第六章作业主要涉及计算机组成原理的相关概念和知识点。这一章节主要包括存储器的层次结构、存储器的组织和管理、存储器的屏蔽、存储器的操作和传输等内容。 首先,存储器的层次结构是计算机中非常重要的一个组成部分。它包括寄存器、高速缓存、主存和辅助存储器等。每一层的存储器容量和速度不同,寄存器最小而速度最快,辅助存储器容量最大但速度最慢。 其次,存储器的组织和管理也是我们需要了解的内容。存储器的组织有两种方式,分别是按地址方式和按内容方式组织。在存储器的管理中,我们需要学习如何管理地址空间、如何进行地址转换和管理内存映射等。 另外,存储器的屏蔽是实现存储器的一种方式。比如,在32位计算机中,通过屏蔽将地址划分为子地址、块地址和字地址,以实现对存储器的访问。 最后,我们还需要了解存储器的操作和传输。存储器的操作包括读取数据和写入数据两个过程,而存储器的传输是指数据在存储器之间的传输。我们需要学习存储器的读写操作的过程、存储器传输的方式以及优化存储器传输的方法。 总的来说,xjtu计组第六章作业涵盖的内容较为广泛,包括存储器的层次结构、组织和管理、屏蔽以及操作和传输等方面。通过完成这份作业,我们可以更好地理解和掌握计算机组成原理这门课程的核心概念和知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值