第12、13讲 课后自主学习及实践方案 代码

来源:互联网 发布:js字符串首字母大写 编辑:程序博客网 时间:2024/06/06 00:03

说明:本周大多项目带有提示的代码以及需要用到的其他数据,已经上传到云学堂和QQ群,由老师博客中课程主页也可以找到代码,请避免不必要的输入而浪费时间。
【项目1 - 数组大折腾】
(1)创建一个有20个元素的整型数组,通过初始化,为数组中的前10个元素赋初值,然后通过键盘输入后10个元素的值,从前往后(从第0个到第19个)输出数组中元素的值,每5个元素换一行。
int main( )
{
    int a[20]={...};  //初始化前10个元素
 //键盘输入后10个元素的值
 
  
 //由前往后输出数组中所有元素的值
 cout<<"由前往后,数组中的值是:"<<endl;

 return 0;
}

【项目2- 成绩处理】

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

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

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

    //求出并输出标准偏差(选做)
    return 0;
}

【项目3 - 成绩处理函数版】
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 - 数组的排序】
(1)编写函数,完成冒泡排序
要求不能改变下面的main函数。
//两个函数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函数

(2)字符数组排序:改造(1)的程序,使其能对字符数组进行排序,其中:
int a[20]={...};
int b[15]={...};
改为
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] = {'a','b','a',...};  //自己补足
(3)体验选择排序:改造(1)的程序,将bubble_sort(...)改为select_sort(...),排序算法由冒泡排序换作为选择排序,完成相同的任务。


【项目5-字符串操作】
(1)阅读下面的程序,完成类似的字符统计功能
#include<iostream>
#include<cstdio> 
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)阅读下面的程序,完成类似字符串复制的功能
#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;
}

【附件】C++文件操作初体验
例1:将数据“写入/输出”到文件中
//看这个例子一定要举一反三,凡是要将数据输出到文件(写文件)都可这样处理
#include<fstream>    //处理文件要包括头文件fstream
#include<iostream>
#include<cstdlib>   //调用exit(1)需要包含cstdlib
using namespace std;
int main( )
{
    int a;
    //打开文件,要使用文件必须正确打开,对输出文件,注意写ios::out
    // f1.dat是要“写”的文件名,你可以起你喜欢的名字,如myfile.txt
    ofstream outfile("f1.dat",ios::out);
    if(!outfile)        //测试文件打开操作是否成功
    {
        cerr<<"open error!"<<endl;
        exit(1);    //打开不成功,则提示后退出。
    }
    //用ios::out方式成功打开文件后,可以如下所示将数据保存到文件中
    //操作中,要用打开的文件对象名(outfile),而不是用文件名(此例f1.dat)
    //本例将键盘输入的10个整数“写”到文件中。
    for(int i=0; i<10; i++)
    {
        cin>>a;
        outfile<<a<<endl;   //a被写到了文件
        //理解:outfile就是前面打开文件时创建的“输出文件流对象”,
        //是否想起了cout<<a<<endl?道理一样,用法也一样,只是输出到了文件
    }
    outfile.close();     //关闭文件。用完了必须关闭,否则会丢失数据
    cout<<"处理完毕,请打开文件查看结果!"<<endl;
    return 0;

运行完程序后查看结果,需要到程序所在的文件夹中,这时多了一个文件f1.dat,用记事本打开(用CodeBlocks也可以打开),其内容就是你输出的数据。
例2:从文件中读入数据
#include <fstream>   //操作文件必写
#include<iostream>
#include<cstdlib>   //调用exit(1)需要包含cstdlib
using namespace std;
int main( )
{
    int a,max=-9999,i; //要求最大值,先默认其为一个很小的数
    //以输入的方式(ios::in)打开文件,注意f1.dat必须在文件夹中存在
    ifstream infile("f1.dat",ios::in);
    //测试是否成功打开,打开失败时(如要读的数据文件不存在)退出
    if(!infile)
    {
        cerr<<"open error!"<<endl;
        exit(1);
}
//下面读取数据并完成处理,若数据需要多次使用,可以读入到数组中
    while(infile>>a)  //当到达文件尾,则循环处理结束。类似cin>>a,只不过数据来源于打开的文件
    {
         if(a>max) max=a;   //在读入过程中,max将保存最大值
    }
    infile.close();    //读入完毕要关闭文件
    //下面对数据的操作和文件就没有关系了,本例输出求得的最大值
    cout<<"文件中最大的数是:"<<max<<endl;
    return 0;
}
可以选择运行上面的两种程序,以增强体验的映像。再次细读一遍程序,尤其是注释中的文字,品味操作文件中的要点。

0 0