一级考纲

  • 计算机基础与编程环境
  • 变量的定义与使用
  • 基本数据类型(整型、浮点型、字符型、布尔型)
  • 输入输出语句
  • 基本运算(算术运算、关系运算、逻辑运算)
  • 控制语句结构(顺序、循环、选择)

知识点解析

1. 计算机基础知识

冯-诺依曼体系结构

采用程序存储控制原理思想

计算机系统构成

注:华为鸿蒙为操作系统

计算机发展历程

1946 年 2 月 14世界上第一台可编程的电子计算机—ENIAC。

中国第一台通用数字电子计算机于 1958年 8 月研制成功

二位奠基人

艾伦·图灵(1912年—1954年),英国数学家、逻辑学家,被称为“人工智能之父”。

冯·诺依曼(1903年—1957年),出生于匈牙利的美籍犹太人,是20世纪最著名的数学家之一,理论计算机科学和博弈论的奠基者,常被誉为“计算机之父”。

重要奖项

图灵奖(Turing Award),全称A.M.图灵奖(ACM A.M Turing Award),是由美国计算机协会(ACM)于1966年设立的计算机奖项,名称取自艾伦·麦席森·图灵(Alan M. Turing),旨在奖励对计算机事业作出重要贡献的个人 。图灵奖对获奖条件要求极高,评奖程序极严,一般每年仅授予一名计算机科学家。图灵奖是计算机领域的国际最高奖项,被誉为“计算机界的诺贝尔奖”。

真题举例

1.现代计算机是指电子计算机,它所基于的是( )体系结构。
A. 艾伦·图灵  B. 冯·诺依曼  C. 阿塔纳索夫  D. 埃克特-莫克利
2.我们通常说的“内存”属于计算机中的( )。
A. 输出设备  B. 输入设备  C. 存储设备  D. 打印设备
3.以下不属于计算机输出设备的有( )。
A. 麦克风  B. 音箱  C. 打印机  D. 显示器
4.下列软件中是操作系统的是( )。
A. ⾼德地图  B. 腾讯会议  C. 纯⾎鸿蒙   D. ⾦⼭永中
5.ENIAC于1946年投入运行,是世界上第一台真正意义上的计算机,它的主要部件都是( )组成的。
A. 感应线圈  B. 电子管  C. 晶体管  D. 集成电路
6.在Dev C++中对一个写好的C++源文件要生成一个可执行程序需要执行下面哪个处理步骤?( )
A. 创建  B. 编辑  C. 编译  D. 调试
7.C++程序执行出现错误,不太常见的调试手段是( )。
A. 阅读源代码  B. 单步调试  C. 输出执行中间结果  D. 跟踪汇编码

2.变量的定义与使用

变量的声明且赋值

#include <iostream>
using namespace std;
int main()
{
    // 定义变量并赋值
    int number = 1;
    // 访问变量
    cout << "number = " << number << endl;
}

变量名的规则

【规则1】:变量名包含字母、数字、下划线,但数字不能在变量名首位,也不能使用特殊符号,例如以下变量名:

a(合法)、a123(合法)、_xyz(合法)、2b(不合法,不能以数字开头)、@xyz(不合法,不能使用特殊符号)

【规则2】:具有特殊含义的单词不能作为变量名, 否则会报错,我们把这一类统称为关键字,它们在C++中已经代表了特定的意思,不包括(cin、cout等),例如以下单词:

do, while, for, int, if, char, long, bool , double ,false , true 等等。

注:变量必须定义才能使用,没有定义变量就使用会造成编译错误

真题举例

1.在C++中,下列可以做变量的是( )。
A. Var-1  B. $1  C. %%1   D. _Var_1
2.以下可以作为 C++标识符的是( )。
A. number_of_Chinese_people_in_millions
B. 360AntiVirus
C. Man&Woman
D. break
3.在C++代码中,不可以将变量命名为 cout ,因为 cout 是C++的关键字。
  正确   错误
4.在C++代码中,不可以将变量命名为 printf ,因为 printf 是C++语言的关键字。( )
正确  错误

3. 基本数据类型

整数类型

整数类型用于存储不带小数部分的整数值。

  • int:常用的整数类型,通常占用 4 字节,可以表示从 -2,147,483,648 到 2,147,483,647 的范围。
  • long long:用于存储大整数,通常占用 8 字节。

