基本数据类型
基本数据类型
整数型 int、long long;实数型 float、double;字符型 char;布尔型 bool。
概念
基本数据类型决定变量能存什么、占多少空间、运算如何提升。int 与 long long 解决整数范围问题;float/double 存实数但存在精度误差;char 存单个字符(本质是小型整数);bool 只有 true/false。与 cspj.cpp.operator 的区别:类型回答「是什么」,运算符回答「怎么算」。与 cspj.math.number-and-base 的区别:后者讲数学意义上的数与进制,这里讲 C++ 里怎么声明和使用这些类型。初赛常把类型与字面量后缀(1LL、3.14)、隐式转换、sizeof 一起考。
CSP-J 常考
cspj-r1-2024第 1 题:单选题问 32 位int的合法存储范围(边界是 −2³¹ 与 2³¹−1)。cspj-r1-2024第 6 题:单选题结合类型与表达式,判断运算结果或类型。cspj-r1-2022第 16–17 题:阅读程序判断题,跟踪int/char/bool混合运算后的输出或条件。cspj-r1-2021第 21、24 题:阅读程序里考查字符与整数互转、类型宽度对比较结果的影响。
int a = 2147483647;
long long b = 1LL * a * a; // 用 long long 防 int 乘法溢出
char c = 'A';
bool ok = (c >= 'A' && c <= 'Z');
cout << b << " " << ok << endl;
易错点
char参与算术会提升为int,比较'0' + 1与'1'时不要凭直觉。- 两个
int相乘再赋给long long已经太晚——乘法在int阶段就可能溢出。 - 阅读程序题里
%d打印char、或用%c读入后当数字用,要按实际转换规则逐行推。
阅读程序共 3 分1 道小题
整组作答后提交批改,成绩计入掌握度 · 已答 0/1
程序
1
#include <iostream>2using namespace std;34int n;5int a[1000];67int f(int x)8{9 int ret = 0;10 for (; x; x &= x - 1) ret++;11 return ret;12}1314int g(int x)15{16 return x & -x;17}1819int main()20{21 cin >> n;22 for (int i = 0; i < n; i++) cin >> a[i];23 for (int i = 0; i < n; i++)24 cout << f(a[i]) + g(a[i]) << ' ';25 cout << endl;26 return 0;27}- 21单选3 分
单选题
- 当输入为
2 -65536 2147483647时,输出为( )。
A.
65532 33
B.65552 32
C.65535 34
D.65554 33 - 当输入为
阅读程序共 1.5 分1 道小题
整组作答后提交批改,成绩计入掌握度 · 已答 0/1
原卷作答说明:判断题正确填 √,错误填 ×
程序
1
#include <iostream>2#include <string>3using namespace std;45char base[64];6char table[256];78void init()9{10 for (int i = 0; i < 26; i++) base[i] = 'A' + i;11 for (int i = 0; i < 26; i++) base[26 + i] = 'a' + i;12 for (int i = 0; i < 10; i++) base[52 + i] = '0' + i;13 base[62] = '+', base[63] = '/';1415 for (int i = 0; i < 256; i++) table[i] = 0xff;16 for (int i = 0; i < 64; i++) table[base[i]] = i;17 table['='] = 0;18}1920string decode(string str)21{22 string ret;23 int i;24 for (i = 0; i < str.size(); i += 4) {25 ret += table[str[i]] << 2 | table[str[i + 1]] >> 4;26 if (str[i + 2] != '=')27 ret += (table[str[i + 1]] & 0x0f) << 4 | table[str[i + 2]] >> 2;28 if (str[i + 3] != '=')29 ret += table[str[i + 2]] << 6 | table[str[i + 3]];30 }31 return ret;32}3334int main()35{36 init();37 cout << int(table[0]) << endl;3839 string str;40 cin >> str;41 cout << decode(str) << endl;42 return 0;43}- 24判断1.5 分
输出的第一行为 -1。( )
阅读程序共 1.5 分1 道小题
整组作答后提交批改,成绩计入掌握度 · 已答 0/1
程序
1
01 #include <iostream>202303 using namespace std;404505 int main()606 {707 unsigned short x, y;808 cin >> x >> y;909 x = (x | x << 2)& 0x33;1010 x = (x | x << 1)& 0x55;1111 y = (y | y << 2)& 0x33;1212 y = (y | y << 1)& 0x55;1313 unsigned short z = x | y << 1;1414 cout << z << endl;1515 return 0;1616 }- 16判断1.5 分
删去第 7 行与第 13 行的 unsigned,程序行为不变。
阅读程序共 1.5 分1 道小题
整组作答后提交批改,成绩计入掌握度 · 已答 0/1
程序
1
01 #include <iostream>202303 using namespace std;404505 int main()606 {707 unsigned short x, y;808 cin >> x >> y;909 x = (x | x << 2)& 0x33;1010 x = (x | x << 1)& 0x55;1111 y = (y | y << 2)& 0x33;1212 y = (y | y << 1)& 0x55;1313 unsigned short z = x | y << 1;1414 cout << z << endl;1515 return 0;1616 }- 17判断1.5 分
将第 7 行与第 13 行的 short 均改为 char,程序行为不变。
阅读程序共 1.5 分1 道小题
整组作答后提交批改,成绩计入掌握度 · 已答 0/1
程序
1
1 #include <iostream>22 33 using namespace std;44 55 int n,k;66 77 int solve1()88 {99 int l = 0, r = n;1010 while(l <= r){1111 int mid = (l + r) / 2;1212 if (mid * mid <= n) l = mid + 1;1313 else r = mid - 1;1414 }1515 return l - 1;1616 }1717 1818 double solve2(double x)1919 {2020 if (x == 0) return x;2121 for (int i = 0; i < k; i++)2222 x = (x + n / x) / 2;2323 return x;2424 }2525 2626 int main()2727 {2828 cin >> n >> k;2929 double ans = solve2(solve1());3030 cout << ans << ' ' << (ans * ans == n) << endl;3131 return 0;3232 }- 31判断1.5 分
该程序有存在缺陷。当输入的 n 过大时,第 12 行的乘法有可能溢出,因此应当将
mid强制转换为 64 位整数再计算。
32 位 int 类型的存储范围是( )?
以下哪个不是 C++ 中的基本数据类型?( )