C++U2-第12课-单元测评(二)

发布时间 2023-11-12 19:36:11作者: 小虾同学

上节课作业部分(点击跳转)

单元测评2题目和答案解析

1、

 

2、

 

 3、不定长数组,不允许不初始化列,可以不初始化行;

 

 4、比较常见的字符的ASCII码,空格为32,字符0为48,大写字母A为65,小写字母a为97

 

 5、abs为绝对值函数,正数的绝对值是本身,负数的绝对值为相反数,ceil表示向上取整7

 

 6、值传递和引用传递,值传递形参的改变不会改变实参,引用传递形参的改变会改变实参8

 程序阅读题1:第一行输出的是字符串s1,注意是遍历输出字符串s1,每输出一个字符后后面还输出了一个空格,所以第一个选D 第二个考察的是string中的+表示拼接,首先s1=s1+s2,表示将s2拼接到s1后,结果赋值给s1,s1为abcabc,然后s1+=s2也是同样的效果,在s1为abcabc的基础上再拼接abc,结果为abcabcabc9

 程序阅读题2:注意输入的两行三列的二维数组是从下标1开始存放的,但输出是从0开始输出10

 

 编程题1、

解析:先获取最后一个字符保存到新字符串,再遍历原字符串每个字符加到新字符串后面,遍历到倒数第2个就可以啦;然后正序输出;

#include <iostream>
using namespace std;

int main(){
    string s;
    cin >> s;
    string ans;
    ans += s[s.size() - 1];
    for (int i = 0; i < s.size() - 1; i++) {
        ans += s[i];
    }
    cout << ans;
    return 0;
}
View Code

 

 2、

 

定义变量n存储边长
外层循环控制正方形的行数
内层循环控制正方形的列数
每一行结束要换行

#include <iostream>
using namespace std;

int main() {
    //定义变量n存储边长
    int n;
    cin >> n;
    //外层循环控制正方形的行数
    for (int i = 1; i <= n; i++) {
        //内层循环控制正方形的列数
        for (int j = 1; j <= n; j++) {
            cout << '&';
        }
        //每一行结束要换行
        cout << '\n';
    }
    return 0;
}
View Code

 

3、

二维数组
解析:如图

#include <iostream>
using namespace std;

int a[109][109],b[109][109];
int main(){
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cin >> a[i][j];
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            b[i][j] = b[i][j - 1] + a[i][j];
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cout << b[i][j] << " ";
        }
        cout << "\n";
    }
    return 0;
}
View Code

 

4、

 

解析
定义变量a,b,c存储3个实数并输入

定义一个函数,用来求三个实数中的最大值

调用函数计算式子的结果并保留两位小数输出

#include<iostream>
using namespace std;
//定义一个函数,用来求三个实数中的最大值
double maxx(double a,double b,double c){
    double mx = a;
    if(b >= a) mx = b;
    if(c >= mx) mx = c;
    return mx;
}
int main(){
    //定义变量a,b,c存储3个实数并输入
    double a,b,c;
    cin >> a >> b >> c;
    //调用函数计算式子的结果并保留两位小数输出
    printf("%.2f",maxx(a,b,c)/(maxx(a+b,b,c)*maxx(a,b,b+c)));
    return 0;
}
View Code

 

 

 

 

上节课作业部分:

1、[【字符串】宝石与石头]

解析
【题意分析】
输入两个字符串,一个为宝石类型,一个为拥有的石头类型,求拥有的宝石的数量。

【思路分析】
1、定义变量,输入两个字符串

2、遍历手中的石头,判断是否为宝石,循环嵌套

​ 1、外循环为拥有的石头,内循环为宝石的种类

3、输出答案,拥有的宝石数量

