贺利坚练习(6)

A: 数组逆序输出
Description
输入10个整数存入一维数组,然后按逆序输出。
Input
输入包括一行。
10个以空格隔开的整数。
Output
逆序的10个整数,整数以空格隔开。
Sample Input
1 3 5 9 7 6 8 2 4 0
Sample Output
0 4 2 8 6 7 9 5 3 1
解:

int _tmain(int argc, _TCHAR* argv[])
{
    int a[10];
    for (int i = 0; i < 10;++i)
    {
        cin >> a[i];
    }
    for (int i = 9; i > -1;--i)
    {
        cout << a[i] << endl;
    }
    return 0;
}

B: 在有序数组中插入数据
Description
定义好一个有10个元素的数组,先输入9个呈升序的数作为前9个元素,再输入一个数,要求按原来排序的规律将它插入数组中。
Input
第一行,原始数列,9个呈升序的数。第二行,需要插入的数字。
Output
插入后有序的数列
Sample Input
1 7 8 17 23 24 59 62 101
50
Sample Output
7
8
17
23
24
50
59
62
101
解:

int _tmain(int argc, _TCHAR* argv[])
{
    int a[10];
    bool mark = false;
    for (int i = 0; i < 10;++i)
    {
        cin >> a[i];
    }
    for (int i = 0; i < 9;++i)
    {

        if (a[9]<a[i]&&(!mark))
        {
            int temp = a[9];
            for (int j = 9; j >i;--j)
            {
                a[j] = a[j - 1];
            }
            a[i] = temp;
            mark = true;
        }
    }
    for (int i = 0; i < 10;++i)
    {
        cout << a[i] << endl;
    }
    return 0;
}

C: 统计元音字母个数
Description
统计每个元音字母在字符串中出现的次数。
Input
输入一行长度不超过100的字符串。
Output
输出各个元音字母出现的次数。
Sample Input
my name is ignatius
Sample Output
a:2
e:1
i:3
o:0
u:1
解:

int _tmain(int argc, _TCHAR* argv[])
{
    char s[100];
    int aCnt = 0, eCnt = 0, iCnt = 0, oCnt = 0, uCnt = 0;
    int i = 0;
    while (cin >> s[i])
    {
        switch (s[i])
        {
        case 'a':
            aCnt++;
            break;
        case 'e':
            eCnt++;
            break;
        case 'i':
            iCnt++;
            break;
        case 'o':
            oCnt++;
            break;
        case 'u':
            uCnt++;
            break;
        default:
            break;
        }
        ++i;
    }
    cout << "a: " << aCnt << endl;
    cout << "e: " << eCnt << endl;
    cout << "i: " << iCnt << endl;
    cout << "o: " << oCnt << endl;
    cout << "u: " << uCnt << endl;
    return 0;
}

【项目1 - 数组大折腾】
(1)创建一个有20个元素的整型数组,通过初始化,为数组中的前10个元素赋初值,然后通过键盘输入后10个元素的值,从前往后(从第0个到第19个)输出数组中元素的值,每5个元素换一行。
解:

int _tmain(int argc, _TCHAR* argv[])
{
    int a[20] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    for (int i = 10; i < 20;++i)
    {
        cin >> a[i];
    }
    int j = 0;
    for (int i = 0; i < 20;++i)
    {
        ++j;
        cout << a[i] << '\t';
        if (j == 5)
        {
            j = 0;
            cout << endl;
        }
    }
    return 0;
}

(2)创建一个长度为10的整型数组并初始化,由后往前(由第9个元素向第0个元素方向)输出数组中所有元素的值,改变数组元素的值,令所有的数据加倍,输出改变后的值。
解:

int _tmain(int argc, _TCHAR* argv[])
{
    int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    for (int i = 9; i > -1;--i)
    {
        cout << "before: " << a[i] << '\t';
        a[i] *= 2;
        cout << "after: " << a[i] << endl;
    }
    return 0;
}

(3)创建一个长度为16的整型数组a并初始化,先输出数组中元素值为3的倍数的数,再输出所有下标为3的倍数的元素值。输出如图示。
这里写图片描述
解:

int _tmain(int argc, _TCHAR* argv[])
{
    int a[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ,11,12,13,14,15,16};
    cout << "元素值为3 的倍数:" << endl;
    for (int i = 0; i < 16;++i)
    {
        if (!(a[i]%3))
        {
            cout << "a[" << i << "]: " << a[i] << endl;
        }
    }
    cout << "元素序号为3 的倍数: " << endl;
    for (int i = 0; i < 16;++i)
    {
        if (!(i%3))
        {
            cout << "a[" << i << "]: " << a[i] << endl;
        }
    }
    return 0;
}

(4)创建一个长度为16的整型数组a并初始化,删除数组中所有能被3整除的元素(数组中实际有效使用的元素将不足16),输出删除后数组中的全部元素。
解:

int _tmain(int argc, _TCHAR* argv[])
{
    int a[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ,11,12,13,14,15,16};
    int len = 16;
    for (int i = 0; i < 16;++i)
    {
        if (!(a[i]%3))
        {
            for (int j = i; j < 15;++j)
            {
                a[j] = a[j + 1];
            }
            --len;
        }
    }
    for (int i = 0; i < len;++i)
    {
        cout << a[i] << endl;
    }
    return 0;
}

(5)创建一个长度为16的整型数组a并初始化前15个元素,输入一个整数b,将b插入到a[0]位置(原有的数据往后“移动”),输出删除后数组中的全部元素。
解:

int _tmain(int argc, _TCHAR* argv[])
{
    int a[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ,11,12,13,14,15};
    int insert_num;
    cin >> insert_num;
    for (int i = 15; i >-1;--i)
    {
        a[i] = a[i - 1];
    }
    a[0] = insert_num;
    for (int i = 0; i < 16;++i)
    {
        cout << a[i] << endl;
    }
}

【项目2- 成绩处理】
在数组score中将要存储某小组C++程序设计的成绩,请设计实现下面的各功能函数,并在main函数中调用,组合成一个完整的应用:
(1)输入小组人数及成绩,要保证成绩在0-100之间;
(2)输出该小组的最高成绩、最低成绩、平均成绩;
(3)输出考得最高成绩和最低成绩的同学的人数;
(4)输出考得最高成绩和最低成绩的同学的学号(设数组下标即学号,可能有相同的成绩)。
(5)(选做)求出所有同学成绩的标准偏差,标准偏差公式为,其中为xi样本(即某同学成绩),x(上带一横)为均值(前面已经求出),N为样本数目;
提示1:可以采用“渐进式”策略,实现一个功能后调试通过,再实现下一个功能。
提示2:界面参考见图
这里写图片描述
提示3:请思考,如果这里的同学人数很多,例如500、10000名,这个程序中通过键盘输入的方式,已经显得无能为力!如何解决?见本讲项目7。
解:

#include "stdafx.h"

void input_scores(int scores[],int num)
{
    for (int i = 0; i < num;++i)
    {
        cout << "请输入第" << i << "名学生成绩: ";
        cin >> scores[i];
    }
}
void output_scores(int scores[], int num)
{
    int high = scores[0], low = scores[0], mid = 0, sum = 0;
    for (int i = 0; i < num;++i)
    {
        sum += scores[i];
        if (scores[i]>high)
        {
            high = scores[i];
        }
        else if (scores[i]<low)
        {
            low = scores[i];
        }
    }
    mid = sum / num;
    cout << "最高成绩为: " << high << endl;
    cout << "最低成绩为: " << low << endl;
    cout << "平均成绩为: " << mid << endl;
    int high_cnt = 0, low_cnt = 0;
    for (int i = 0; i < num;++i)
    {
        if (scores[i] == high)
        {
            ++high_cnt;
        }
        else if (scores[i] == low)
        {
            ++low_cnt;
        }
    }
    cout << "获得最高成绩共: " << high_cnt << "人" << endl;
    cout << "学号为: ";
    for (int i = 0; i < num;++i)
    {
        if (scores[i] == high)
        {
            cout << i << "\t";
        }
    }
    cout << endl;
    cout << "获得最低成绩共: " << low_cnt << "人" << endl;
    cout << "学号为: ";
    for (int i = 0; i < num; ++i)
    {
        if (scores[i] == low)
        {
            cout << i << "\t";
        }
    }
    cout << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
    int scores[50];
    int num, i;
    cout << "共有多少同学? ";
    cin >> num;
    cout << "请输入学生成绩: " << endl;
    input_scores(scores, num);
    output_scores(scores, num);
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值