CCF-GESP 等级考试 2026年3月认证C++二级真题解析

1 单选题(每题 2 分,共 30 分)

第1题 2026年春节联欢晚会上一个武术表演节目《武 BOT》。节目中多个人形机器人会表演空翻,它们落地可能会 有微微踉跄,但都会迅速调整姿态站稳,并适当移动来和前后左右的其他机器人保持原来队列。如果将机器人视作 一个计算机系统,那么在该计算机系统中下面哪一项不能作为输入设备( )。

A. 检测重心的重力传感器 B. 预装的AI算法程序

C. 接收动作指令的遥控器 D. 拍摄其他机器人的摄像头

解析:答案B。传感器、键盘、鼠标、遥控器、游戏杆、摄像头、麦克风等是输入设备,屏幕、打印机等中输出设备。算法程序是软件不属于输入输出设备,所以B错误。故选B。

第2题 下面代码用来找出输入的N个正整数中最大的一个。如果将代码段用流程图来表示,则 L1 标记的代码行应该使用的图形是( )。

cpp 复制代码
int N, max=0, val;
cin >> N;

while(N){
    cin >> val;
    if(val > max)   // L1
        max = val;
    N--;
}

cout << max;

A. 圆形框 B. 椭圆形框 C. 平行四边形框 D. 菱形框

解析:答案D。L1处if(val > max) 为条件语句,流程图为菱形框。故选D。

第3题 下面 C++ 代码可以执行,有关说法正确的是( )。

cpp 复制代码
double PI = 3.1415926;
cout << (PI);

A. 为了方便初学者, cout << (PI) 和 cout << (pi) 效果相同,即变量的大小写不敏感

B. cout << (PI) 修改为 cout << (Pi) 能正常执行

C. 不能用 PI 做变量名,因为要保存圆周率这个常量

D. 将程序中全部 PI 都改写为 Pai ,将能正常执行,不会报错

解析:答案D。C++/C变量名是大小写敏感的,即大小写是不同不变量,因此PI、Pi、pi是三个不同的变量,故A、B错误,PI符合C++/C变量名命名规则,可以赋常数,故C错误。变量名可以是PI,也可以是Pai,两者都符合C++/C变量名命名规则,所以D正确。故选D。

第4题 下面选择项中,与C++表达式 !(x > 5 && y <= 10) 等价的是( )。

A. x <= 5 && y > 10 B. x > 5 || y <= 10

C. x <= 5 || y > 10 D. ! x > 5 && ! y <= 10

解析:答案C。!(x > 5 && y <= 10)= !(x > 5) || !(y <= 10) = x <= 5 || y > 10,所以C正确。故选C。

第5题 某同学执行C++代码 cout << ((0.1 + 0.2) == 0.3) 时输出 0 ,下面最可能的原因是( )。

A. C++的 + 运算符在处理小数时存在bug

B. 0.1、0.2 和 0.3 在计算机中无法用二进制浮点数精确表示,导致 0.1 + 0.2 的结果与 0.3 存在微小误差

C. == 运算符不能用于比较浮点数,只能用于整数

D. 因为 0.1 + 0.2 的数学结果不等于 0.3

解析:答案B。C++的 + 运算符在处理小数时不存在bug,A错误;由于二进制表示小数时位数有限(float23位,double52位),导致表示二进制小数时会存在误差,凡不能用有限位二进制(精度)精确表示的数就会存在舍入而导致误差,所以B正确;==不只能用于比较整数,C错误;0.1+0.2的数学结果等于0.3,D错误。故选B。

第6题 下面的 C++ 代码段执行后其输出是( )。

cpp 复制代码
tnt = 0;
for (int i = 0; i < 5; i++){
    for (int j = 0; j < i; j++)
        tnt += 1;
    cout << tnt << "#";
}
cout << tnt;

A. 0#1#3#6#10#10 B. 1#2#3#4#5#6#7#8#9#10#10

C. 10#10 D. 10

解析:答案A。当i=0时,j循环不能执行,tnt=0,输出0#;当i=1时,j循环执行一次,tnt=1,输出1#;当i=2时,j循环执行二次,tnt=3,输出3#;当i=3时,j循环执行三次,tnt=6,输出6#;当i=4时,j循环执行四次,tnt=10,输出10#。循环结束tnt=10,第7行输出10,故合并输出为0#1#3#6#10#10,A正确。故选A。

