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

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

【项目1 - 数组大折腾】
  将所有元素值加倍后保存在数组中,最后由前往后输出数组中所有元素的值,再由后往前输出数组中所有元素的值,再输出数组中的所有大于100的数,以及下标为3的倍数的元素值。
  (1)创建一个长度为20的整型数组,通过初始化,为数组中的前10个元素赋初值,然后通过键盘输入后10个元素的值,从前往后(从第0个到第19个)输出数组中元素的值,每5个元素换一行。

int main( )
{
    int a[20]={...};  //初始化前10个元素
    //键盘输入后10个元素的值

    //由前往后输出数组中所有元素的值
    cout<<"由前往后,数组中的值是:"<<endl;

    return 0;
}

  (2)创建一个长度为10的整型数组并初始化,由后往前(由第9个元素向第0个元素方向)输出数组中所有元素的值,改变数组元素的值,令所有的数据加倍,输出改变后的值。
  (3)创建一个长度为16的整型数组a并初始化,先输出数组中元素值为3的倍数的数,再输出所有下标为3的倍数的元素值。所有的输出形如图示。
        

【项目2- 成绩处理】
  在数组score中将要存储某小组C++程序设计的成绩,请设计实现下面的各功能函数,并在main函数中调用,组合成一个完整的应用:
  (1)输入小组人数及成绩,要保证成绩在0-100之间;
  (2)输出该小组的最高成绩、最低成绩、平均成绩;
  (3)输出考得最高成绩和最低成绩的同学的人数;
  (4)输出考得最高成绩和最低成绩的同学的学号(设数组下标即学号,可能有相同的成绩)。
  (5)(选做)求出所有同学成绩的标准偏差,标准偏差公式:
     
  其中为样本(即某同学成绩),为均值(前面已经求出),为样本数目;
  提示1:可以采用“渐进式”策略,实现一个功能后调试通过,再实现下一个功能。
  提示2:界面参考

    
  提示3:为避免调试过程中反复输入数据,可以考虑建立一个文件,利用输入重定向完成输入。
  参考程序段:

int main(void)
{
    int score[50];    //保存成绩的数组,不会超过50名
    int num,i;        //小组人数
    cout<<"小组共有多少名同学?";
    cin>>num;
    cout<<"请输入学生成绩:"<<endl;
    //输入num名同学的成绩

    //求出并输出最高成绩、最低成绩和平均成绩

    //求出并输出考得最高成绩和最低成绩人数以及学号

    //求出并输出标准偏差(选做)

    return 0;
}

【项目3 - 成绩处理函数版】

  项目2的另一种实现。输入、求最大/小值等所有功能都通过自定义函数完成。这种设计貌似比项目2麻烦,但其结构有更多的优点,尤其是当程序的规模更大时。通过这个项目,学会将数组名用作函数的参数。
下面建议的自定义函数的声明和main()函数,你需要定义这些函数,并且加上必要的#include<...>文件。参考程序段如下:

void input_score(int s[], int n); //将小组中n名同学的成绩输入数组s
int get_max_score(int s[], int n);  //返回数组s中n名同学的最高成绩值
int get_min_score(int s[], int n);  //返回数组s中n名同学的最低成绩值
double get_avg_score(int s[], int n);  //返回数组s中n名同学的平均成绩值
double get_stdev_score(int s[], int n); //返回数组s中n名同学成绩值的标准偏差
int count(int x, int s[], int n);  //返回在数组s中n名同学中有多少人得x分(实参给出最高/低时,可以求最高/低成绩的人数)
void output_index(int x, int s[], int n); //在函数中输出数组s中n名同学中得x分的学号(下标)

int main(void)
{
  int score[50]; //将score设为局部变量,通过数组名作函数参数,传递数组首地址,在函数中操作数组
  int num;       //小组人数也设为局部变量,将作为函数的实际参数
  int max_score,min_score;
  cout<<"小组共有多少名同学?";
  cin>>num;
  cout<<endl<<"请输入学生成绩:"<<endl;
  input_score(score, num);  //要求成绩在0-100之间
  max_score=get_max_score(score, num);
  cout<<endl<<"最高成绩为:"<<max_score<<",共有 "<<count(max_score, score, num )<<" 人。";
  min_score=get_min_score(score, num);
  cout<<endl<<"最低成绩为:"<<min_score<<",共有 "<<count(min_score,score, num )<<" 人。";
  cout<<endl<<"平均成绩为:"<<get_avg_score(score, num);
  cout<<endl<<"标准偏差为:"<<get_stdev_score(score, num);
  cout<<endl<<"获最高成绩的学生(学号)有:";
  output_index(max_score,score, num);
  cout<<endl<<"获最低成绩的学生(学号)有:";
  output_index(min_score,score, num);
  cout<<endl;
  return 0;
}

【项目4 - 数组的排序】

  编函数,完成冒泡排序。要求不能改变下面的main函数。
  重点体会:(1)排序算法;(2)数组名作形式参数,将能改变作为实际参数的数组的值,实际参数传递给形式参数的是数组的地址值,也是传值;(3)形式参数中不指定数组大小,实际数组的大小也一并作为参数传递。
  参考程序段如下:

