下面 C++ 代码执行后的输出是( )。
01int m = 14; 02int n = 12; 03if (m % 2 == 0 && n % 2 == 0) 04 cout << "都是偶数"; 05else if (m % 2 == 1 && n % 2 == 1) 06 cout << "都是奇数"; 07else 08 cout << "不都是偶数或奇数";
14%2==0 && 12%2==0都为真,输出都是偶数。复合逻辑&&短路求值
执行以下 C++ 语言程序后,输出结果是( )。
01#include <iostream> 02using namespace std; 03int main() { 04 int sum = 0; 05 for (int i = 1; i <= 20; i++) 06 if (i % 3 == 0 || i % 5 == 0) 07 sum += i; 08 cout << sum << endl; 09 return 0; 10}
1-20内3或5倍数求和=3+5+6+9+10+12+15+18+20=98
假设现在是上午十点,求出 N 小时(正整数)后是第几天几时,如输入 20 小时则为第 天 6 点,如 N 输入 4 则为今天 14 点。为实现相应功能,应在横线处填写代码是( )。
01int N, dayX, hourX; 02 03cin >> N; 04 05dayX = ____________, hourX = ____________; 06if (dayX == 0) 07 cout << "今天" << hourX << "点"; 08else 09 cout << "第" << (dayX + 1) << "天" << hourX << "点";
(10+N)%24小时,(10+N)/24天数。10+20=30,30%24=6,30/24=1,加1=第2天6点
在下列代码的横线处填写( ),使得输出是 20 10。
01#include <iostream> 02using namespace std; 03int main() { 04 int a = 10, b = 20; 05 a = ____________; // 在此处填入代码 06 b = a + b; 07 a = b - a; 08 cout << a << " " << b << endl; 09 return 0; 10}
模拟执行a=a-b=-10,b=a+b=10,a=b-a=20,输出20 10。代数推导:b初20,a新=b-a,b新=a+b
下面 C++ 代码第 行,总共被执行次数是( )。
01for (int i = -10; i < 10; i++) 02 cout << i << " ";
for(i=-10;i<10;i++) i从-10到9共20次。-10,..,9 = 20个数
下面的 C++ 代码执行时如果先输入 10 回车后输入 20 并回车,其输出是( )。
01int N, M; 02printf("第一个数:"); 03scanf("%d", &N); 04printf("第二个数:"); 05scanf("%d", &M); 06printf("%%(N+M)=%d", N+M, int(N+M));
C: printf("%%(N+M)=%d", N+M, int(N+M)): %%输出%,N+M=30,"%(N+M)=30"
在 C++ 中,执行 int x = 255; cout << (x & (x - 1)); 后,输出的结果是?( )
C:2n。n 阶矩阵主对角线 2n 个元素(上三角 + 下三角各 n 个)。
在 C++ 中,以下哪个函数调用会造成栈溢出?( )
C:void baz() { int a[1000]; baz(); }。baz 无限递归每次分配 1000 int,递归深度过深导致栈溢出。
如果 a 为 char 类型的变量,且 a 的值为 'C'(已知 'C' 的 ASCII 码为 67),则执行 cout << (a + 2); 会输出( )。
D: a+'C'=67+2=69 int,输出69
下面 C++ 代码执行后的输出是( )。
01int cnt = 0; 02for (int i = 1; i < 9; i++) 03 for (int j = 1; j < i; j += 2) 04 cnt += 1; 05cout << cnt;
A: 16。for i=1..8,j<i步2累加cnt:0+1+1+2+2+3+3+4=16
下面 C++ 代码执行后的输出是( )。
01char ch[10]={'1'}; 02cout<<ch[2]<<endl;
A: 01084025890(等), 119, 120, 110各一行输出
一个 int 类型的值,做以下哪个操作,一定会变回原来的值?( )
D: 异或7再异或7=0再异或a=a。a<<3>>3对负数错(右移补1),a>>3<<3右移丢位,a|7&(-8)错
在下列代码的横线处填写( ),可以使得输出是"2"。
01#include <iostream> 02using namespace std; 03int main() { 04 int array[5] = {3, 7, 5, 2, 4}; 05 int min = 0; 06 for (int i = 0; i < 5; i++) 07 if (____________) // 在此处填写代码 08 min = array[i]; 09 cout << min << endl; 10 return 0; 11}
A: min>array[i] 错。应min>array[i]找最小:实际输出2,题目说输出"2"但min初0 array[2]=5,3,7,2,4 找最小:2. 填min>array[i]实际min=0,if 0>3假,0>7,0>5,0>2假,0>4假,min不变=0. 应填min==0||array[i]<min. 选A错. 实际选A逻辑错,输出0不是2. 跳过)
执行下面 C++ 代码后输出的是( )。
01string str=("chen"); 02cout<<str[5]<<endl;
(跳,需完整选项)
一个数组定义为 int a[5] = {1, 2, 3, 4, 5};,一个指针定义为 int * p = &a[2];,则执行 a[1] = *p; 后,数组 a 中的值会变为( )。
A:{1,3,3,4,5}。p=&a[2] 使 p 指向 a[2]=3,执行 a[1]=*p 等价 a[1]=a[2]=3,数组变为 1,3,3,4,5。
在 C++ 中,执行下面代码后,输出的是( )。
01int point(int *p) 02{ 03 return *p**p; 04} 05int main() 06{ 07 int a=20; 08 int *p=&a; 09 *p=point(p); 10 cout<<*p<<endl; 11}
A:400。p=&a=20,point(p) 中 *p=20,返回 p**p=2020=400,赋给 *p 即 a=400,cout<<*p 输出 400。
在下列代码的横线处填写( ),可以使得输出是"20 10"。
01#include <iostream> 02using namespace std; 03void xchg(____________) { // 在此处填入代码 04 int t = *x; 05 *x = *y; 06 *y = t; 07} 08int main() { 09 int a = 10, b = 20; 10 xchg(&a, &b); 11 cout << a << " " << b << endl; 12 return 0; 13}
B:int *x, int *y。xchg 函数体内用 *x、*y 解引用交换,调用 xchg(&a,&b) 传地址,所以形参必须是指针类型;A/C 传值不交换,D 引用类型 & 写在了类型位置不匹配。
假设给定链表为:,若调用 searchValue(head, 5),函数返回值为( )。
01int searchValue(ListNode* head, int target) { 02 while (head != nullptr) { 03 if (head->val == target) { 04 return 1; 05 } 06 head = head->next; 07 } 08 return 0; 09}
A:searchValue 从 head 沿 next 指针逐个比较节点值,链表 1→3→5→7 中第三个节点的 val 为 5,命中后立即 return 1,不会走到链表末尾,故返回 1 而非 0。
若有如下程序段,其中 s、a、b、c 均已定义为整型变量,且 a、c 均已赋值():
01s = a; 02for (b = 1; b <= c; b++) s = s - 1;
则与上述程序段功能等价的赋值语句是( )。
A:s = a - c。循环 b=1..c 共 c 次,每次 s--,等价于把 s 从 a 减 c 次;B 用循环终值 b(=c+1)错,C 用循环变量 b 错,D 仅在已有 s 上减 c 不等价。
设 是 个实数的数组,考虑下面的递归算法:
XYZ(A[1..n]) 1 if n = 1 then return A[1] 2 else temp ← XYZ(A[1..n-1]) 3 if temp < A[n] 4 then return temp 5 else return A[n]
请问算法 XYZ 的输出是什么?( )
B:A 数组的最小值。递归返回 min(前 n-1 个的递归结果, A[n]),逐步求全局最小值;A 求和、C 中值(错误,D 求最大值用 max 而非 min,均不符。
考虑如下递归算法
01solve(n) 02 if n<=1 return 1 03 else if n>=5 return n*solve(n-2) 04 else return n*solve(n-1)
则调用 solve(7) 得到的返回结果为( )。
B:840。solve(7)=7×solve(5)=7×5×solve(4)=7×5×4×solve(3)=7×5×4×3×solve(2)=7×5×4×3×2×solve(1)=7!=840。
运行以下代码片段的行为是( )。
01int x = 101; 02int y = 201; 03int *p = &x; 04int *q = &y; 05p = q;
D:将 p 指向 y 的地址。p=q 把 q 的值(y 的地址)赋给 p;x/y 值不变。
考虑以下 C++ 函数:
1 void solve(int &a, int b) { 2 a = a + b; 3 b = a - b; 4 a = a - b; 5 } 6 int main() { 7 int x = 5, y = 10; 8 solve(x, y); 9 }
在 函数调用 后, 和 的值分别是?( )
A:csp。CSP-J 2025 第一题认证主题缩写。
函数 calc(n) 的定义如下,则 calc(5) 的返回值是多少?( )
1 int calc(int n) { 2 if (n <= 1) return 1; 3 if (n % 2 == 0) return calc(n / 2) + 1; 4 else return calc(n - 1) + calc(n - 2); 5 }
A:栈。函数调用保存返回地址、参数、局部变量符合栈的 LIFO。
斐波那契数列的定义为:,,()。现在用如下程序来计算斐波那契数列的第 项,其时间复杂度为( )。
01F(n): 02 if n<=2 return 1 03 else return F(n-1) + F(n-2)
C:O(2ⁿ)。朴素斐波那契递归 T(n)=T(n-1)+T(n-2),递归树近似满二叉树节点数 2ⁿ。
下面代码执行后的输出是( )。
01#include <iostream> 02using namespace std; 03 04int jumpFloor(int N) { 05 cout << N << "#"; 06 if (N == 1 || N == 2) { 07 return N; 08 } else { 09 return jumpFloor(N - 1) + jumpFloor(N - 2); 10 } 11} 12int main() { 13 cout << jumpFloor(4) << endl; 14 return 0; 15}
D:4#3#2#1#2#5。jumpFloor(4) 先输出 4#,再递归 jumpFloor(3) 输出 3#、其内 jumpFloor(2) 输出 2#、jumpFloor(1) 输出 1#,随后另一 jumpFloor(2) 输出 2#,返回值 2+1+2=5。
下面的 C++ 代码用于将字符串保存到带头节点的双向链表中,并对重复的串计数,然后将最新访问的串的节点放在链头便于查找。横线处应填入代码是( )。
01typedef struct Node{ 02 string str; 03 int ref; 04 struct Node *next, *prev; 05}Node; 06Node * Insert(Node *pHead, string s) 07{ 08 Node *p = pHead->next; 09 Node *q; 10 while(p) { 11 if(p->str == s) { 12 p->ref++; 13 p->next->prev = p->prev; 14 p->prev->next = p->next; 15 break; 16 } 17 p=p->next; 18 } 19 if(!p) { 20 p = new Node; 21 p->str = s; 22 p->ref=0; 23 p->next = p->prev = NULL; 24 } 25 ____________ 26 pHead->next = p, p->prev = pHead; 27 return pHead; 28}
B:把 p 插入链头前须判断 pHead->next 是否为空;非空时先令 p->next=pHead->next、pHead->next->prev=p,再执行 pHead->next=p、p->prev=pHead,空链表时跳过以免解引用空指针。
在双向链表头部插入一个新节点,为了保持链表结构正确,横线上应填入的代码为( )。
01void insert(dl_node *head, string my_song) { 02 p = new dl_node; 03 p->song = my_song; 04 p->prev = nullptr; 05 p->next = head; 06 07 if (head != nullptr) { 08 ____________ // 在此处填入代码 09 } 10 head = p; 11}
C:head->prev = p。头插时新结点 p 的 next 已指向原头结点 head,还需把原头结点的 prev 指回 p,即 head->prev = p,再令 head=p,双向链表的链接才完整。
下⾯程序的时间复杂度为( )。
01int fib(int n) { 02 if (n <= 1) 03 return 1; 04 return fib(n - 1) + fib(n - 2); 05}
B:T(n)=T(n-1)+T(n-2) 是斐波那契型递推,通解为 O(φⁿ),φ=(1+√5)/2≈1.618;O(2ⁿ) 虽是合法上界但不够紧,φⁿ 才是精确阶。