第7题 下面的 C++ 代码执行之后的输出是( )。

cpp 复制代码
for ( int i = -2; i < 2; i++)
    if (not i % 3)
        cout << i << "#";

A. 0# B. -2#-1#1# C. -1#0# D. -2#0#1#

解析:答案A。注意C++/C中运算符not优先级高于%,当i=-2时,-2为非0,逻辑为ture, not i为逻辑false,等价为0,所以not i % 3=0,没有输出;所以只要i非0,无输出。当i=0时,i为逻辑为false, not i为逻辑ture,等价为1,所以not i % 3=1,等价为真,输出0#,所以A正确。故选A。

第8题 下面的 C++ 代码执行后其输出是( )。

cpp 复制代码
int cnt = 0, i, j;
for (i =1; i < 5; i++){
    for (j =0; j < i; j++)
        cout << j << "#";
    break;
}
if(i >= 5)
    cout << (i*j);

A. 0#0#1#0#1#2#0#1#2#3#12 B. 0#0#1#0#1#2#0#1#2#3#

C. 0# D. 1#

解析:答案C。当外循环i=1时,内循环执行1次,输出0#,然后执行第5行break,中断外循环(跳出外循环),因i=1,第7行条件不成立没有输出i*j,合计输出0#,所以选项C正确。故选C。

第9题 下面 C++ 代码执行后其输出是( )。

cpp 复制代码
int count = 0;
for (int i = 1; i < 4; i++)
    for (int j = 1; j < 5; j++){
        if (j == 3)
            continue;
        if (i == 2)
            break;
        count += 1;
    }
cout << (count);

A. 2 B. 4 C. 6 D. 8

解析:答案C。当i=1时,count+=1执行3次,count=3;当i=2时,当j为1时,j==3不成立,i==2成立,结束j循环;当i=3时count+=1执行3次,count=6。循环结束后输出count的结果为6,所以C正确。故选C。

第10题 下面4个选项中,与下面 C++ 代码段具有相同效果的是( )。

cpp 复制代码
i = 0;
while (i < 5){
    cout << i;
    i += 1;
}

A.

cpp 复制代码
for (i = 0; i < 5; i++)
    cout << i;

B.

cpp 复制代码
for (i = 1; i < 5; i++)
    cout << i;

C.

cpp 复制代码
for (i = 0; i < 6; i++)
    cout << i;

D.

cpp 复制代码
for (i = 1; i < 6; i++)
    cout << i;

解析:答案A。原程序循环5次,先输出i再i加1,故输出01234。选项A,i从0循环到4也是5次,输出01234,故正确;选项B,i从1循环到4是4次,输出1234,故正错误;选项C,i从0循环到5也是6次,输出012345,故错误;选项D,i从1循环到5是5次,输出12345,故错误。故选A。

第11题 下面 C++ 代码执行后输出是( )。

cpp 复制代码
int n = 10;
while (n > 0){
    n -= 1;
    if (n % 3 == 0)
        continue;
    if (n == 5)
        break;
}
cout << n;

A. 0 B. 5 C. 6 D. 7

解析:答案B。因第4行n是3的倍数continue到下一轮循环,当循环n=6时,n-=1,n=5,第4行条件不成立,执行第6行,条件成立执行break,中断循环而跳出循环,此时n=5,第9行输出5。故选B。

第12题 下面 C++ 代码段执行后,其输出是( )。

cpp 复制代码
int i, j, cnt;
cnt = 0;
for (i = 0; i < 5; i++){
    i = -i;
    for (j = i; j < -i; j++)
        cnt += 1;
    i = -i;
}
cout << cnt;

A. 5 B. 15 C. 20 D. 30

解析:答案C。当外层循环i=0时,i=-i=0,内层循环不执行,cnt=0;当外层循环i=1时,i=-i=-1,内层循环执行2次,cnt=2;当外层循环i=2时,i=-i=-2,内层循环执行4次,cnt=6;当外层循环i=3时,i=-i=-3,内层循环执行6次,cnt=12;当外层循环i=4时,i=-i=-4,内层循环执行8次,cnt=20。故选C。

