第七章指针部分练习

分析代码:
分析下列程序的运行结果,指出指针加1与地址值加1的不同。

#include <iostream.h>

int main()
{
	 int i1,i2,*pi1=&i1,*pi2;
	 double d1,d2,*pd1=&d1,*pd2;

	 pi2=pi1+1;
	 pd2=pd1+1;

	 cout<<pi2-pi1<<','<<pd2-pd1<<endl;
	 cout<<(int)pi2-(int)pi1<<',';
	 cout<<(int)pd2-(int)pd1<<endl;
	 
	 return 0;
}

分析:
该程序中,有指针定义和赋初值及赋值。程序中第一个输出语句是输出两个指针相减的值,由于是相邻指针,相减值为1。第二个输出语句是输出两个地址相减的值,一个是int型指针,另一个是double型指针,它们之差分别为一个int型数和一个double型数在内存中占的字节数。
运行结果:
在这里插入图片描述—作业—
1、求出100—200之间的所有素数,要求每行输出5个素数。

算法分析:在main函数中完成:①数组的输入;②将数组名作为实际参数进行算法的调用;③最后结果的输出。

#include <iostream>
#include <cmath>

using namespace std;
void add(int arr[], int size);
int prime(int arr[], int size);

int main()
{
	int array[100];
	add(array,100);
	prime(array,100);

	return 0;
}

//数组压值
void add(int arr[], int size)
{
	int i=0;
	for(i;i<size;i++)
	{
		arr[i] = 100+i;
	}
}

//判断数组包含的素数,并输出
int prime(int arr[], int size)
{
	int i=0,count=0;
	for(i;i<size;i++)
	{
		for(int j=2;j<sqrt(arr[i])+1;j++)
		{
			if(0 == arr[i]%j)
				break;
		}
		if(j>=sqrt(arr[i])+1)
		{
			cout<<arr[i]<<" ";
			count++;
			if(0==count%5)
				cout<<endl;
		}
	}
	cout<<endl;
	return 0;
}

运行结果:
在这里插入图片描述

2、有一个3×4的矩阵,求其中的最大元素和数组的下标。
算法分析:在main函数中完成:①数组的输入;②将数组名作为实际参数,调用求最大值的函数;③将最大值和数组的下标作为函数值返回后输出。

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;
void addValue(int arr[ ][4], int size);
void outValue(int arr[ ][4] , int size);
void printArr(int arr[ ][4], int size);

int main()
{
	int array[3][4] = {0};

	addValue(array,3);
	printArr(array,3);
	outValue(array,3);


	return 0;
}

//数组压值
void addValue(int arr[ ][4], int size)
{
	int i,j;
	srand((int)time(0));  // 产生随机种子  把0换成NULL也行
	for(i=0;i<size;i++)
	{
		for(j=0;j<4;j++)
		{
			arr[i][j] = rand()%100;
		}
	}
}

//打印输出随机数组
void printArr(int arr[ ][4], int size)
{
	int i,j,count=0;
	for(i=0;i<size;i++)
	{
		for(j=0;j<4;j++)
		{
			cout<<arr[i][j]<<" ";
			count++;
			if(0 == count%4)
				cout<<endl;
		}
	}
}

//输出最大值跟下标
void outValue(int arr[ ][4] , int size)
{
	int i,j,max,index=0,jndex=0;
	max = arr[0][0];
	for(i=0;i<size;i++)
		for(j=0;j<4;j++)
			if(arr[i][j]>max)
			{
				max = arr[i][j];
				index = i;
				jndex = j;
			}

	cout<<"数组中最大值为max:"<<max<<"  下标为: ("<<index+1<<" , "<<jndex+1<<")"<<endl;
}

运行结果:

在这里插入图片描述

3、若有定义语句“Int a=2,b=4; Int *p1,*p2;P1=&a;p2=&b;”则以下的结果:

*p1=
*p2=
a=
b=

答案:

*p1 = 2
*p2 = 4
a = 2
b = 4
测试代码:

#include <iostream>

void testOne(int x, int y);
using namespace std;

int main()
{
	int a=2,b=4; 
	testOne(a,b);
}

//测试一
void testOne(int x, int y)
{
	int *p1,*p2;
	p1 = &x;
	p2 = &y;
	
	cout<<"==============testOne====================\n";
	cout<<"*p1 = "<<*p1<<endl;
	cout<<"*p2 = "<<*p2<<endl;
	cout<<"a = "<<x<<endl;
	cout<<"b = "<<y<<endl;
	//cout<<"p1 = "<<p1<<endl;
}

运行结果:
在这里插入图片描述

4、若有定义语句“int year=2019,*P=&year;”,则以下的结果:

“(*P)++”=
“ ++(*P) ” =
“*p++”=
“*P+=1”=

答案:

测试代码:

#include <iostream>

void testTwo(int z);
using namespace std;

int main()
{
	int year=2019; 
	testTwo(year);
}
//测试二
void testTwo(int z)
{
	int *p = &z;
	cout<<"==============testTwo====================\n";
	cout<<"(*p)++ = "<<(*p)++<<endl;
	cout<<"++(*p) = "<<++(*p)<<endl;
	cout<<"*p++ = "<<*p++<<endl;
	cout<<"(*p+=1)=  "<<(*p+=1)<<endl;
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值