2013级C++第16周项目——初识指针

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759

第一部分 程序分析

  阅读下面的程序,先写出其运行结果,再运行对比。

  读不懂怎么办?支招1:按课堂上老师讲课的方式,将变量对应内存的“框子”画出来,用大脑当CPU,写出变量的变化过程;支招2:单步执行程序,在监视(watch)窗口中观察变量的动态变化,从而掌握程序的运行机理。
(1)

#include <iostream>
using namespace std;
void prt(int*, int*, int*);
int a=10, b=40, c=20;
int main()
{
    prt(&a, &b, &c);
    prt(&a, &b, &c);
    return 0;
}
void prt(int *x, int *y, int *z)
{
    cout<<++*x<<','<<++*y<<','<<*(z++)<<'\n';
}

(2)

#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<<'\t';
    }
    cout<<"\n";
    return 0;
}
int sub(int *s)
{
    static int t=0;
    t=*s + t;
    return t;
}

(3)

#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;
}

(4)

#include <iostream>
using namespace std;
static int a[ ]= {1,3,5,7,11,13};
int main( )
{
    int *p;
    p=a+3;
    cout<<*p<<'\t'<<(*p++)<<endl;
    cout<<*(p-2)<<'\t'<<*(a+4)<<endl;
    return 0;
}

第二部分 上机任务
【项目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)下面的程序,输入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,t作为交换时的中间变量

    cout<<"max="<<a<<" min="<<b<<endl;
    return 0;
}

(2)下面的程序将调用函数进行变量的交换,请设计出交换的函数

#include <iostream>
using namespace std;
int main( )
{
    int a,b;
    cin>>a>>b;
    jiaohuan(&a,&b);
    cout<<"交换后:a="<<a<<" b="<<b<<endl;
    return 0;
}
//下面定义jiaohuan函数;

【项目3-填空学指针】采用指针访问方式从键盘给数组a[N]输入数据,然后对元素值重新按逆序存放并输出。请补充完整下面的程序。

#include <iostream>
using namespace std;
const int N=8;
int main()
{
    int a[N],*p,*q;
    for(p=a; p<a+N; p++)
        ___(1)___;
    p=a;
    q=a+N-1;
    while(p<q)
    {
        int r=*p;
        *p=*q;
        *q=r;
        ___(2)___;
        ___(3)___;
    }
    for(p=a; p<a+N; p++)
        cout<<*p<<' ';
    cout<<endl;
}

【项目4-有相同数字?】编写程序,要判断两个有序数组中是否存在相同的数字
参考代码:

#include<iostream>
using namespace std;
int main()
{
    int a[]={1,4,7,8};
    int b[]={2,5,6,9,10};
    int n1=sizeof(a)/sizeof(a[0]);
    int n2=sizeof(b)/sizeof(b[0]);
    bool flag=existthesame(a,n1,b,n2);
    if(flag==true)
        cout<<"两个有序数组中存在相同的数字!\n";
    else
         cout<<"两个有序数组中不存在相同的数字!\n";
    return 0;
}
bool existthesame(int *a,int n1, int *b,int n2)
{
 
}   

【项目5-奇数因子】编写函数 int fun(int x, int *pp)。其功能是,求出x的所有奇数因子,并按照从小到大的顺序放在pp指向的内存中,函数返回值为这些整数的个数。若x的值为30,数组中的数为1,3,5,15,函数返回4。
  下面是该程序main()函数的部分代码作为参考。

int main()
{
	int a[50],x,n;
    ____________;
    n=fun(x,a);
    cout<<x<<”的奇因子共有”<<n<<”个,分别是:”
    for(int i=0;i<n;i++)
      _________________;
    cout<<endl;
  ______________;
      return 0;
}
//下面定义fun函数

==================== 迂者 贺利坚 CSDN博客专栏=================

|==  IT学子成长指导专栏  专栏文章分类目录(不定期更新)    ==|