第13题 某学校图书馆的借阅卡号由6位整数组成。前5位是顺序编号,第6位是校验码,用于防止输错。校验码规则如下:将前5位数字相加,然后除以10的余数,就是第6位数字。如卡号 123455 的前5位之和为 15 ,除以 10 的余数是5,故第6位为5。下面的C++代码段用于判断卡号是否正确,横线处应填入的代码是( )。

cpp 复制代码
cout << "请输入卡号:";
cin >> N;
order_num = N / 10; // 获得前5位顺序号,假设录入一定为6位正整数
check_num = N % 10; // 获得最后一位

tnt = 0; // 保存前5位之和
for (i = 0; i < 5; i++){
    ________________;
    order_num /= 10;
}

if (__________________)
    cout << "符合校验规则";
else
    cout << "不符合校验规则";

A.

cpp 复制代码
tnt += order_num / 10
tnt / 10 == check_num

B.

cpp 复制代码
tnt += order_num % 10
tnt % 10 == check_num

C.

cpp 复制代码
tnt = order_num / 10 + tnt
tnt % 10 == check_num

D.

cpp 复制代码
tnt = order_num % 10
tnt / 10 == check_num

解析:答案B。按题目描述,第8行应该取每1位数求和,故应填写tnt = tnt + order_num % 10; ,第12行比较计算的校验和tnt % 10与输入的最后一位check_num是否相等,相等符合校验规则,故应填写tnt % 10 == check_num,选项B符合。故选B。

第14题 下面的 C++ 代码段正常执行后其输出的数字图形是( )。

cpp 复制代码
for (i = 1; i < 5; i++){
    for (j = 1; j < i+1; j++)
        cout << j;
    cout << endl;
}

A.

cpp 复制代码
1
12
123
1234

B.

cpp 复制代码
1
22
333
4444

C.

cpp 复制代码
1
21
321
4321

D.

cpp 复制代码
4
34
234
1234

解析:答案A。根据程序内层循环j是从1到i+1且j++,即从1开始到大输出一行,故B、C、D排除。当外循环i=1时,内循环输出1;当外循环i=2时,内循环输出12;当外循环i=3时,内循环输出123;当外循环i=4时,内循环输出1234,与选项A一致。故选A。

第15题 某学校举办"校园演讲比赛",每位选手由8位评委打分(分数为 0~10 的整数),且每位评委必须打分。计分规则:若至少有5位评委给出大于等于6分,则成绩有效,最终得分为所有8位评委的总分;如给出低于6分的评委数量超过5位,则记为0分。以下核心程序段依次输入8个分数,并计算最终得分。横线处应填入( )。

cpp 复制代码
total_score = 0; // 所有分数之和
high_count = 0; // ≥6分的评委数量

for (i = 0; i < 8; i++){
    cout << "请输入评委分数: ";
    cin >> score;
    ____________________;
    if (score >= 6)
        ________________;
}

if (high_count >= 5)
    cout << total_score;
else
    cout << 0;

A.

cpp 复制代码
total_score += score
high_count += 1

B.

cpp 复制代码
total_score += score
high_count += score

C.

cpp 复制代码
high_count += 1
total_score += score

D.

cpp 复制代码
total_score *= score
high_count *= 1

解析:答案A。根据程序分别读入8位评委的打分数,求总分(保存于total_score),如评委评分大于6分计数(保存于high_count)。当计分大于等于5时输出总分,否则输出0。故第7行求和填写total_score += score,第9行计数填写high_count++(或high_count += 1),选项A符合。故选A。

2 判断题(每题 2 分,共 20 分)

第1题 小明的妈妈最近刚刚给他买了一块电话手表,除了可以看时间,小明也可以用它和妈妈打电话、收发信息,那么可以推测这块手表中装有一款特定操作系统。( )

解析:答案正确(√)。可以看时间、打电话和收尾信息的电话手表,属智能手表,需要安装智能手表操作系统。故正确。

第2题 C++ 语句 cout << ('4' % '2' == '2' * '2' % 2); 执行后的输出是1。( )

解析:答案错误(╳)。'4'和'2'是字符类型,等价单字节整数(即ASCII码值,也等同UNICODE码值),'4'等价52、'2'等价50,所以'4' % '2' == '2' * '2' % 2等价52 % 50 == 50 * 50 % 2,即2 == 0,结果为否,输出0。故错误。