实数类型

浮点数类型用于存储带有小数部分的数值。

  • float:单精度浮点数,通常占用 4 字节。
  • double:双精度浮点数,通常占用 8 字节。

字符型

字符类型用于存储单个字符。

  • char:存储单个字符,通常占用 1 字节。

布尔型

布尔类型用于存储逻辑值,只有两个可能的值:true 和 false。

  • bool:用于存储 truefalse,通常占用 1 字节。

数据类型转换

将一种数据类型的值转换为另一种数据类型,分为两种:隐式类型转换和显式类型转换。

隐式类型转换是指在没有明确要求的情况下自动进行的类型转换。例如,当你将一个整数赋值给一个浮点数变量时,C++语言会自动将整数转换为浮点数。

int a = 5;
double b = 2.2;
a = b; // 隐式类型转换:将double转换为int
cout<<a;

显式类型转换是指明确要求进行类型转换,这通常是通过使用类型转换运算符完成的。

double a = 5.12;
//显式类型转换:将int转换为double
//int b = int(a); 
int b=(int)a;
cout<<b;

计算机存储单位

字节(Byte)是计算机信息中用于描述存储容量和传输容量的一种基本计量单位(不是最小的)。

bit就是位,也叫比特位,是计算机表示数据最小的单位。

通常字节是大B,位是小b。

单位名称 换算关系
字节(Byte) 1Byte=8bit
千字节(KB) 1KB=1024B
兆字节(MB) 1MB=1024KB
吉字节(GB) 1GB=1024MB
太字节(TB) 1TB=1024GB

真题举例

1.C++语言中3.03的值相等,所以它们占用的存储空间也相同。( )
 正确  错误
2.定义C++的 float 型变量 N ,则语句 cin >> N; cout << int(float(N)) 可以输入正负整数和浮点数,
并将其转换为整数后输出。( )
正确  错误
3.常量'3'的数据类型是( )。
A. double  B. float  C. char  D. int
4.计算机系统中存储的基本单位用 B 来表示,它代表的是( )。
A. Byte  B. Block  C. Bulk  D. Bit

4. 输入输出语句

  • cin(C++ 输入):

    int x;
    cin >> x;  // 从标准输入读取一个整数并赋值给 x
    
  • scanf(C 输入):

    int x;
    scanf("%d", &x);  // 从标准输入读取一个整数
    
  • cout(C++ 输出):

    int x = 10;
    cout << x << endl;  // 输出到标准输出`
    
  • printf(C 输出):

    int x = 10;
    printf("%d\n", x);  // 输出到标准输出
    
  • 保留小数位

printf("%5d\n",123);//表示输出内容不足5个字符,会在左侧部空格填充
printf("%.2lf\n",0.5);//表示保留两位小数
cout<<fixed<<setprecision(2)<<0.5;//保留两位小数
printf("5%%2");//输出 5%2  %是转义字符

以下是一些常见格式化控制符:

  • %d:读取一个十进制整数。
  • %lf:用于读取双精度浮点数。
  • %c:用于读取单个字符。
  • %s:用于读取字符串(以空格为结束标志)

真题举例

1.下面C++语句( )执行后的输出是 __ 0322{% math %} 。
A. printf("__ %2d%02d{% endmath %}", 3, 22)
B. printf("__ %02d%2d{% math %}", 3, 22)
C. printf("__ %02d%02d{% endmath %}{% math %}", 3, 22)
D. printf("____ %02d%02d{% endmath %}$$", 3, 22)
2.下面C++代码执行后的输出是( )。
int N = 10;
printf("{N}*{N}={%d*%d}", N, N, N * N);
A. 10*10={10*10}  B. 100=10   C. N*N=100   D. {N}*{N}={10*10}
3.C++语句 printf("6%2={%d}", 6%2) 执行后的输出是( )。
A. "6%2={6%2}"  B. 6%2={6%2}  C. 0=0  D. 6%2={0}
4.N是C++程序中的整型变量,则语句 scanf("%d", &N) 能接收形如正整数、负整数和0输入,但如果输入含
字母或带小数点数,将导致无法执行。 ( )
正确  错误
5.1.C++中定义整型变量N,执行语句 scanf("%d", &N); cout << N / 3 * 5; 时输入 3.6 ,则输出是6。()
正确  错误

