C++基础语法

本文最后更新于 2025年11月8日 晚上

基础语法

C++中的类型

C++是一种强类型语言,支持多种数据类型。以下是一些常见的C++数据类型:

  • 整型(int)
  • 浮点型(float, double)
  • 字符型(char)
  • 布尔型(bool)
  • 字符串(string)
  • 数组(array)
  • 指针(pointer)
  • 结构体(struct)
  • 类(class)

他们的范围:

  • int: -2,147,483,648 到 2,147,483,647($$-2^{31}$$ 到 $$2^{31}-1$$)
  • float: 约 ±3.4E±38 (7 位有效数字)($$-3.4 \times 10^{38}$$ 到 $$3.4 \times 10^{38}$$)
  • double: 约 ±1.7E±308 (15 位有效数字)$$-1.7 \times 10^{308}$$ 到 $$1.7 \times 10^{308}$$)
  • char: 单个字符,通常占用1字节

类型的转换

洛谷P5704 - 字符大写转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>

using namespace std;

char toupper(char c){
if(c>='a' && c<='z')
return c - ('a' - 'A');
return c;
}

int main(){
char c;
cin >> c;
// cout << toupper(c);
cout << (char)(c-32);
return 0;
}

题目笔记

洛谷P5721

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
using namespace std;

int main(){
int n,MAX,counter=1;
scanf("%d",&n);
MAX = n*(n+1)/2;
for(int i=0;i<n;i++){
for(int j=0;j<n-i;j++){
if(counter<10)
printf("0%d",counter++);
else
printf("%d",counter++);
}
printf("\n");
}
return 0;
}

本题的关键在于抓组两层嵌套循环的规律,外层循环控制行数,内层循环控制每行打印的数字个数。
而且要想到使用counter变量来记录当前要打印的数字,并在每次打印后递增。
有可能会想到使用单层循环,并使用i来记录要打印的数字:
笔者原本想要使用单层循环,但是发现很难控制每行打印的数字个数,所以最终选择了双层循环的方式。
最后通过网络查询到了单层循环的实现方法:

使用一个变量来记录这一行要打印的数字的个数,另一个变量记录已经打印的数字的个数,当已经打印的数字个数等于这一行要打印的数字个数时,换行并将要打印的数字个数减一,使已打印的数字的个数归零。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
using namespace std;

int main(){
int n,MAX,counter=1,print_count=1,current_count=0;
scanf("%d",&n);
MAX = n*(n+1)/2;
for(int i=0;i<MAX;i++){
if(counter<10)
printf("0%d",counter++);
else
printf("%d",counter++);
current_count++;
if(current_count==print_count){
printf("\n");
print_count++;
current_count=0;
}
}
return 0;
}

这样的代码更难想到,但是不难发现,两种算法是复杂度是相同的,都是O(n^2),因为要输出的数字总数是n(n+1)/2.


C++基础语法
https://www.mirstar.net/2025/11/01/cpp-fundamental/
作者
onlymatt
发布于
2025年11月1日
许可协议