第3题 下面的 C++ 代码段执行时将报错,因为10是整数类型, a 是布尔类型。由于类型不同,不能进行加法运算。( )

cpp 复制代码
bool a = true;
cout << (10 + a);

解析:答案错误(╳)。C++/C布尔类型true默认等价为整数1,代码可正确运行,输出11。故错误。

第4题 下面C++代码段执行后将输出 0-3-6-9- 。 ( )

cpp 复制代码
for (int i = 0; i < 10; i++){
    if (i % 3)
        continue;
    cout << i << "-";
}

解析:答案正确(√)。数字0等价逻辑false,数字1等价逻辑true,所以i%3作为条件时,i能被3整除为0等价条件不成立,否则i不能被3整除则条件成立。对题目所给程序,i不是3的倍数,则continue,回到循环开始进入下一轮循环(相当于跳过本循环从continue之后的语句)不执行第4行cout语句。只有i是3的整数倍的i能输出,输出为0-3-6-9-,故正确。

第5题 执行下面的 C++ 代码段,如果N是基本数据类型,则语句 cout << (N); 将被执行 0 次或无数次(即死循环)。( )

cpp 复制代码
cin >> N;
while (N)
    cout << (N);

解析:答案正确(√)。GESPC++二级所学的基本数据类型包括:整型、浮点型、字符型、布尔型,都属于数值类型或等价数值类型。当N为0或等价为0时,条件不成立,cout << (N)执行0次;当N不为0或等价不为0时,条件成立,因没有改变N的语句,N不变,所以会无限循环,无数次执行cout << (N),即"死循环"。故正确。

第6题 下面的 C++ 代码段可正常执行,删除 continue 不影响执行效果。( )

cpp 复制代码
for (i = 0; i < 10; i++){
    i += 1;
    continue;
}
cout << (i);

解析:答案正确(√)。题目所给程序的continue语句行位于循环体的最后一行,有没有continue语句行,都执行了全部循环体的有效语句,不影响执行结果(效果),故正确。

第7题 下面的 C++ 代码段用于计算1到N之间且包含N的所有数字中含有的3的个数,如1到40含有14个3, 而1到20则只含有2个3。如果将 while (i != 0) 改为 while (abs(i)) ,则执行结果相同。( )

cpp 复制代码
cout << "请输入正整数N:";
cin >> N;
cnt = 0; // 保存3的个数
for (k = 1; k < N + 1; k++){
    i = k;
    while (i != 0){
        if (i % 10 == 3)
            cnt += 1;
        i /= 10;
    }
}
cout << cnt;

解析:答案正确(√)。C++/C中abs()为取绝对值函数,对数字0等价逻辑假,数字非0等价逻辑真,所以(i !=0)等价于(i)等价(abs(i))。故正确。

第8题 下面的 C++ 代码段执行将不会有输出,因为内层循环 j 总是 0 开始, i * j % 10 == 0 将会被满足,执行 break ,故而 i 小于 10 ,不会满足 if 判断条件。( )

cpp 复制代码
for (i = 1; i < 10; i++)
    for (j = 0; j < i; j++)
        if (i * j % 10 == 0)
            break;
if(i >= 10)
    cout << (i*j);

解析:答案错误(╳)。题目拨给程序中,虽然内层循环j总是0开始,i * j % 10 == 0将会被满足,执行break,但结束循环时i=10,j=0,第5行条件I >= 10成立,会输出0。故错误。

第9题 下列 C++ 代码执行后将输出 1#4#9#16#16 。( )

cpp 复制代码
cnt = 0;
for (i = 1; i < 5; i++){
    for (j = 1; j < i + 1; j++)
        if (i * j % 10 == 0)
            break;
    if (j >= i + 1)
        cout << (i * j) << "#";
}
if(i >= 5)
    cout << (i * j);

解析:答案错误(╳)。题目拨给程序中,外层循环i从1到4,内层循环j从1到i,i*j%10 不可能为0,所以不会执行break,内循环每次结束j=i+1成立,所以输出i*j=i*(i+1),最后一轮i=4时内循环结束j=5,当外循环结束时i=5,所以正确输出为2#6#12#20#25。故错误。

