一级考纲
- 计算机基础与编程环境
- 变量的定义与使用
- 基本数据类型(整型、浮点型、字符型、布尔型)
- 输入输出语句
- 基本运算(算术运算、关系运算、逻辑运算)
- 控制语句结构(顺序、循环、选择)
知识点解析
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:用于存储
true
或false
,通常占用 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.0和3的值相等,所以它们占用的存储空间也相同。( )
正确 错误
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)。常见的比较运算符有:
- == :等于
- != :不等于
- > : 大于
- < : 小于
- >= : 大于或等于
- <= : 小于或等于
// 定义布尔类型的变量来存储比较运算的结果
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
逻辑运算
- 逻辑运算符用于组合多个条件表达式。主要的逻辑运算符是:
- &&:逻辑与(AND),所有条件都必须为真,结果才为真,同真为真,有假则假。
- ||:逻辑或(OR),只要有一个条件为真,结果就为真,有真则真,同假为假。
- !:逻辑非(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 的值分别为 2 、 4 、 6 ,以下表达式的值为真的是( )
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,则输出为1、 2、5、10;输入12,则输出为1、2、3、4、6、12;输入17,则输出为1、17。在横线处应填入代码是( )。
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++代码执行后将先后输出7个 true 。( )
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;
}
最小公倍数=两整数的乘积÷最大公约数