2021级c++上机模拟考小结(上)

*最近考试较忙,所以先写ac数量前五的题,预计后面五题会在1.6发出。

一、型号阵列-21

描述

有一根由#字符组成的竖直方向的直线把a行b列的星号阵列一分为二,其中左半边有c列,右半边有b-c列。

输出该阵列。

输入

只有一组案例。

三个正整数a、b、c。(1<=a<=10,1<=b<=10,1<=c,1<=b-c

输出

输出星号阵列。每行最后一个非空格字符后不要输出空格,最后一行输出完要换行。

样例输入

3 5 2
 

样例输出

**#***

**#***

**#***

关键代码

*****
for (int i = 1; i <= a; i++)
{
	for (int j = 1; j <= b + 1; j++)
	{
		if (j == c + 1)
		{
			cout << "#";
		}
		else
		{
			cout << "*";
		}
	}
	cout << endl;
}
*****

解释

很简单的打卡题,星号阵列的一贯做法,外循环表示行,内循环表示列,用#将这个矩形分开所以每行的c+1列就输入#,否则输入*。

二、乘法口诀

描述

已知一个一位正整数m,输出乘法口诀表中与之相关的乘法。

输入

只有一组案例。

一个一位正整数m。

输出

输出9行,第1行是1与m相乘的算式,第2行是2与m相乘的算式,...,第9行是9与m相乘的算式。其中第一个乘数要比较小,第二个乘数要比较大,如果不是,要调整一下。

每个算式输出完都要换行。算式中不要有空格。

样例输入

3
 

样例输出

1*3=3

2*3=6

3*3=9

3*4=12

3*5=15

3*6=18

3*7=21

3*8=24

3*9=27

关键代码

*****
for (int i = 1; i <= 9; i++)
{
	int x = m, y = i;
	if (y > x)
	{
		swap(y, x);
	}
	printf("%d*%d=%d\n", y, x, y * x);
}
*****

解释

用x和y记录i和m的值(为了不对循环产生影响和m的值改变),由题目可得,输出时小的数字在前,大的数字在后,所以如果y比x大,就交换两个值,这样永远y的值比x的值小,最后用printf格式输出。

三、简易积分

描述

计算积分的结果

输入

多组案例。一个正整数n,表示案例的数量。(n<=100)

每组案例由4个整数a、b、c、d组成。(绝对值均不大于100,c<=d)

输出

针对每组案例,输出一个浮点数,表示该积分的结果。

每组案例输出完要换行。

样例输入

1
1 2 3 4
 

样例输出

5.5

关键代码

*****
int sd = a * c + b, xd = a * d + b;
int h = d - c;
double ans = 0.5 * (sd + xd) * h;
*****

解释

这条直线的积分实际上就是一个梯形的面积 算出上底、下底和高,利用梯形面积求解即可,注意0.5要写前面,确保他是浮点数。

四、数组计算

描述

计算一堆整数的最大值、最小值、总和、平均值,其中平均值精确到小数点后1位(指四舍五入)。

输入

多组案例。一个正整数n,表示案例的数量。(n<=20)

每组案例中,先是一个正整数m,表示数字的个数,(m<=100)

然后是m个整数。(绝对值均不大于10000)

输出

针对每组案例,输出4个数字,分别表示这m个整数的最大值、最小值、总和、平均值,其中平均值精确到小数点后1位。

每两个数字之间有一个空格。每组案例输出完要换行。

样例输入

1
6
1 2 3 4 5 10
 

样例输出

10 1 25 4.2

关键代码

*****
for (int i = 1; i <= m; i++)
{
	int x;
	cin >> x;
	sum += x;
	maxnum = max(maxnum, x);
	minnum = min(minnum, x);
}
double average = 1.0 * sum / m;
int x = average;
if (x == average)
{
	printf("%d %d %d %d\n", maxnum, minnum, sum, x);
}
else
{
	printf("%d %d %d %.1lf\n", maxnum, minnum, sum, average);
}
*****

解释

这题虽然题目是数组,但是可以边读入边判断,注意对average进行四舍五入保留以为小数,如果average刚好是整数,那么他后面的.0是不用输出的,鉴于格式输出的方便性以及四舍五入的方便性,运用pringtf格式输出%.1lf就是对double型变量四舍五入保留一位小数。

五、查找-4

描述

在一个字符串数组a中,查找是否存在长度与目标字符串x长度相同的元素。把a中所有长度与x相同的元素连接在一起输出。

输入

多组案例。一个正整数n,表示案例的数量。(n<=100)

每组案例先是一个字符串x和一个正整数m,分别表示目标字符串,以及字符串数组a元素的个数。(x字符串的长度不大于100,m<=100)

然后是m个字符串,表示字符串数组中各个元素的值。(所有字符串的长度均不大于100)

输出

针对每组案例,a数组中不存在任何一个元素的长度和x相同,则输出No,

否则输出一个字符串,是a数组中所有长度与x相同的元素,按照下标从小到大连接在一起。

每组案例输出完要换行。

样例输入

2
abc 3
abcd xyz ABC
abcde 3
abcd xyz ABC
 

样例输出

xyzABC

No

关键代码

*****
for (int i = 0; i < m; i++)
{
	cin >> s[i];
}
int xlen = x.length();
string ans = "";
bool flag = 0;
for (int i = 0; i < m; i++)
{
	if (s[i].length() == xlen)
	{
		flag = 1;
		ans = ans + s[i];
	}
}
*****

解释

首先是读入m个字符串,存到数组中,然后遍历这些数组,寻找有无长度和目标字符串长度一样的,有就用ans变量加上去,flag用来判断有无长度与目标字符串长度一样的字符串

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值