5. 基本运算

算数运算

  • 常见的算术运算:加法(+)、减法(-)、乘法(*)、除法(/)、求余(%)。
#include <iostream>
using namespace std;
int main()
{
    // 加法
    int a = 20, b = 6;
    cout << " a + b = " << a + b << endl;
    // 减法
    cout << " a - b = " << a - b << endl;
    // 乘法
    cout << " a * b = " << a * b << endl;
    // 除法:注意 / 只保留整数部分
    cout << " a / b = " << a / b << endl;
    // 取模:两个数必须是整数类型
    cout << " a % b = " << a % b << endl;
}

注:%只能和整数运算两个整数相除,结果会舍弃小数。如果要保留小数,需要将分子或分母变为小数。

关系运算

  • 关系运算符用于比较两个值,并返回一个布尔值 (true 或 false)。常见的比较运算符有:
    1. == :等于
    2. != :不等于
    3. > : 大于
    4. < : 小于
    5. >= : 大于或等于
    6. <= : 小于或等于
// 定义布尔类型的变量来存储比较运算的结果
bool result1 = (5 < 10);             // true
bool result2 = (7 >= 8);            // false
bool result3 = (10 == 3 + 7);       // true
// 定义整型变量来存储算术计算的结果
int result4 = (1 != 2) + 1;        // 2,因为 (1 != 2) 返回 true,即 1

逻辑运算

  • 逻辑运算符用于组合多个条件表达式。主要的逻辑运算符是:
    1. &&:逻辑与(AND),所有条件都必须为真,结果才为真,同真为真,有假则假。
    2. ||:逻辑或(OR),只要有一个条件为真,结果就为真,有真则真,同假为假。
    3. !:逻辑非(NOT),反转条件的真假性
bool result = (a > 0) && (b < 10);  // 与运算
bool result = (a > 0) || (b < 10);  // 或运算
bool result = !(a > 0);  // 非运算

赋值运算

赋值运算符用于给变量赋予新值。最常用的赋值运算符是等号 =。此外,还有复合赋值运算符,它们结合了算术运算和赋值操作:

int a = 5;  // 将 5 赋值给变量 a
int b = a;  // 将变量 a 的值赋值给变量 b

自增与自减

  • ++(自增),--(自减)
a++;    // a自增,相当于 a += 1;
--b;    // b自减,相当于 b -= 1;

“前置”和“后置”区别

#include <iostream>
using namespace std;
int main() {
    int x = 3;
    int y = ++x;//先让x自增1,再将x更新后的结果赋值给y
    cout<<"x="<<x<<endl;
    cout<<"y="<<y<<endl;

    int a = 3;
    int b = a++;//先将a赋值给b,再让a自增1
    cout<<"a="<<a<<endl;
    cout<<"b="<<b<<endl;
}

三目运算符

“条件运算符”:由“?”和“:”两个符号组成,需要三个运算表达式,形式如下:

条件判断表达式 ? 表达式1 : 表达式2

条件运算符的含义是:计算条件判断表达式的值,如果为true就执行表达式1,返回求值结果;如果为false则跳过表达式1,执行表达式2,返回求值结果。

注:条件运算符等同于流程控制中的分支语句if…else…,只用一条语句就可以实现按条件分支处理,这就让代码更加简洁。

运算符优先级

运算符优先级决定了表达式中运算符的计算顺序。高优先级的运算符会先于低优先级的运算符进行计算。

可以通过括号来改变默认的优先级顺序。以下是一些常见运算符的优先级(从高到低)

逻辑非 ! > 算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符

类别 运算符 结合性
后缀 () [] -> . ++ - - 从左到右
一元 ! 从右到左
乘除 * / % 从左到右
加减 + - 从左到右
关系 < <= > >= 从左到右
相等 == != 从左到右
逻辑与 AND && 从左到右
逻辑或 OR | | 从左到右
条件 ? : 从右到左
赋值 = += -= *= /= %= 从右到左
逗号 , 从左到右

真题举例

