实验4 数组

实验一 求大于平均值的数并存储

/*
                           编程序,实现如下功能:
(1)定义两个一维数组x,y,不超过50个元素。
(2)从键盘输入k个整数到数组x中。
(3)计算x中数据的平均值ave及大于平均值的元素个数n并输出。
(4)将数组x中数据复制到数组y中,重复的数据只存储一次,最后输出y中的数据。

输入
输入两行,第一行为输入的数据个数,第二行若干整数,每个整数后面有一个空格用于分隔;

输出
第一行若干整数,每个整数后面有一个空格,最后一个空格后换行;第二行若干整数,每个整数后面有一个空格,最后一个空格后不需要换行;

样例输入 Copy
6
6 3 4 3 2 9

样例输出 Copy
4.5 2
6 3 4 2 9
*/
#include<iostream>
using namespace std;
int main() 
{
	int x[50], y[50];
	int k, n, i, j, a,flag=0;
	float ave;
	ave = 0;
	cin >> k;
	for (i = 0; i < k; i++)                     //输入数组同时完成累加
	{
		cin >> x[i];
		ave += x[i];
	}
	ave /= k;                                   //求品均值
	n = 0;
	for (i = 0; i < k; i++)                     //逐个判断是否大于ave,并计数
		if (x[i] > ave)
			n++;
	cout << ave << " " << n << endl;            //输出平均值和大于平均值的数字个数
	y[0] = x[0];                                //先将第一个复制,建立比较基础
	a = 1;
	for (i = 1; i < k; i++)                     //对比x中待复制数是否已存在于y中
	{
		for (j = 0; j < a; j++)
		{
			if (x[i] == y[j])
				flag++;
		}                                          //注意循环的部分
		if (!flag)
		{
			y[j ] = x[i];
			a++;                                   //计数,为y输出做准备
			
		}
		flag = 0;                                //注意flag的重置及其作用域
	}
	for (j = 0; j < a; j++)
		cout << y[j] << " ";
	return 0;
}

实验二 12人围坐淘汰

 题目描述
有 12 人围坐成一圈玩报数游戏,从1号人员开始顺时针报数,报到k的人员被淘汰出局;接着仍沿顺时针方向从被淘汰出局者的下一人员又重新从 1 开始报数,报到 k的人被淘汰;
如此继续,直到最后只剩下一个人时停止。请编写程序输出最后所剩那个人的编号。
注意:(1)假设参加游戏的人的编号沿顺时针方向依次为 1 到 12,可以使用数组来存放各数据;
      (2)k>1,由用户通过 cin 输入指定。

输入
输入一个整数,代表报数值;

输出
输出一个整数,即最后剩下的人的编号;

样例输入 Copy
3

样例输出 Copy
10*/
#include<iostream>
using namespace std;
int main()
{
	int k, n = 1, s = 0,i;
	cin >> k;
	int a[12] = { 1,2,3,4,5,6,7,8,9,10,11,12 };          //12人
	for (i = 0; s < 11; i++)                             //逐个报数
	{
		if (i == 12)                                     //最后一个报完再从头开始
			i = 0;
		if (a[i])                                         //如果值不是0(没有淘汰)就继续参与
		{
			if (n == k)
			{
				a[i] = 0;                                //淘汰用值为0表示
				n = 1;
				s++;                                     //记录淘汰个数作为循环结束的条件
			}
			else
				n++;
		}
	}
	for (i = 0; i < 12; i++)                                //遍历输出非零
		if (a[i])
			cout << a[i];
	return 0;
}

实验三 两个日期间隔天数

/*
                                                    题目描述
小宗想知道两个日期之间所间隔的天数,他希望有一个日期计算器,输入两个日期后能够自动计算之间的天数。
要求:设计相应的函数完成天数的计算,在主函数中验证正确性。

输入
按照年月日的顺序输入两个日期,年月日之间用一个空格分隔;

输出
输出两个日期之间的天数,即一个整数,整数后不需要换行;

样例输入 Copy
2016 3 6
2017 1 1

样例输出 Copy
301
*/
#include<iostream>
using namespace std;
int days(int, int, int);
int main()
{
    int d;
    int a, b, c;
    int x, y, z;
    cin >> a>>b>> c>> x>> y>> z;
    int sum1, sum2;
    sum1 = days(a, b, c);
    sum2 = days(x, y, z);
    if (sum1 > sum2)                                                  //求天数之差
        d = sum1 - sum2;
    else
        d = sum2 - sum1;
    cout << d;
    return 0;
}


int days(int a, int b, int c)                                        //计算总天数的函数
{
    int days=0, i = 0;
    int g1[12] = { 31 ,28,31,30,31,30,31,31,30,31,30,31 },
        g2[12] = { 31 ,29,31,30,31,30,31,31,30,31,30,31 };
    if (a % 4 == 0 && a % 100 != 0)
    {
        for (i = 0; i < b-1; i++)
            days += g2[i];
        days = (a - 1) / 4 - (a - 1) / 100 + (a - 1) / 400 + (a - 1) * 365 + days + c;
    }
    else
    {
        for (i = 0; i < b-1; i++)
            days += g1[i];
    
        days = (a - 1) / 4 - (a - 1) / 100 + (a - 1) / 400 + (a - 1) * 365 + days + c;
    }
    return days;

}

