STEMA-C++
省202510
省202509
国202506
省202505
本文档使用 MrDoc 发布
-
+
首页
省202509
# STEMA考试 C++试卷(9月) ## 一、单项选择题 ### 第一题 执行语句 `int a = 1.56;` 后,a 的值是( A)。 A、1 B、2 C、1.5 D、1.6 ### 第二题 运行以下程序,如果 a 的值为 10,输出的结果是(B )。 ```cpp if (!(a > 8)) cout << a + 1; else cout << a - 1; ``` A、8 B、9 C、10 D、11 ### 第三题 以下循环的循环次数是(7 )。 ```cpp int i = 6; do{ i--; }while (i >= 0); ``` A、5 B、6 C、7 D、8 ### 第四题 运行以下程序,输出的结果是(C )。 ```cpp char s[10] = "1234"; int len = 0; while (s[len] != '\0') { len++; } strcat(s, "56"); cout << s[len]; ``` A、3 B、4 C、5 D、6 ### 第五题 下列关于 const 修饰词和指针的说法,错误的是(D )。 A、const int* p; 表示不能修改指针 p 指向的值 B、int* const p; 表示不能修改指针 p 指向的内存地址 C、const int* p; 表示可以修改指针 p 指向的内存地址 D、int* const p; 表示不能修改指针 p 指向的值 ``` 要解决这个问题,我们需要先理清**const修饰指针的两种核心规则**,再逐一分析选项: ### 核心规则:const修饰指针的两种形式 const与指针结合时,**const的位置决定了修饰的对象**: | 写法 | 含义(核心)| 通俗解释 | |--------------------|----------------------------|------------------------------| | `const int* p`(等价`int const *p`) | const修饰`*p`(指针指向的值) | 指针指向的内容不能改,但指针本身的指向(地址)可以改 | | `int* const p` | const修饰`p`(指针本身)| 指针的指向(地址)不能改,但指针指向的内容可以改 | ### 逐一分析选项 #### 选项A `const int* p;` 表示不能修改指针 p 指向的值。 ✅ **正确**:const修饰`*p`,因此`*p = 10;`这类修改指向值的操作会报错。 #### 选项B `int* const p;` 表示不能修改指针 p 指向的内存地址。 ✅ **正确**:const修饰指针`p`本身,因此`p = &b;`这类修改指针指向地址的操作会报错。 #### 选项C `const int* p;` 表示可以修改指针 p 指向的内存地址。 ✅ **正确**:`const int* p`仅限制指向的值,指针`p`本身是普通变量,因此`p = &a; p = &b;`这类修改指向地址的操作合法。 #### 选项D `int* const p;` 表示不能修改指针 p 指向的值。 ❌ **错误**:`int* const p`仅限制指针`p`的指向地址不能改,**指向的值可以修改**(例如`*p = 20;`是合法的)。 ### 最终答案 **D** ``` ## 二、编程题 ### 第一题 **标题:**太阳能板发电量题目描述:每块太阳能板每天的发电量为 2 度,请计算 n 块太阳能板 m 天的总发电量是多少度。 **输入描述:**输入两个整数 n 和 m(1≤n≤100,1≤m≤300),分别表示太阳能板的数量以及发电的天数,整数之间以一个空格隔开。 **输出描述:**输出一个整数,表示 n 块太阳能板 m 天的总发电量。 **样例输入:**5 3 **样例输出:**30 ```cpp #include <iostream> using namespace std; int main() { int n,m; cin>>n>>m; cout<<(n*m*2)<<endl; return 0; } ``` ### 第二题 **标题:**座位 **题目描述:**车站候车室有 5 排座位,每一排包含 15 个座位,将这些座位按顺序从小到大编号,第一排编号为 1 到 15,第二排编号为 16 到 30,以此类推。 有两个人来到候车室分别挑选了一个座位坐下。给定两人的座位编号,请判断他们的座位是否在同一排,并输出其中较大的座位编号。 **输入描述:**输入两个不同的整数(1≤整数≤75),分别表示两人挑选的座位编号,整数之间以一个空格隔开。 **输出描述:** 第一行输出一个字符串,如果两人的座位在同一排,则输出 "YES",否则输出 "NO"; 第二行输出一个整数,表示两人中较大的座位编号。 **样例输入:** 2 30 **样例输出:** NO 30 ```cpp #include <iostream> #include <cmath> using namespace std; int main() { int n,m; cin>>n>>m; int maxn = n>m?n:m; if(ceil(n/15) == ceil(m/15)) { cout<<"YES"<<endl<<maxn<<endl; } else { cout<<"NO"<<endl<<maxn<<endl; } return 0; } ``` ### 第三题 **标题:**电脑密码 **题目描述:**小明忘记了自己的电脑密码。他记得密码长度为 n 以及以下信息: 1)密码仅由数字 0 和数字 1 组成; 2)密码正着读和反着读是一样的,例如:01110; 3)密码中包含 2 个或 3 个数字 1,且所有数字 1 位置连续。 给定密码的长度 n,请你帮小明推算出他的电脑密码。 **输入描述:**输入一个整数 n(4≤n≤20),表示密码的长度。 **输出描述:**输出一个仅包含 0 和 1 的数字序列,表示小明的电脑密码。 **样例输入:**5 **样例输出:**01110 ```cpp #include <iostream> using namespace std; int main() { int n,k; cin>>n; k = n/2-1; for(int i = 0;i < k;i ++) { cout<<"0"; } cout<<(n%2==0?"11":"111"); for(int i = 0;i < k;i ++) { cout<<"0"; } return 0; } ``` ### 第四题 **标题:**牛奶工厂 **题目描述:**有一家牛奶工厂,每天都会生产一些鲜牛奶,以应对市场上对鲜牛奶的需求。鲜牛奶的保质期为 2 天,即第 i 天生产的鲜牛奶在第 i 天和第 i + 1 天均能售出,但在第 i + 2 天会过期(过期的鲜牛奶不能售卖)。 给定连续 n 天鲜牛奶的生产量和需求量,求工厂第 n 天结束后能售出鲜牛奶的最大数量。 例如:当 n = 5,连续 5 天鲜牛奶的产量分别为:10,20,15,20,25; 连续 5 天市场的需求量分别为:8,12,5,50,30。  **输入描述:** 第一行输入一个整数 n(1≤n≤1000),表示天数; 第二行输入 n 个整数(1≤整数≤1000),分别表示连续 n 天每天的产量,整数之间以一个空格隔开; 第三行输入 n 个整数(1≤整数≤1000),分别表示连续 n 天每天的需求量,整数之间以一个空格隔开。 **输出描述:**输出一个整数,表示工厂第 n 天结束后能售出鲜牛奶的最大数量。 **样例输入:** 5 10 20 15 20 25 8 12 5 50 30 **样例输出:** 85 ```cpp #include <iostream> using namespace std; const int N = 1001; int s[N],x[N]; int main() { int n,ss=0; cin>>n; for(int i = 1;i <=n;i ++) { cin>>s[i]; } for(int i = 1;i <=n;i ++) { cin>>x[i]; // cout<<s[i-1]<<" "<<s[i]<<" "<<x[i]<<" "; if(x[i]>(s[i]+s[i-1])) { ss += (s[i]+s[i-1]); s[i]=0; s[i-1]=0; } else { ss += x[i]; if(x[i]<s[i-1]) { s[i-1]-=x[i]; } else { s[i]+=s[i-1]; s[i]-=x[i]; s[i-1]=0; } } // cout<<ss<<endl; } cout<<ss<<endl; return 0; } ``` ### 第五题 **标题:**矩阵对角线遍历 **题目描述:**给定一个 n × n 的整数矩阵,我们将位于同一条 45 度斜线上的元素看做同一行元素。  **输入描述:**第一行输入一个整数 n(3≤n≤100),表示矩阵的大小;接下来 n 行,每行输入 n 个整数(1≤整数≤n2),表示矩阵中的元素,整数之间以一个空格隔开。 **输出描述:**一行输出 n * n 个整数,表示按照题目要求遍历矩阵的结果,整数之间以一个空格隔开。 **样例输入:** 3 1 2 3 4 5 6 7 8 9 **样例输出:** 1 2 4 7 5 3 6 8 ```cpp #include <iostream> using namespace std; const int N = 100; int a[N][N]; int main() { int n; cin>>n; for(int i =0;i<n;i++) { for(int j =0;j<n;j++) { cin>>a[i][j]; } } int i = 0,j = 0,dir = 1; for(int k = 0;k < n*n;k++) { cout<<a[i][j]<<" "; if(dir) { if(i == 0) { dir = 0; j++; if(j==n) { j = n-1; i++; } continue; } if(j == n-1) { dir = 0; i++; continue; } i--; j++; } else { if(j == 0) { dir = 1; i++; if(i==n) { i--; j++; } continue; } if(i == n-1) { dir = 1; j++; continue; } i++; j--; } } return 0; } ```
admin
2025年12月5日 09:29
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码