第10题 下面 C++ 代码执行后输出如左图所示,将 " %d" 修改为 "%3d" 即可实现右图输出。( )

cpp 复制代码
/*
  // 左图                      // 右图
 1 2 3 4 5 6 7 8 9            1   2   3   4   5   6   7   8   9
 2 4 6 8 10 12 14 16 18       2   4   6   8  10  12  14  16  18
 3 6 9 12 15 18 21 24 27      3   6   9  12  15  18  21  24  27
 4 8 12 16 20 24 28 32 36     4   8  12  16  20  24  28  32  36
 5 10 15 20 25 30 35 40 45    5  10  15  20  25  30  35  40  45
 6 12 18 24 30 36 42 48 54    6  12  18  24  30  36  42  48  54
 7 14 21 28 35 42 49 56 63    7  14  21  28  35  42  49  56  63
 8 16 24 32 40 48 56 64 72    8  16  24  32  40  48  56  64  72
 9 18 27 36 45 54 63 72 81    9  18  27  36  45  54  63  72  81
*/

for (i = 1; i < 10; i++){
    for (j = 1; j < 10; j++)
        printf(" %d", i*j);
    printf("\n");
}

解析:答案正确(√)。" %d" 中的‌空格是普通字符‌,会‌原样输出‌到终端。%d 是‌格式说明符(占位符)‌,用于指示 printf 将后续参数按‌十进制有符号整数的形式输出。所以输入的数字前会多一个空格。因i*j的结果从1(1位)到81(2位),所以数字1~81不会按列对齐,如题目中的左图。

"%3d"的组成与含义:‌%‌:格式说明符的起始标志。‌3‌:指定‌最小字段宽度‌(即输出至少占 3 个字符宽度),如果输出的整数位数小于3,则‌左侧补空格‌(默认右对齐,如果输出的整数位数≥3,则‌按实际位数输出‌,不截断。‌d‌:表示‌按十进制有符号整数的形式输出。因i*j的结果从1(1位)到81(2位),所以数字1~81会按列对齐(每个数占3位),如题目中的右图。故正确。

但题目是有瑕疵的,右图明显是每个数占4位,是" %3d"的输出而不是"%3d"的输出。

3 编程题(每题 25 分,共 50 分)

3.1 编程题 1
  • 试题名称:数数
  • 时间限制:1.0 s
  • 内存限制:512.0 MB

3.1.1题目描述

对于正整数𝑛,如果𝑛的所有数位中包含恰好 3个2,Alice 会认为这个正整数是美丽的。例如,正整数24122中包含3个2,所以24122 美丽的;正整数132中包含1个2,所以132不是 美丽的;正整数212322中包含4个2,所以212322不是美丽的。

Alice 想知道正整数𝐿到正整数𝑅(包括𝐿和𝑅)中有多少美丽的正整数,你能帮她数一数吗?

3.1.2 输入格式

输入共2行,第一行为正整数𝐿,第二行为正整数𝑅。

3.1.3 输出格式

输出一行,包含一个整数𝐶,表示𝐿到𝑅中𝐶美丽数的数量。

3.1.4 样例

3.1.4.1 输入样例

cpp 复制代码
2221
2223

3.1.4.2 输出样例

cpp 复制代码
2

3.1.5 样例解释

2221到2223中,2221与2223是美丽的,2222不是美丽的。

3.1.6 数据范围

保证1≤𝐿≤𝑅≤10⁶。

3.1.7 编写程序

解析:要判断一个数N有多个2,可以取其每一位进行判断,取个位可用N%10,个位判断过了就去掉个位,用N/=10,新N的个位即原十位,循环操作直到N=0。

n从L循环到R,用上述方法判断每个n中2的个数,如是3个2则计数。参考代码如下:

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
       int L = 0, R = 0, cnt = 0; // L≤L≤10⁶, cnt美丽的正整数个数
       cin >> L >> R;
       for (int i = L; i <= R; i++) { // 包含L和R
              int s = 0, n = i;   // s为n中2的个数
              while (n) {
                     if (n % 10 == 2) s++;  // 如n的个位数为2则计数
                     n /= 10;     // 更新n(去掉已处理的个位)
              }
              if (s == 3) cnt++;  // 如s为n中2的个数s=3则美丽数计数
       }
       cout << cnt << endl;
       return 0;
}
3.2 编程题2
  • 试题名称:画画
  • 时间限制:1.0 s
  • 内存限制:512.0 MB

