第16讲 课后自主学习及实践方案 代码
。
【项目1-打入“内部”寻“内幕”】
下面是一段使用了指针的程序。请利用“单步”执行的方式运行程序,深刻理解“指针变量存储的是地址值”、“通过指针变量间接访问”等概念。将在执行过程中留下深刻映像的界面截屏下来(类似图示),并加以点评。
#include<iostream>
using namespace std;
int main()
{
int a=2, b=3, c[5]= {1,2,3,4,5};
int *p1, *p2, *p3;
p1=&a;
p2=&b;
p3=c;
p3++;
(*p3)+=10;
cout<<a<<'\t'<<b<<'\t'<<c[1]<<endl;
cout<<*p1<<'\t'<<*p2<<'\t'<<*p3<<endl;
return 0;
}
通过这个项目,再次强调学会单步调试。
【项目2-阅读程序】
阅读下面的程序,先写出其运行结果,再运行对比。
支招1:按课堂上老师讲课的方式,将变量对应内存的“框子”画出来,用大脑当CPU,写出变量的变化过程;支招2:单步执行程序,在监视(watch)窗口中观察变量的动态变化,从而掌握程序的运行机理。
(1)
#include <iostream>
using namespace std;
int sub(int*);
int main()
{
int i, k;
for (i=0; i<4; i++)
{
k=sub(&i);
cout<<"sum="<<k<<'\n';
}
cout<<"\n";
return 0;
}
int sub(int *s)
{
static int t=0;
t=*s + t;
return t;
}
(2)
#include <iostream>
using namespace std;
int *p;
void pp(int a, int *b);
int main()
{
int a=1, b=2, c=3;
p=&b;
pp(a+c, &b);
cout<<"(2)"<<a<<','<<b<<','<<*p<<endl;
return 0;
}
void pp(int a, int *b)
{
int c=4;
*p=*b+c;
a=*p-c;
cout<<"(1)"<<a<<','<<*b<<','<<*p<<endl;
}
【项目3-在OJ上玩指针】
(1)指针的基本操作(1)
下面的程序,输入10 100和100 10,均可以输出max=100 min=10,请补充完整程序
#include <iostream>
using namespace std;
int main( )
{
int *p1,*p2,a,b,t;
cin>>a>>b;
p1=&a;
p2=&b;
//下面加入的代码,只许出现p1,p2和t,不许出现a和b
cout<<"Max="<<a<<" Min="<<b<<endl;
return 0;
}
(2)指针的基本操作(2)
下面的程序,输入10 100和100 10,均可以输出max=100 min=10,请补充完整程序
#include <iostream>
using namespace std;
int main( )
{
int *p1,*p2,t;
//本程序以下不准再加入新的变量,下面用new操作符分配空间,并用p1、p2分别保存其地址
//下面输入两个整数。若无上面分配的空间,这样操作指赂的空间,极其危险
cin>>*p1>>*p2;
//下面加入的代码,只许出现p1,p2和t,不许出现a和b
cout<<"Max="<<*p1<<" Min="<<*p2<<endl; //p1和p2指向的分别是大值和小值,无论输入大小
//下面写释放p1和p2所指向空间的语句
return 0;
}
(3)指针当形参
下面的程序将调用函数进行变量的交换,请设计出交换的函数
#include <iostream>
using namespace std;
void jiaohuan(int *p1, int *p2);
int main( )
{
int a,b;
cin>>a>>b;
jiaohuan(&a,&b);
cout<<a<<" "<<b<<endl;
return 0;
}
//下面定义jiaohuan;
(4)两数和与差(用参数带回结果)
下面的程序,输入两个整数,调用函数ast后,输出了两数之和及两数之差。阅读程序,补全程序中空白处。
#include <iostream>
using namespace std;
void ast(int x,int y,int *cp,int *dp)
{
//补全函数的定义
___(1)____=x+y;
___(2)____=x-y;
}
int main()
{
int a,b,c,d;
cin>>a>>b;
//下面调用函数ast
______(3)______
cout<<c<<" "<<d<<endl;
return 0;
}