1.C++表达式 12 - 3 * 2 && 2 的值是( )。
A. 0  B. 1  C. 6  D. 9
2.N是C++的正整数,值为12,则 cout << (N % 3 + N / 5) 的输出是( )。
A. 6.4  B. 2.4  C. 6   D. 2
3. C++语言中, int 类型的变量 x 、 y 、 z 的值分别为 246 ,以下表达式的值为真的是( )
   A: x > y || x > z  B:x != z - y  C:z > y + x  D:x < y || !x < z
4.在C++中 ,对浮点变量 float f ,则语句 cin >> f; cout << (f<1); 在输⼊是2e-1 时,输出是0。()
  正确  错误
5.C++中,定义变量 int a=5,b=4,c=3 ,则表达式 (a<b<c) 的值为逻辑假。 ( )
正确  错误
6.在C++中,假设N为正整数,则表达式 cout << (N % 3 + N % 7) 可能输出的最大值是( )。
A. 6 B. 8  C. 9  D. 10

6. 控制语句结构

顺序结构

  • 程序按顺序从上到下执行,没有分支或循环。

    int a = 5;
    int b = 10;
    int sum = a + b;
    cout << "Sum: " << sum << endl;
    

分支结构

选择结构用于根据条件执行不同的代码块。

  • if语句
if (条件) {
    // 条件为真时执行的代码
}
  • if-else语句
if (条件) {
    // 条件为真时执行的代码
} else {
    // 条件为假时执行的代码
}
  • if-else if-else语句
if (条件1) {
    // 条件1为真时执行的代码
} else if (条件2) {
    // 条件1为假且条件2为真时执行的代码
} else {
    // 以上条件都为假时执行的代码
}
  • switch语句

    switch (表达式) {
        case 常量1:
            // 表达式等于常量1时执行的代码
            break;
        case 常量2:
            // 表达式等于常量2时执行的代码
            break;
           // ...
        default:
           // 表达式不等于任何case中的常量时执行的代码
    }
    

注:if( )小括号里面的条件表达式的结果可以是int、bool、double、char类型,这些值都会隐式转换成bool类型,0是假,非0都是真,例如-1是真。

真题举例
1.下面C++代码执行后的输出是( )。
int m=7;
if (m/5||m/3)
    cout<<0;
else if (m/3)
    cout<<1;
else if (m/5)
    cout<<2;
else 
    cout<<3;
A:0  B:1  C:2  D:3

2.下面C++代码执行时输入21后,有关描述正确的是( )。

int N;
cin >> N;
if(N%3 == 0)
  cout << "能被3整除";
else if (N % 7 == 0)
  cout << "能被7整除";
else
  cout << "不能被3和7整除";
cout << endl;
A. 代码第4行被执行       B. 第4和第7行代码都被执行
C. 仅有代码第7行被执行    D. 第8行代码将被执行,因为input()输入为字符串
3. C++代码对大写字母 'A''Z' 分组,对每个字母输出所属的组号,那么输入 'C' 时将输出的组号是?( )。
char c;
while(1){
cin>>c;
if(c=='q') break;
switch(c){
    case 'A':cout<<"1 "; break;
    case 'B':cout<<"3 ";
    case 'C':cout<<"3 ";
    case 'D':cout<<"5 "; break;
    case 'E':cout<<"5 "; break;
    default:cout<<"9 ";
}
cout << endl;
}
A:3   B:3 5  C:3 5 9  D:以上都不对

循环结构

  • for 循环:用于已知次数的循环。

    for (int i = 1; i <= 5; i++) {
        cout << i << " ";
    }
    
  • while 循环:适用于条件判断后执行。

    int i = 1;
    while (i <= 5) {
        cout << i << " ";
        i++;
    }
    
  • do-while 循环:保证循环体至少执行一次。

    int i = 1;
    do {
        cout << i << " ";
        i++;
    } while (i <= 5);
    
  • continue 和 break

    • continue:跳过当前循环的剩余部分,进入下一次循环。
    • break:直接退出当前循环。

注:任何一个for循环都可以转化为等价的while循环

真题举例
1.执行下面C++代码后输出是( )
cnt=0;
for(i=10;i>3;i-=3)
  cnt=cnt+i;
