实验四
题目A
题目描述
编程序,实现如下功能:
(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
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int x[50], y[50]; 6 int i,k,index; 7 index = 0; 8 int n = 0; 9 cin >> k; 10 for (i = 0; i < k; i++) 11 cin >> x[i]; 12 float sum=0; 13 float ave; 14 for (i = 0; i < k; i++) 15 sum += x[i]; 16 ave = sum / k; 17 for (i = 0; i < k; i++) 18 if (x[i] > ave) 19 index++; 20 cout << ave << ' ' << index << endl; 21 22 for (i = 0; i < k; i++) 23 { 24 int flag = 1; int j; 25 for (j = 0; j < i; j++) 26 if (x[j] == x[i]) 27 { 28 flag = 0; 29 break; 30 } 31 if (flag) 32 y[n++] = x[i]; 33 } 34 for (int m = 0; m < n; m++) 35 cout << y[m]<<' '; 36 return 0; 37 }
题目B
题目描述
有 12 人围坐成一圈玩报数游戏,从1号人员开始顺时针报数,报到k的人员被淘汰出局;接着仍沿顺时针方向从被淘汰出局者的下一人员又重新从 1 开始报数,报到 k的人被淘汰;如此继续,直到最后只剩下一个人时停止。请编写程序输出最后所剩那个人的编号。
注意:(1)假设参加游戏的人的编号沿顺时针方向依次为 1 到 12,可以使用数组来存放各数据;
(2)k>1,由用户通过 cin 输入指定。
输入
输出
样例输入 Copy
3
样例输出 Copy
10
#include <iostream>
using namespace std;
int main()
{
int a[13] = { 0 };
int n, m, k;
n = m = k = 0;
cin >> k;
for (int i = 1; n != 11; i++)
{
if (i == 13) i = 1;
if (a[i] == 0) m++;
if (m == k)
{
m = 0;
a[i] = 1;
n++;
}
}
for (int i = 1; i <= 12; i++)
if (a[i] == 0) cout << i;
}
题目C
题目描述
输入
输出
样例输入 Copy
2016 3 6
2017 1 1
样例输出 Copy
301
1 #include <iostream>
2 using namespace std;
3 int feb(int year)
4 {
5 if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
6 return 29;
7 else
8 return 28;
9 }
10 int days(int year, int month, int day)
11 {
12 int i, j, days, sum; int m[12];
13 sum = 0;
14 for (j = 1; j < year; j++)
15 {
16 sum += 365;
17 if ((j % 4 == 0 && j % 100 != 0) || j % 400 == 0)
18 sum++;
19 }
20
21 for (i = 1; i < 12; i++)
22 {
23 if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12)
24 m[i] = 31;
25 else if (i == 4 || i == 6 || i == 9 || i == 11)
26 m[i] = 30;
27 else
28 m[i] = feb(year);
29 }
30 for (i = 1; i < month; i++)
31 sum += m[i];
32 days = sum + day;
33 return days;
34 }
35 int sub(int year1, int month1, int day1, int year2, int month2, int day2)
36 {
37 int sub;
38 sub = days(year2, month2, day2) - days(year1, month1, day1);
39 return sub;
40 }
41 int main()
42 {
43 int y1, y2, m1, m2, d1, d2;
44 cin >> y1 >> m1 >> d1 >> y2 >> m2 >> d2;
45 cout<<sub(y1, m1, d1, y2, m2, d2);
46 return 0;
47 }
题目D
题目描述
对于整型数组a[10]和b[10],编制程序完成下列任务:
(1)由用户从键盘为两个数组输入值;
(2)求出两个数组的最大值和最小值;
(3)把数组a和b中的整数分别从小到大和从大到小排序;
(4)把两个有序的数组a和b组成一个长度为20的有序数组c[20],使数组c的顺序为从小到大。
输入
输出
输出五行,第一行有两个整数,分别是数组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
1 #include <iostream>
2 using namespace std;
3 int max(int a[])
4 {
5 int i,max;
6 max = a[0];
7 for (i = 1; i < 10; i++)
8 if (a[i] > max)
9 max = a[i];
10 return max;
11 }
12 int min(int a[])
13 {
14 int i, min;
15 min = a[0];
16 for (i = 1; i < 10; i++)
17 if (a[i] < min)
18 min = a[i];
19 return min;
20 }
21 void mintomax(int a[])
22 {
23 for (int i = 0; i < 9; i++)
24 {
25 for (int j = 0; j < 9; j++)
26 {
27 if (a[j] > a[j + 1])
28 {
29 int temp = a[j];
30 a[j] = a[j + 1];
31 a[j + 1] = temp;
32 }
33 }
34 }
35 for (int i = 0; i < 10; i++)
36 cout << a[i] << ' ';
37 }
38 void maxtomin(int a[])
39 {
40 for (int i = 0; i < 9; i++)
41 {
42 for (int j = 0; j < 9; j++)
43 {
44 if (a[j] < a[j + 1])
45 {
46 int temp = a[j];
47 a[j] = a[j + 1];
48 a[j + 1] = temp;
49 }
50 }
51 }
52 for (int i = 0; i < 10; i++)
53 cout << a[i] << ' ';
54 }
55 void add(int a[],int b[])
56 {
57 int i;
58 int c[20];
59 for (i = 0; i < 10; i++)
60 c[i] = a[i];
61 for (i = 10; i < 20; i++)
62 c[i] = b[i - 10];
63 for (i = 0; i < 19; i++)
64 {
65 for (int j = 0; j < 19; j++)
66 {
67 if (c[j] > c[j + 1])
68 {
69 int temp = c[j];
70 c[j] = c[j + 1];
71 c[j + 1] = temp;
72 }
73 }
74 }
75 for (i = 0; i < 20; i++)
76 cout << c[i] << ' ';
77 }
78 int main()
79 {
80 int i;
81 int a[10], b[10];
82 for (i = 0; i < 10; i++)
83 cin >> a[i];
84 for (i = 0; i < 10; i++)
85 cin >> b[i];
86 cout << max(a) << ' ' << min(a)<<endl;
87 cout << max(b) << ' ' << min(b) << endl;
88 mintomax(a); cout << endl;
89 maxtomin(b); cout << endl;
90 add(a, b);
91 return 0;
92 }
题目E
题目描述
利用cin.getline()函数从键盘录入一句英文,其中每个单词之间用一个空格隔开,最后用'.'结束。统计该句话中单词的个数,并依次输出每个单词。输出个数后换行,输出每个单词后也换行。注意:在本平台下,cin.getline()函数的使用方式如下:
char s[50];
cin.getline(s,50); //最多存储49个字符
输入
输出
样例输入 Copy
I like juice.
样例输出 Copy
I
like
juice
3
1 #include <iostream>
2 using namespace std;
3 int main()
4 {
5 int i, num;
6 num = 0;
7 char s[50];
8 cin.getline(s, 50);
9 for (i = 0; i < 50; i++)
10 {
11 if (s[i] != ' ' && s[i] != '.')
12 cout << s[i];
13 else
14 {
15 cout << endl;
16 num++;
17 }
18 if (s[i] == '.')
19 break;
20 }
21 cout << num<<endl;
22 return 0;
23 }

浙公网安备 33010602011771号