|== C++ 课堂在线专栏   贺利坚课程教学链接(分课程年级)   ==|

======== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =======

时间: 2024-10-30 15:42:06

2013级C++第16周项目——初识指针的相关文章

2013级C++第17周项目——字符串、指针应用

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目1-体会函数参数传递] 1.下面三段程序都试图通过定义函数,实现实际参数在必要时的交换,哪些能够实现,哪些不能实现?通过运行程序和单步执行,让自己对这一过程更加清楚,然后请在博文中给出明确的回答,并用你自己的话展开描述.) (1) #include <iostream> using namespace std; void jiaohuan(int x, int y

2013级C++第12周项目——函数应用

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目1-当年第几天] 定义一个函数,其参数为年.月.日的值,返回这一天为该年的第几天.要求在main函数中输入年月日,然后调用这个函数求值,并在main函数中输出结果. [项目2-太乐了]先听故事,再编程序. 故事是这样的:话说sin和cos是一对夫妇.一天,sin去听相声了,cos在家.过了一会,有人敲门,cos开门一看,是一个不认识的多项式函数.cos问:你是谁啊?

2013级C++第16周(春)项目——二进制文件及字符流

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 本周程序阅读及程序调试中需要的文件,请到http://pan.baidu.com/s/1i3LxmDZ下载.期末临近,为适应OJ平台及熟悉内容,请自抽时间完成OJ平台的有关练习. 第一部分 阅读程序1.仔细研读例13.16.例13.17和例13.18(见下载链接),体会二进制文件和字符串流操作的一般方法.2.阅读下面的程序,指出其功能,并对比例

2013级C++第15周项目——二维数组

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目1-折腾二维数组]创建一个长度为5行4列的二维整型数组,通过初始化,为数组中的前两列的10个元素赋初值,然后通过键盘输入,使后两列的10个元素获得值,将所有元素值乘以3后保存在数组中.输出数组时,按行序优先输出,再按列序优先输出(输出的第一行是数组中的第一列--,其实输出的就是"转置"),再将数组"倒"着输出(即最后一行最后一列的最先输

2013级C++第14周项目——一维数组、字符数组

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目1 - 数组大折腾] 将所有元素值加倍后保存在数组中,最后由前往后输出数组中所有元素的值,再由后往前输出数组中所有元素的值,再输出数组中的所有大于100的数,以及下标为3的倍数的元素值. (1)创建一个长度为20的整型数组,通过初始化,为数组中的前10个元素赋初值,然后通过键盘输入后10个元素的值,从前往后(从第0个到第19个)输出数组中元素的值,每5个元素换一行.

2013级C++第13周项目——递归函数

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759 第一部分 说三道四:计134,3班.4班编程大PK 按照课堂指示的座位,各组坐对位置: 按照指定的组号,创建用户:UserID形如:j1343XX或j1344XX,其中XX是组号,例(j134302和j134414),昵称写本组两名同学的姓名. 参考解答见:http://blog.csdn.net/sxhelijian/article/details/16800275,竞

2013级C++第11周项目——函数的定义与调用

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目1-调用函数输出星号图] 这一组的练习意在通过调用函数输出星号图,体会与理解函数的工作过程,并为其后编制自定义函数实现特定功能. (1)补充完下面的程序,使程序输出星号图: #include <iostream> using namespace std; void printstars(int m) //定义能输出一行m个星号的函数 { for (int j=1;

2013-C++第16周项目参考解答链接集

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目2-指来指去]设计一个程序,利用指针完成下面的工作(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=&

2013级C++第2周(春)项目——结构体应用大体验

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759,由课程主页,可以看到完整教学方案,所有参考解答 第一部分 结构体应用 [项目1-学生成绩统计]   每位同学的信息学号.姓名.C++.高数.英语成绩,定义一个学生成绩的结构体数组,其中的数据成员包括学号(char num[12]).姓名(name).三门课的成绩(grade).总分(score).均分(average)). (1)从键盘上输入N名学生的信息(N定义为常变量