#include <iostream>
using namespace std;
//两个函数bubble_sort和output_array的声明
int main( )
{
    int a[20]={86,76,62,58,77,85,92,80,96,88,77,67,80,68,88,87,64,59,61,76};
    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;
}
//请在下面定义bubble_sort和output_array函数
 

【项目4拓展1 - 字符数组排序】

  将上面的程序段中

int a[20]={...}
int b[150=...

  改为

char a[20] = {'s','o','r','t','b','u','b','b','l','e','s','e','l','e','c','t','o','k','o','k'};
char b[15] = {};//请自己补足

  然后修改程序,对字符数组进行排序。

【项目4拓展2 - 选择排序】将项目4中的排序算法换作为选择排序,完成相同的任务。
 
【项目5-字符串统计】阅读下面的程序,完成类似的功能

#include<iostream>
using namespace std;
int main()
{
    char str[50];
    int i=0,n=0;
    cout<<"输入字符串:";
    gets(str);
    while(str[i]!='\0')
    {
        if(str[i]>='0'&&str[i]<='9') n++;
        i++;
    }
    cout<<"其中的数字个数是: "<<n<<endl;
    return 0;
}

  请分别编制程序,完成下面的处理(选2个):
  (1)统计字母'A'出现的次数;
  (2)统计字符串中(大/小写)字母个数;
  (3)统计每一个数字字符出现的次数;
  (4)统计每一个字母出现的个数

【项目6-字符串操作】阅读下面的程序,完成类似的功能

#include<iostream>
using namespace std;
int main()
{
    char str1[50]="I am a happy boy\'s daddy.",str2[50];
    int i=0,j=0;
    while(str1[i]!='\0')
    {
        if(str1[i]!=' ')
        {
            str2[j]=str1[i];
            j++;
        }
        i++;
    }
    str2[j]='\0';//切记!!
    cout<<"整理后的字符串"<<str2<<endl;
    return 0;
}

  请分别编制程序,完成下面的处理(选2个):
  (1)完整复制字符串;
  (2)将str1和str2接起来存放到str3中;
  (3)去除str1中的空格,仍保存在str1中;
  (4)将str1和str2连接起来,仍存放在str1中;
  (5)在字符串前加5个符号"note:"

【项目7-体验文件操作】
  (1-预备)阅读并理解附后的《文件操作初体验》(必要时运行这些程序)。
  (2-热身)从键盘读入10名学生的英语成绩,编程求出这次考试的平均成绩,并统计输出优秀人数和不及格人数。
  (3-实战)文件english.dat(BB平台下载,该文件要和源程序在同一文件夹中)中已经有了学生的成绩数据,请改编(2)中的程序,编程求出这次考试的平均成绩,并统计输出优秀人数和不及格人数。
  (4-实战)编程求出这次考试的最高成绩,以及得最高成绩的学生的学号(设学号即是相应数组元素的下标)。
  (5-实战)据统计,这次考试成绩均分为71.49,标准偏差为10.33,请编程将成绩转换为标准分,并将转换后的成绩保存到文件english2.dat中。
    标准分算法:Z=(X-A)/S,其中:X为原始分,A为全体考生的平均分,S为该次考试分数的标准偏差。标准分T=500+100Z。
    求平均和求标准偏差的工作可以使用项目3中已经编制好的函数完成,为简单起见,也可以直接用题目中给出的数据。
  (6-实战)读取english2.dat中的数据,用项目4中定义的排序函数对数据进行排序,输出完成排序用了多长时间。可以分别调用冒泡排序和选择排序,比较两种算法哪个更快。
  【项目7拓展3(选做)-涨工资了】从文件salary.txt中读入工人的工资(不超过500人),全部增加20%(好事),然后进行排序,将排序后的结果保存到文件ordered_salary.txt中。(salary.txt在BB平台下载。)

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

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

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

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

时间: 2024-11-01 13:36:43

2013级C++第14周项目——一维数组、字符数组的相关文章

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++第14周(春)项目——多态性、虚函数和抽象类

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 第一部分 阅读程序1.阅读.修改和运行关于交通工具类的程序,回答问题,以理解相关技术方法(1)请写出程序的执行结果,并在上机时对照理解 #include <iostream> using namespace std; class Vehicle //交通工具 { public: void run() const { cout <<

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

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

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 第一部分 程序分析 阅读下面的程序,先写出其运行结果,再运行对比. 读不懂怎么办?支招1:按课堂上老师讲课的方式,将变量对应内存的"框子"画出来,用大脑当CPU,写出变量的变化过程:支招2:单步执行程序,在监视(watch)窗口中观察变量的动态变化,从而掌握程序的运行机理.(1) #include <iostream> using namespace

2013级C++第14周程序阅读

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759 1.阅读下面筛法求素数的程序,理解其算法.代码请从CSDN博客的课程主页上下载.如果对运行结果和其背后的原理仍不理解,请通过单步执行的手段跟踪理解,学会观察数组在运行过程中的变化. #include <iostream> #include <iomanip> using namespace std; int main() { const int M=200;

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

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