【参考代码】
#include<iostream>
#include<string>
using namespace std;
int main()
{
    //1、定义变量,输入两个字符串 
    string s,t;
    int sum = 0;  //统计拥有的宝石的数量 
    cin >> s >> t;  
    //2、遍历手中的石头,判断是否为宝石,循环嵌套 
    for(int i = 0; i < t.size(); i++)   //手中拥有的石头 
    {
        for(int j = 0; j < s.size(); j++)  //宝石的类型 
        {
            if(t[i] == s[j])
                sum++;
        }
    }
    //3、输出答案,拥有的宝石数量
    cout << sum;
    return 0;
}
View Code

2、[【数学】列车到达时间]

【思路分析】
1、定义变量,输入

2、实际到达的时间 = (到达时间 + 延误时间) % 24

【参考代码】
#include<iostream>
using namespace std;
int main()
{
    //1、定义变量,输入
    int arr , del;
    cin >> arr >> del; //到达时间  延误时间
    //2、实际到达的时间 = (到达时间 + 延误时间)%24
    cout << (arr + del) % 24; 
    return 0;
}
View Code

3、【双重循环】三元组]

【思路分析】
1、定义变量,输入

2、双层循环,枚举 a 和 b

3、根据 a 和 b,得出 c

4、判断 c 是否符合题意,需满足 a * a + b * b = c * c 且 c 小于等于 n

【参考代码】
#include<iostream>
#include<cmath> 
using namespace std;
int main()
{
    //1、定义变量,输入
    int n , a , b , c , sum=0;
    cin >> n;
    //2、枚举 a 和 b 
    for(int i = 1; i <= n; i++)  //a
    { 
        for(int j = 1; j <= n; j++)  //b
        {
            //3、根据 a 和 b,得出 c
            a = i;
            b = j;
            c = sqrt(a * a + b * b);
            //4、判断 c 是否符合题意 
            if(c * c == a * a + b * b && c <= n)
                 sum++ ;     
        }
    }
    cout << sum; //数目 
    return 0;
}
View Code

1、[【循环的应用】螺旋矩阵]

【思路分析】
1、定义变量,输入

2、由内到外递增,看成由外到内递减

3、重复螺旋状

4、每一圈四个方向构成,分别为下 左 上 右

​ 4.1、 向下移动,在变动的是行,从第 l 行到第 r 行

​ 4.2、向左移动,在变动的是列,从第 r-1 列到第 l 列

​ 4.3、向上移动,在变动的是行,从第 r-1 行到第 l 行

​ 4.4、向右移动,在变动的是列,从第 l+1 列到第 r-15、一圈结束后,往内部继续螺旋

​ 5.1、样例,第一圈的起点为25,第二圈的起点为9,第三圈的起点为1

【参考代码】
#include <bits/stdc++.h>
using namespace std;
int a[105][105], n;
int main()
{
    //1、定义变量,输入 
    cin >> n;
    //2、由内到外递增,看成由外到内递减  
    int l = 1, r = n, cnt = n * n;  //起点坐标(l,r)
    //3、重复螺旋状 
    while (l <= r)
    {
        //4、每一圈四个方向构成,分别为下 左 上 右 
        //4.1、 向下移动,在变动的是行,从第 l 行到第 r 行 
        for (int i = l; i <= r; i++)
        {
            a[i][r] = cnt--;
        }
        //4.2、向左移动,在变动的是列,从第 r-1 列到第 l 列 
        for (int i = r - 1; i >= l; i--)
        {
            a[r][i] = cnt--;
        }
        //4.3、向上移动,在变动的是行,从第 r-1 行到第 l 行
        for (int i = r - 1; i >= l; i--)
        {
            a[i][l] = cnt--;
        }
        //4.4、向右移动,在变动的是列,从第 l+1 列到第 r-1 列  
        for (int i = l + 1; i <= r - 1; i++)
        {
            a[l][i] = cnt--;
        }
        //5、一圈结束后,往内部继续螺旋
        //5.1、样例,第一圈的起点为25,第二圈的起点为9,第三圈的起点为1 
        l++, r--; 
    }

    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            printf("%8d",a[i][j]);
        }
        cout << "\n";
    }
    return 0;
}
View Code