3.2.1题目描述

输入一个正整数𝑛,你需要绘制一个𝑛行𝑛列的正方形,绘制规则如下:

正方形的四个顶点使用 + 绘制;

除顶点外,第1行与第𝑛行使用 - 绘制;

除顶点外,第1列与第𝑛列使用 | 绘制;

正方形内部使用 * 绘制。

3.2.2 输入格式

一行,一个正整数𝑛。

3.2.3 输出格式

输出共𝑛行,表示对应的正方形。

3.2.4 样例

3.2.4.1 输入样例

cpp 复制代码
5

3.2.4.2 输出样例

cpp 复制代码
+---+
|***|
|***|
|***|
+---+

3.2.5 数据范围

保证3≤𝑛≤100。

3.2.6 编写程序

解析:设行i从1到n,列j从1到n。①四个角(i=1, j=1)、(i=1, j=n)、(i=n, j=1)、(i=n, j=n)。②除顶点外的第1行或第𝑛行(i=1, i=n)。③除顶点外的第1列或第𝑛列(j=1, j=n)

方法一:

①四个角的条件(i=1 && j=1) || (i=1 && j=n) || (i=n && j=1) || (i=n && j=n),满足这个条件之一的输出+。

②除顶点外的第1行或第𝑛行条件(i=1 || i=n),满足条件的输出-。

③除顶点外的第1列或第𝑛列条件(j=1 || j=n),满足条件的输出|。

其他输出*。参考代码如下:

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    int n; // 3≤n≤100
    cin >> n;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            if ((i == 1 && j == 1) || (i == 1 && j == n) || (i == n && j == 1) || (i == n && j == n))
                cout << "+";    // 四个角输出"+"
            else {
                if ((i == 1 || i == n) || (j == 1 || j == n))
                    if (i == 1 || i == n)cout << "-"; // 第1、n行输出"-"
                    else cout << "|";   // 第1、n列输出"|"
                else
                    cout << "*";        // 其他输出"*"
            }
        }
        cout << endl;    // 换行
    }
    return 0;
}

方法二:

换个角度看问题。从行看:第1行和第n行的第1列为+,其余列为-,其他行的第1列和第n列为|,其余列为*。参考代码如下:

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    int n; // 3≤n≤100
    cin >> n;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            if (i == 1 || i == n)   // 第1行和第n行的
                if (j == 1 || j == n)
                    cout << "+";    // 第1列和第n列输出"+"
                else cout << "-";   // 其他列输出"-"
            else {
                if (j == 1 || j == n) // 其他行的
                    cout << "|";    // 第1列和第n列输出"|"
                else cout << "*";    // 其他列输出"*"
            }
        }
        cout << endl;    // 换行
    }
    return 0;
}
相关推荐
2301_776508721 小时前
分布式系统监控工具
开发语言·c++·算法
Irissgwe1 小时前
Linux进程信号
linux·服务器·开发语言·c++·linux进程信号
暮冬-  Gentle°1 小时前
C++与区块链智能合约
开发语言·c++·算法
Oueii2 小时前
C++中的代理模式实现
开发语言·c++·算法
艾莉丝努力练剑2 小时前
【Linux:文件 + 进程】理解IPC通信
linux·运维·服务器·开发语言·网络·c++·ide
山上三树2 小时前
C++ 回调函数(Callback Function)详解
开发语言·c++
学嵌入式的小杨同学2 小时前
STM32 进阶封神之路(二十四):低功耗实战全攻略 —— 电池供电传感器节点(RTC 唤醒 + DHT11 采集 + 功耗优化)
c++·stm32·单片机·嵌入式硬件·mcu·架构·硬件架构
晨非辰2 小时前
Linux终端输出哲学:从回车换行到进度条实战,掌握缓冲区刷新与ANSI控制,告别输出延迟焦虑
linux·运维·服务器·c++·人工智能·后端·自动化
C++ 老炮儿的技术栈2 小时前
Qt 开发机器人客户端程序
c语言·开发语言·c++·windows·qt·机器人