实验四 无意义的排序复制排序

对于整型数组a[10]和b[10],编制程序完成下列任务:
(1)由用户从键盘为两个数组输入值;
(2)求出两个数组的最大值和最小值;
(3)把数组a和b中的整数分别从小到大和从大到小排序;
(4)把两个有序的数组a和b组成一个长度为20的有序数组c[20],使数组c的顺序为从小到大。

输入
输入两行整数,每行10个,第一行是数组a里的数组,第二行是数组b里的数值;

输出
输出五行,第一行有两个整数,分别是数组a的最大值和最小值,两个整数之间用一个空格分隔;第二行有两个整数,分别是数组b的最大值和最小值,两个整数之间用一个空格分隔;第三行按照从小到大的顺序输出数组a里的数值,每个数字后面有一个空格,最后一个数字后面也有空格;第四行按照从大到小的顺序输出数组b里的数值,每个数字后面有一个空格,最后一个数字后面也有空格;第五行按照从小到大的顺序输出合并后数组c里的数值,每个数字后面有一个空格,最后一个数字后面也有空格。

样例输入 Copy
2 5 9 1 3 4 0 6 7 8
10 5 25 9 6 3 7 1 2 13

样例输出 Copy
9 0
25 1
0 1 2 3 4 5 6 7 8 9
25 13 10 9 7 6 5 3 2 1
0 1 1 2 2 3 3 4 5 5 6 6 7 7 8 9 9 10 13 25  
*/

#include<iostream>
using namespace std;
int max(int a[]);
int min(int a[]);
void t1(int a[],int);
void t2(int a[],int n);
int main()
{
    int a[10], b[10],c[20];
    int i = 0;
    for (i = 0; i < 10; i++)
        cin >> a[i];
    for (i = 0; i < 10; i++)
        cin >> b[i];
    cout << max(a) << " " << min(a) << endl;
    cout << max(b) << " " << min(b) << endl;
    t1(a,10);
    t2(b,10);
    for (i = 0; i < 10; i++)
        cout<< a[i]<<" ";
    cout << endl;
    for (i = 0; i < 10; i++)
        cout<<b[i]<<" ";
    cout << endl;
    for (i = 0; i < 10; i++)
        c[i] = a[i];
    for (i = 0; i < 10; i++)
        c[i+10]=b[i];
    t1(c,20);
    for (i = 0; i < 20; i++)
        cout << c[i]<<" ";
    return 0;

}

int max(int a[])                   //擂台求最大值
{
    int max,i=0;
    max = a[0];
    for (i = 1; i < 10; i++)
        if (max < a[i])
            max = a[i];
    return max;

}
int min(int a[])                    //擂台求最小值
{
    int min, i = 0;
    min = a[0];
    for (i = 1; i < 10; i++)
        if (min > a[i])
            min = a[i];
    return min;

}

void t1(int a[], int n)          //冒泡排序由小到大
{
    int i , j ,t;
    for (i = 0; i < n - 1; i++)
        for (j = 0; j < n - i - 1; j++)
            if (a[j] > a[j + 1])
            {
                t = a[j + 1];
                a[j + 1] = a[j];
                a[j] = t;
            }
}
void t2(int a[],int n)                //冒泡排序由大到小
{
    int i, j, t;
    for (i = 0; i < n - 1; i++)
        for (j = 0; j < n - i - 1; j++)
            if (a[j] < a[j + 1])
            {
                t = a[j + 1];
                a[j + 1] = a[j];
                a[j] = t;
            }
}

实验五 统计英语句子单词个数

题目描述
利用cin.getline()函数从键盘录入一句英文,其中每个单词之间用一个空格隔开,最后用'.'结束。统计该句话中单词的个数,并依次输出每个单词。
输出个数后换行,输出每个单词后也换行。注意:在本平台下,cin.getline()函数的使用方式如下:
         char s[50];
         cin.getline(s,50); //最多存储49个字符
输入
输入一句英文,其中每个单词之间用一个空格隔开,最后一个单词后面用英文的'.'作为结束;

输出
输出每个单词后换行,最后一行输出单词的数量。

样例输入 Copy
I like juice.

样例输出 Copy
I
like
juice
3
*/

#include<iostream>
using namespace std;
int main()
{
    char s[50];
    int i = 0, n=0;
    cin.getline(s, 50, '.');
    for (i = 0; s[i]; i++)
    {
        if (s[i] != ' ' )
            cout << s[i];
        else
        {
            n++;
            cout << endl;
        }
    }
    cout<<endl << n+1;
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值