实验一 求大于平均值的数并存储
/*
编程序,实现如下功能:
(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;
}