2014秋C++ 第15周项目 指针基础

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。 

【项目1-打入“内部”寻“内幕”】
下面是一段使用了指针的程序。请利用“单步”执行的方式运行程序,深刻理解“指针变量存储的是地址值”、“通过指针变量间接访问”等概念。将在执行过程中留下深刻映像的界面截屏下来(类似图示),并加以点评。

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;
}
=================== 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==|
|== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
|== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|
===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====







时间: 2024-09-11 16:58:49

2014秋C++ 第15周项目 指针基础的相关文章

2014秋C++ 第15周项目3参考解答 在OJ上玩指针

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目3-在OJ上玩指针](1)指针的基本操作(1)下面的程序,输入10 100和100 10,均可以输出max=100 min=10,请补充完整程序 #include <iostream> using namespace std; int main( ) { int *p1,*

2014秋C++第16周 项目 指针和数组、函数

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目1-数组的排序]按给定部分程序的要求,用指向数组的指针变量作为形式参数编写函数,完成排序.重点体会:(1)排序算法,可以是冒泡,也可以是选择:(2)用指向数组的指针变量作为形式参数,用数组名(即数组的地址)作为实际参数,函数中对于形参的改变实质上也就是对实参对应内存单元的改变:(3)形

2014秋C++ 第15周项目2程序阅读(加注释)

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目2-阅读程序] 阅读下面的程序,先写出其运行结果,再运行对比. 支招1:按课堂上老师讲课的方式,将变量对应内存的"框子"画出来,用大脑当CPU,写出变量的变化过程: 支招2:单步执行程序,在监视(watch)窗口中观察变量的动态变化,从而掌握程序的运行机理. (1)

2014秋C++ 第8周项目 分支程序设计

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看. 阅读并验证 阅读下面的两段程序,用"人脑"运行写出输出结果,再在计算机或手机上运行程序,对比自己写出的结果,进行反思.1.#include <iostream>using namespace std;int main(){    int a=1,b=2,c=3;

2014秋C++第16周 项目2参考 用指针玩字符串

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目2-用指针玩字符串] 指针是神奇的,指向整型的指针int *p1,可以操作整型数组int a[]:指向字符型的指针char *p2,可以操作字符数组(字符串)char str[]:更灵活的是,在函数的传递中,指针.数组名在一定程度上可以互换.请编制函数,对字符串的进行各种操作. 序 功

2014秋C++第16周 项目3参考 用函数指针调用函数

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目3-用函数指针调用函数] 将下面的程序补充完整(包括定义函数),使其能够完成图示的功能.请使用已有程序的风格. void eat(); void sleep(); void hitdoudou(); void run(void (*f)()); int main() { int iCh

2014秋C++第16周 项目1参考 数组的排序

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目1-数组的排序]按给定部分程序的要求,用指向数组的指针变量作为形式参数编写函数,完成排序.重点体会:(1)排序算法,可以是冒泡,也可以是选择:(2)用指向数组的指针变量作为形式参数,用数组名(即数组的地址)作为实际参数,函数中对于形参的改变实质上也就是对实参对应内存单元的改变:(3)形

2014秋C++第19周 项目2参考 猴子选大王

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目2-猴子选大王]一群猴子,编号是1,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王.输入m和n,输出为大王的猴子是几号.提示1:(1)链表解法:可以用一个循环的单链表

2014秋C++第19周 项目 单链表/枚举

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看. [项目1 - 动态链表体验] 下面是一个建立动态链表的程序.阅读程序,在草稿纸上画出链表建立的过程,借此学会如何建立链表.然后按要求改造程序. #include <iostream> using namespace std; struct Node { int data; //结点