全国青少年软件编程(C语言)考试试卷
(2级真题)第1部分
2019年12月
1. 编程题(第1部分)(共2题)
计算书费
【描述】
以下是一本书的单价表:
计算概论28.9元/册
数据结构与算法32.7元/册
数字逻辑45.6元/本
C++编程教程78元/本
人工智能35元/本
计算机体系结构 86.2元/册
编译原理27.8元/本
操作系统43元/本
计算机网络56元/册
JAVA编程65元/册
给定购买的每本书的数量,编程计算应付的总费用。
【进入】
输入一行包含10个整数(大于等于0、小于等于100),分别代表购买的《计算概论》、《数据结构与算法》、《数字逻辑》、《C++编程课程》、 《人工智能》、《计算机体系结构》、《编译原理》、《操作系统》、《计算机网络》、《JAVA编程》(本单元)的数量。 每两个整数之间用空格分隔。
【输出】
输出一行,其中包含代表应付总费用的浮点数 f。 精确到小数点后一位。
【样本输入】
1 5 8 10 5 1 1 2 3 4
【输出样例】
2140.2
【参考AC方案】
1#include
2using namespace std;
3
4
10int main()
11{
12 // v数组中下标1到10的元素分别表示10本书的价格
13 double v[20] = {0,28.9,32.7,45.6,78,35,86.2,27.8,43,56,65};
14 // n数组用来储存每本书的数量, sum表示总价
15 double n[20], sum = 0;
16 // 输入书的数量
17 for (int i = 1; i <= 10; i++)
18 {
19 cin >> n[i];
20 }
21 // 计算总价
22 for (int i = 1; i <= 10; i++)
23 {
24 // n[i]是数量 v[i]是单价
25 sum += n[i] * v[i];
26 }
27 cout << fixed<< setprecision(1) < 28 return 0;
29}
【大头老师说】
这是一维数组的基本题,考察学生对基础编程知识的灵活运用。
当然,上述程序还可以进一步优化。 优化点是:不再将每本书的数量存储在数组中,而是在输入每本书的数量的同时完成计算。 参与程序如下:
1#include
2using namespace std;
3
4
5
11int main()
12{
13 // v数组中下标1到10的元素分别表示10本书的价格
14 double v[20] = {0,28.9,32.7,45.6,78,35,86.2,27.8,43,56,65};
15 // n数组用来储存每本书的数量, sum表示总价
16 double t, sum = 0;
17
18 // 输入书的数量,并完成计算
19 for (int i = 1; i <= 10; i++)
20 {
21 cin >> t;
22 sum += t * v[i];
23 }
24
25 cout << fixed<< setprecision(1) < 26 return 0;
27}
2. 交换大小写字母
【描述】
将字符串中所有出现的大写字母替换为小写字母,并将小写字母替换为大写字母。
【进入】
输入一行:要交换的字符串。
【输出】
输出一行:完整交换的字符串(字符串长度小于80)。
【样本输入】
如果是这样,您就有了一个 . 您可以在右侧登录。
【输出样例】
如果是这样,您就有了 . 您可以在右侧登录。
【参考AC方案】
1#include
2using namespace std;
3
4
5int main()
6{
7 string s;
8 // 使用getline获取一行信息,包括空格
9 getline(cin, s);
10 // len表示字符串的长度
11 // d表示小写字母和它对应的大写字母ASCII码的差值
12 int len = s.length(), d = 'a' - 'A';
13
14 for (int i = 0; i < len; i++)
15 {
16 if (s[i] >= 'A' && s[i] <= 'Z')
17 {
18 // 如果s[i]的大写字母 转变为小写字母
19 s[i] = s[i] + d;
20 }
21 else if (s[i] >= 'a' && s[i] <= 'z')
22 {
23 // 如果s[i]的小写字母 转变为大写字母
24 s[i] = s[i] - d;
25 }
26 }
27 cout << s;
28 return 0;
29}
【大头老师说】
这是ASCII码的综合应用。 我们需要知道,小写字母的 ASCII 码比大写字母的 ASCII 码大。 所以小写字母转换为大写字母时减去差值,大写字母转换为小写字母时加上差值。 该差异是小写字母与其对应的大写字母之间的差异。 它是一个固定值32。如果你能记住它就更好了。 如果记不住了,可以用程序来计算一下,如上面的程序:d = ' a' - 'A';。 所以下面的程序也是可以的:
1#include
2using namespace std;
3
4int main()
5{
6 string s;
7 // 使用getline获取一行信息,包括空格
8 getline(cin, s);
9 // len表示字符串的长度
10 int len = s.length();
11
12 for (int i = 0; i < len; i++)
13 {
14 if (s[i] >= 'A' && s[i] <= 'Z')
15 {
16 // 如果s[i]的大写字母 转变为小写字母
17 s[i] = s[i] + 32;
18 }
19 else if (s[i] >= 'a' && s[i] <= 'z')
20 {
21 // 如果s[i]的小写字母 转变为大写字母
22 s[i] = s[i] - 32;
23 }
24 }
25 cout << s;
26 return 0;
27}
微信搜索
没有IP的事情