cout<<cnt;
A:3 B:21 C:27 D:49
2.下面C++代码执行后的输出是( )。
int tnt =0;
for (int i=1;i<5;i+=2)
    tnt=tnt+i;
cout<<tnt;
A:2 B:4 C:9 D:10
3.下面C++代码执行后的输出是( )。
int n=5;
int cnt=1;
while (n>=0)
{
    cnt+=1;
    n-=2;
}
cout<<cnt;
A:3  B:4  C:6  D:7
4. 下面C++代码执行后的输出是( )
N =10;
cnt =0;
while(1){
  if(N ==0)
    break;
  cnt += 1;
  N -=2;
}
cout<< cnt;
A:11  B:10  C:5  D:4
5.下面C++代码用于求正整数的所有因数,即输出所有能整除一个正整数的数。
 如,输入10,则输出为12510;输入12,则输出为1234612;输入17,则输出为117。在横线处应填入代码是( )。
int n=0;
cout<<"请输入一个正整数:";
cin>>n;
for(__________)//此处填写代码
    if (n%i==0)
        cout<<i<<endl;
A. int i = 1; i < n; i + 1
B. int i = 1; i < n + 1; i + 1
C. int i = 1; i < n; i++
D. int i = 1; i < n + 1; i++
6. 在下列代码的横线处填写(),可以使得输出是“1248”。
#include <iostream>
using namespace std;
int main ()
{
    for (int i=1;i<=8;_______)//在此处填入代码
        cout<<i;
    return 0;
}

A. i++    B. i *= 2    C. i += 2    D. i * 2
7.下面C++代码执行后输出的是( )。
int N = 0;
for (int i = 1; i < 10; i +=2){
  if (i % 2 == 1)
    continue;
  N += 1;
}
cout << N;
A. 5   B. 4   C. 2   D. 0
8.执行下面C++代码后得到的输出是( )。
int count= 0, i, s;
for (i = 0, s = 0 ; i < 20; i++, count++)
  s += i++;
cout << s << " " << count;
A. 190 20    B. 95 10   C. 90 19   D. 90 10
9.下面C++代码能够执行,则将输出45。( )
for (int i = 0; i < 10; i++)
  Sum += i;
cout << Sum;
正确   错误
10.下⾯C++代码执⾏后输出是( )
int N=0,i;
for (i = 1; i < 10; i++)
  N += 1;
cout << (N + i);
A. 54    B. 20   C. 19   D. 18

易错题

1.C++语句 cout << (2*3, 3 % 10, 2+3) 的输出为 6,3,5 。 ( )
  正确   错误
2.C++的整型 N 被赋值为5,语句 printf("%d*2",N) 执行后将输出 10 。( )
  正确   错误
3.int 类型的变量 a 、 b 、 c ,下列语句不符合C++语法是( )
  A:c += 5;  
  B:b = c % 2.5;  
  C:a = (b = 3, c = 4, b + c); 
  D:a -= a = (b = 6) / (c = 2);
6.C++表达式 ('1'+'1'=='2'? flag=1:flag=2) 的结果值和表达式 (flag==2) 的相同。( )
  正确   错误
7.下面C++代码执行后的输出是( )。
int tnt = 0;
for(int i=0; i<10; i++)
  if(i%3 && i%7)
    tnt +=i;
cout << tnt << endl;
A. 0  B. 7   C. 18   D. 20
8.下面C++代码执行后的输出是( )
int N = 10;
while(N){
  N -= 1;
  if(N%3 == 0)
    cout << N << "#";
}
A. 9#6#3#         B. 9#6#3#0#
C. 8#7#5#4#2#1#   D. 10#8#7#5#4#2#1#
9.下面C++代码执行后的输出是( )
int cnt=0;
for(int i=1;i<20;i++)
{
    if (i%2)
      continue;
    else if (i%3==0&&i%5==0)
      break;
    cnt+=i;
}
A:90 B:44 C:20 D:10
10.执行以下C++语言程序后,输出结果是( )。
int n=5,s=1;
for (;n=0;n--)
    s*=n;
cout<<s<<endl;
A:1  B:0  C:120  D:无法确定
11.下面的C++代码执行后将先后输出7true 。( )
    for (int i = 0; i < 10; i++)
        cout << (i * 2 < i * i) << " ";

正确   错误

