C02-程序设计基础提高班(C++)第7周上机任务-指针

第7周:阅读教材第6章(p164-200),主要内容是指针,完成第7周上机任务;

(回到C02-程序设计基础提高班(C++)学习安排)

实践内容:

1. (数组的排序) 按模板中的要求,用指向数组的指针变量作为形式参数编写函数,完成冒泡排序。重点体会:(1)冒泡排序算法;(2)用指向数组的指针变量作为形式参数,用数组名(即数组的地址)作为实际参数,函数中对于形参的改变实质上也就是对实参对应内存单元的改变;(3)形式参数中不指定数组大小,实际数组的大小也一并作为参数传递。

#include <iostream>
using namespace std;
void bubble_sort(int *p, int num);  //不要对自定义函数的声明有任何改动
void output_array(int*, int);
int main( )   //不要对main函数有任何改动
{	int a[20]={86,46,22,18,77,45,32,80,26,88,57,67,20,18,28,17,54,49,11,16};
	int b[15]={27,61,49,88,4,20,28,31,42,62,64,14,88,27,73};
	bubble_sort(a,20);   //用冒泡法按降序排序a中元素
	output_array(a,20);   //输出排序后的数组
	bubble_sort(b,15);   //用冒泡法按降序排序b中元素
	output_array(b,15);   //输出排序后的数组
	return 0;
}
//下面定义自定义函数

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

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

3. 编写程序,要判断两个有序数组中是否存在相同的数字

#include<iostream>
using namespace std;
bool commmonNum(int *a,int n1,int *b,int n2)
{
//要完成的代码
}
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=commmonNum(a,n1,b,n2);
    if(flag==true)
        cout<<"两个有序数组中存在相同的数字!\n";
    else
         cout<<"两个有序数组中不存在相同的数字!\n";
    return 0;
}

4. 给定以下三个函数原型:

void sortl(int*, int*, int*);
void sort2(int&,int&,int&);
void sort3(int,int,int);   

它们的功能都是把三个整数按升序排列。编写程序实现这三个函数,并且写main()函数调用它们,验证这三个函数的正确性。
思考并验证:(1)三个函数有何不同,应该如何调用?(2)以函数sort1(int*, int*, int*)为例说明指针传递参数的过程。

5. 实现函数fun(char* str1, char* str2, int m),将字符串str1中从第m个字符开始的全部字符复制到另一个字符串str2中,当m值大于str1的长度时,输出空字符串。

#include <iostream>
using namespace std;
void fun(char*, char*, int);
int main()
{
    char str1[100]="I am a student",str2[100];
    int m;
    cin>>m;
    fun(str1,str2,m);
    cout<<str2<<endl;
    return 0;
}
//fun函数的定义

6. 用指针编写函数fun(char* str1,char* str2,int m, int n),调用后,str2中获得str1中从m位置开始的n个符号构成的子串。编写函数fun,并编制main()函数调用,展示其功能。
7. 从键盘输入若干行文字(每行不起过80个字符),统计其中出现的单词数目。
提示:这个任务可以做成若干个版本,逐渐增强功能
(1)一行英文句子中的单词数目中间的空格决定,如I am a boy.这是4个单词。本题中若干行句子形成一篇文章,可以统计一篇文章的词数。word中有此功能,好强!
(2)cin函数输入字符串时,一旦遇到空格就会结束读取,不能用于读一行。在此,可以cin对象的getline方法完成(详见课本p434)。
格式:cin.getline(字符数组(或字符指针),字符个数)
例如:

char ch[81];  //除'\n'外,还可以存放80个字符
cin.getline(ch,81);    //读80个字符或遇'\n'结束

(3)行数可以先由键盘输入或者设定一个特殊的符号作为结束,如果多行文字(对应一篇文章)有困难,可以先做统计一行功能。
(4)如果结合文件,读入的数据来自文件,这个功能将更强,用于统计文件中的单词数目。
(5)上面默认输入的文字中没有多余的空格(即不会出现两个连续空格,句首和句末没有空格,每个标点符号左右两边出现仅只出现一个空格)。如果程序功能更强大些,允许有多余空格的情况,需要在读入后、统计前,清除多余空格。

时间: 2025-01-01 13:53:41

C02-程序设计基础提高班(C++)第7周上机任务-指针的相关文章

C02-程序设计基础提高班(C++)第10周上机任务-类和对象之二

第10周:阅读教材第9章(p263-313),主要内容是构造和析构函数.对象数组.对象指针.共用数据的保护等,完成第10周上机任务: (回到C02-程序设计基础提高班(C++)学习安排) 实践任务: [任务1]设计三角形类,通过增加构造函数,使对象在定义时能够进行初始化 #include<iostream> using namespace std; class Triangle {public: float perimeter(void);//计算三角形的周长 float area(void)

