分析代码:
分析下列程序的运行结果,指出指针加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====================
";
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====================
";
cout<<"(*p)++ = "<<(*p)++<<endl;
cout<<"++(*p) = "<<++(*p)<<endl;
cout<<"*p++ = "<<*p++<<endl;
cout<<"(*p+=1)= "<<(*p+=1)<<endl;
}
运行结果: