• 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)上面默认输入的文字中没有多余的空格(即不会出现两个连续空格,句首和句末没有空格,每个标点符号左右两边出现仅只出现一个空格)。如果程序功能更强大些,允许有多余空格的情况,需要在读入后、统计前,清除多余空格。

  • 相关阅读:
    关于正餐智能POS6.0.1.1改版后,点击反结账进入点菜界面后无法进行加菜的FAQ
    关于正餐智能POS6.0.1.1改版后,订单模块无法进行部分退款的FAQ
    退款证书相关
    简易付主副机和打印机配置
    秒点直连操作文档
    智能POS打印配置&常见问题FAQ 12-14 后期持续更新
    ERP主副机和打印机配置FAQ
    ASP.NET没有魔法——ASP.NET MVC Controller的实例化与执行
    ASP.NET没有魔法——ASP.NET MVC 路由的匹配与处理
    ASP.NET没有魔法——ASP.NET MVC路由
  • 原文地址:https://www.cnblogs.com/hehe520/p/6142692.html
Copyright © 2020-2023  润新知