C02-程序设计基础提高班(C++)第11周上机任务-运算符重载

第11周:阅读教材第10章(p314-346),掌握用运算符重载解决问题,完成第11周上机任务: (回到C02-程序设计基础提高班(C++)学习安排) [任务1]实现复数类中的运算符重载定义一个复数类重载运算符+.-.*./,使之能用于复数的加减乘除.(1)方案一:请用类的成员函数完成运算符的重载: class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} Comple

C02-程序设计基础提高班(C++)第8周上机任务-结构体

第8周:阅读教材第7章(p201-230),主要内容是结构体与自定义类型,同时也希望将同学们将第3-7章的内容整理一下,完成第8周上机任务,本周任务将增加一些对用结构化程序设计技术解决问题的综合性题目: (回到C02-程序设计基础提高班(C++)学习安排) 实践任务(需要的数据文件score.txt在本文后,自行复制后,用记事本保存为score.txt): [任务1]结构体数据组 score.txt中是一些同学的学号.姓名.C++.高数.英语成绩,定义一个学生成绩的结构体数组,其中的成员包括学号

C02-程序设计基础提高班(C++)第6周上机任务-数组

第6周:阅读教材第5章(p134-163),主要内容是数组,完成第6周上机任务: (回到C02-程序设计基础提高班(C++)学习安排) 任务内容: 1. 创建一个长度为20的数组,其中存放斐波那契数列的前20项. 2. 筛法求素数.筛法求素数是一种快速的求素数的方法,其思路是以空间换时间,利用额外的数组作为中介,能够显著降低运行的时间.现在要求列出10000以内的素数. (筛法求素数的算法请上网查找) 3. 在数组score中将要存储某小组C++程序设计的成绩,请设计完成下面功能函数,并将它们组

C02-程序设计基础提高班(C++)第14周上机任务-文件操作

第14周:阅读教材第13章(p417-458),主要内容是输入输出,重点是文件的操作,完成第14周上机任务: (回到C02-程序设计基础提高班(C++)学习安排) [任务1]涨工资从文件salary.txt中读入500名工人的工资,全部增加100元后进行排序,将排序后的结果在屏幕上输出,并保存到文件ordered_salary.txt中.[ 参考:涨工资了 - http://blog.csdn.net/sxhelijian/article/details/7632245 ] [任务2]学生成绩排

C02-程序设计基础提高班(C++)第5周上机任务

第5周:阅读教材第4章(p88-133),主要内容是函数 (回到C02-程序设计基础提高班(C++)学习安排) 1. 求满足条件n=a!+b!+c!的所有三位数n并输出,要求用自定义函数实现求阶乘. 参考程序: #include <iostream> using namespace std; long fac(int n); //函数的声明 //下面定义main()函数完成任务,其中求阶乘的工作调用fac()函数完成 //下面定义fac(),实现求阶乘的功能 2. 编制一个返回值为bool型的

C02-程序设计基础提高班(C++)第9周上机任务-类和对象

第9周:阅读教材第8章(p231-262),主要内容是类和对象,学会定义类和对象解决问题,完成第9周上机任务: (回到C02-程序设计基础提高班(C++)学习安排) 实践任务: [任务1]阅读.运行下面的程序后,按要求编制新的成员函数,并增加类的功能 #include <iostream> using namespace std; class Time { public: void set_time( ); void show_time( ); private: bool is_time(in

C02-程序设计基础提高班(C++)第13周上机任务-多态与虚函数

第13周:阅读教材第12章(p395-416),主要内容是多态性,完成第13周上机任务 (回到C02-程序设计基础提高班(C++)学习安排) [任务1]下面给出了基类Animal和main()函数.(1)根据main()函数给出的注释提示,设计出相关的各个类.(2)显然,Animal设计为抽象类更合适,Animal不需要能够实例化,是专门作基类使用的.改造程序,使Animal设计为抽象类,这时main()函数中p = new Animal();将出错,将此行删除.(3)每一个Animal的派生类

C02-程序设计基础提高班(C++)第4周上机任务

第4周:下载并阅读 C++程序设计入门同步实践宝典(v0.5)中的1.2节及第3章的内容(下载积分不足的同学可以通过校园网到我的BB平台下载,账号2009helijian),在程序调试技术.解题方法方面加深理解 (回到C02-程序设计基础提高班(C++)学习安排) 1.分别用3种循环(while~.for(;;)~.do~while)计算下式 要求用单重循环完成,以强化关注效率的意识. 2.在下面的加法算式中,不同的符号代表不同的数字,相同的符号代表相同的数字.请设计程序求出"都.要.学.C&q