GESP认证考察的语言包括图形化编程、Python编程和C++编程三种。

注:考察计算过程、耐心与细心

编程题单

1.模和除运算 2.分支判断 3.倍数与因数 4.累加求和 5.质数 6.简单枚举

类型 题目编号 真题 方法
模和除运算 P1644 起床时间 P1097 时间规划 1.换算成统一的最小单位再加减
模和除运算 P1984 闹钟 P1615 休息时间 2.使用模和除运算换算单位
模和除运算 P2012 体重 P1619 小明的考试
模和除运算 P2051. 买苹果 P1612 小杨买书 关键是读题,转化成除法和求余运算
模和除运算 P2117. 小明买文具 P1622 小杨购物
模和除运算 P1198 苹果和虫子 P2003 图书馆里的老鼠 整除问题,有余数要加1
模和除运算 P1151. 数字对调 P2004 四舍五入 分离数位,循环读入数据
分支判断 P1036. 预算够吗 P1610 小杨买文具 从数学的角度计算正确,考虑有几种情况
分支判断 P1033. 打车费 P1704 温度转化 直接按照题目要求翻译
倍数与因数 P1050. 小明的幸运数 P1098 小明的幸运数
倍数与因数 P2118. 倍数 P1620 小明报数 使用循环变量枚举每一个数
倍数与因数 P1019 因子之和 P1613 找因数
倍数与因数 P2119. X的倍数和 P1623 美丽数字
累加求和 P1064 学生人数 P1098 累计相加 累加器一定要初始化为0;
累加求和 P1653. 数字口袋 P1705 奇数和偶数
质数 P1298 素数判断 客观题 试除法和计算因数个数
简单枚举 P1299 水仙花数 P1094 长方形面积 枚举范围、对象、判断条件
简单枚举 P1296. 凑数 P1616 立方数 for(枚举所有可能的答案) if(答案是否正确)
综合练习 P2122. 判断数字

1.判断质数

A: 计算因数个数

#include<bits/stdc++.h>
using namespace std;
int main() {
    int n,cnt =0;
    cin>>n;
    for(int i=1; i<=n; i++){ //注意点:从1开始枚举到n
        if(n%i==0){
            cnt++;
        }
    }        
    if (cnt==2)
        cout<<n<<"是质数。";
    else
        cout<<n<<"不是质数。";
    return 0;
}

B: 试除法

#include<bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin>>n;
    int flag=1;//默认是质数 
    for(int i=2; i<=n-1; i++){//从2开始枚举到n-1 
        if(n%i==0){
            flag=0;//找到了别的质数,就把标记改了 
            break;
        }
    }        
    if (flag==1)
        cout<<n<<"是质数。";
    else
        cout<<n<<"不是质数。";
    return 0;
}

2.分离数位

A: while循环

#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    while(n!=0){
        cout<<n%10<<" ";
        n=n/10;
    }
    return 0;
}

B:for循环

#include<iostream>
using namespace std;
int main() {
    int n;
    cin>>n;
    for(int i=n; i>0; i/=10){
        cout<<n%10<<" ";
    }
    return 0;
}

3.最大公因数与最小公倍数

方法1

#include<iostream>
using namespace std;
/*
枚举法
①i= a(或b)
②若a、b能同时被i整除,则i即为最大公约数,return i ;
③i--,再回去执行② 
*/
int main() {
    int a,b;
    cin>>a>>b;
    for(int i=a; i>0; i--) { 
        if(a%i==0&&b%i==0) {
            cout<<a<<"和"<<b<<"的最大公因数是"<<i<<endl;
            break;
        }
    }
    return 0;
}

方法2

#include <iostream>
using namespace std;
//欧几里得辗转相除法 
int main() {
    int a,b,r;
    cin>>a>>b;
    r=a%b;
    //如果余数为0,则除数b就是最大公因数 
    while(r!=0) {
        a=b;//除数赋值给被除数 
        b=r;//余数赋值给除数 
        r=a%b;
    }
    cout<<b<<endl;
    return 0;
}

最小公倍数=两整数的乘积÷最大公约数

Copyright ©图灵之星 2024,转载需注明出处该文件修订时间: 2025-04-29 12:28:21

results matching ""

    No results matching ""