数据类型
C++中的变量
一、说明
C++对于数据的操作有直接输出类型的,也有经过“包装”类型的。直接输出类型的是我们前面学习的方式,比如下面这样:
1.数字直接参与运算的
#include<iostream> using namespace std; int main(){ cout<<1+2<<endl; //3 cout<<3-1<<endl; //2 return 0; }2.输出字符的
#include<iostream> using namespace std; int main(){ cout<<'a'<<endl; //a cout<<'b'<<endl; //b return 0; }3.输出字符串的
#include<iostream> using namespace std; int main(){ cout<<"hello"<<endl; //hello cout<<"你好"<<endl; //你好 return 0; }除了上面的直接操作,我们还可以通过其他方式,最常见的就是变量和常量。
例子 1:买菜记账(存储 + 复用数据)
例子 2:调空调温度(动态修改数据)
例子 3:快递柜取件(内存地址 + 变量名)
例子 4:分类放书包(类型约束)
核心总结
二、变量
变量就是能变化的量。特点就是“喜新厌旧”。
变量的的使用及其取值范围由它的类型决定,常见的变量类型及其取值范围可以参考前面这篇文章:C++ 数据类型深度指南:整型 / 浮点型 / 构造类型定义及使用
变量的定义方式如下:
数据类型说明符 变量名1,变量名2,变量名3......变量名n;
比如
int a,b;
上面这行代码表示定义了两个整型变量,名字分别是a和b,没有赋初值。
如果是赋初值的情况,下面这个例子
int a=1;
上面这个例子就是定义了一个整型变量,并赋初值为1
一个综合的例子如下:
#include<iostream> using namespace std; int main(){ int a; //定义了一个整型变量a,没有赋值 int b,c=1; //定义了两个整型变量b,c。c赋初值1 double d=0.2; //定义了一个浮点型变量,初值是0.2 bool x=true; //定义了一个bool型变量,初值是true char k='g'; //定义了一个char型变量,初值是g return 0; }如果对上面的内容进行输出
#include<iostream> using namespace std; int main(){ int a; //定义了一个整型变量a,没有赋值 int b,c=1; //定义了两个整型变量b,c。c赋初值1 double d=0.2; //定义了一个浮点型变量,初值是0.2 bool x=true; //定义了一个bool型变量,初值是true char k='g'; //定义了一个char型变量,初值是g //测试输出 cout<<"a="<<a<<endl; //a=4254665,没有赋初值,是随机数 cout<<"b="<<b<<",c="<<c<<endl;//b=0,c=1。 b没有赋值,随机0 cout<<"d="<<d<<endl;//d=0.2 cout<<"x="<<x<<endl;//x=1 cout<<"k="<<k<<endl;//k=g cout<<t<<endl; //编译不通过,提示变量t不存在(因为前面没定义) return 0; }总结:
数据类型说明符,决定了变量所存储的数据种类,可根据实际情况进行选择,可以是int、char、double等数据类型,也可以是struct等构造数据类型
变量定义通常在的开头位置,定义同类型的多个变量时,变量之间用逗号分隔,定义哥语句的末尾用分号结束。
变量必须先定义后使用,没有定义变量直接使用会报错。
变量的命名方式有严格要求:
(1)只能由字母(大小写都可以)、数字、下滑线组成
(2)不能以数字开头
(3)不能是关键字
【解释】什么是关键字? 用通俗的话讲,C++ 的关键字就是「编程语言官方规定的 “专用词”」—— 这些词有固定的含义和用途,是编译器能 “看懂” 的 “指令词汇”, 你不能把它们当变量名、函数名随便用,就像生活里的 “专用名词 / 规则术语”,不能乱改、乱用作其他用途。 基础常用的关键字:int float char double if else for while return const void class struct bool break continue static new delete 等。
在DevC++中,关键字会变黑色,比如下面这样,可以看到int,double都变黑了,而dog没有变黑
【题解】解密
【题目描述】
给定一个正整数k,有k次询问,每次给定三个正整数ni,ei,di,求两个正整数pi,qi。
使ni=pi * qi, ei * di =(pi -1) *(qi-1) + 1
【输入描述】
第一行一个正整数k,表示有k次询问。
接下来k行,第i行三个正整数ni,di,ei。
【输出描述】
输出k行,每行两个正整数pi,qi表示答案。
为使输出统一,你应保证pi<=qi。
如果无解,请输出NO。
【样例输入】
10 770 77 5 633 1 211 545 1 499 683 3 227 858 3 257 723 37 13 572 26 11 867 17 17 829 3 263 528 4 109
【样例输出】
2 385 NO NO NO 11 78 3 241 2 286 NO NO 6 88
【数据范围】
m=n-e*d +2
保证对于100的数据,1<=k<=10^5,对于任意的1<=i<=k,1<=ni<=10^18,
1<=ei*di<=10^18, 1<=m<=10^9
【算法】走迷宫
【题目描述】
一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。
给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。
【输入描述】
第一行是两个整数,R和C,代表迷宫的长和宽。( 1<= R,C <= 40)
接下来是R行,每行C个字符,代表整个迷宫。
空地格子用‘.’表示,有障碍物的格子用‘#’表示。
迷宫左上角和右下角都是‘.’。
【输出描述】
输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。计算步数要包括起点和终点。
【样例输入】
5 5 ..### #.... #.#.# #.#.# #.#..
【样例输出】
9
【算法】最短路径
【题目描述】
下图表示从城市A到城市H的交通图。从图中可以看出,从城市A到城市H要经过若干个城市。现在找出一条经过城市最少的一条路线。
【输入描述】
第一行一个整数n,表示几个城市。
接下来2~n+1行,表示两个城市之间的关系(能否直达)
【输出描述】
倒序输出城市最短线路中间用”-“隔开
【样例输入】
8 1 0 0 0 1 0 1 1 0 1 1 1 1 0 1 1 0 1 1 0 0 1 1 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 0 0 0 1 1 1 1 1 0 1 1 1 0 0 1 1 0 1 1 1 1 0 0 0 1
【样例输出】
H-F-A
【算法】最少步数
【题目描述】
在各种棋中,棋子的走法总是一定的,如中国象棋中马走“日”。有一位小学生就想如果马能有两种走法将增加其趣味性,因此,他规定马既能按“日”走,也能如象一样走“田”字。他的同桌平时喜欢下围棋,知道这件事后觉得很有趣,就想试一试,在一个(100×100)的围棋盘上任选两点A、B,A点放上黑子,B点放上白子,代表两匹马。棋子可以按“日”字走,也可以按“田”字走,俩人一个走黑马,一个走白马。谁用最少的步数走到左上角坐标为(1,1)的点时,谁获胜。现在他请你帮忙,给你A、B两点的坐标,想知道两个位置到(1,1)点可能的最少步数。
【输入描述】
A、B两点的坐标。
【输出描述】
最少步数
【样例输入】
12 16 18 10
【样例输出】
8 9
【NOIP2000】计算器的改良
【题目描述】
NCL 是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手 ZL 先生。
为了很好的完成这个任务,ZL 先生首先研究了一些一元一次方程的实例:
4+3x=8 6a-5+1=2-2a -5+12y=0
ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数、小写字母及+、-、=这三个数字符号(当然,符号“-”既可以作减号,也可以做负号)。方程中并没有括号,也没有除号,方程中的字母表示未知数。
你可假设对键入的方程的正确性的判断是由另一个程序员在做,或者说可认为键入的一元一次方程均为合法的,且有唯一实数解。
【输入描述】
一个一元一次方程。
【输出描述】
解方程的结果(精确到小数点后三位)。
【样例输入】
6a-5+1=2-2a
【样例输出】
a=0.750
CSPJ2022 乘方
【循环】日记第几天
【题目描述】
小明每天都坚持写日记,突然有一天小明在想,我今年写了多少篇日记了?一篇一篇的数好麻烦,没办法小明只能把这个艰难的问题交给聪明的你来解决。
【输入描述】
输入三个整数y,m,d分别表示年月日,数据均在int范围内。
【输出描述】
输出一个整数,表示这是今年的第几天。
【样例输入】
2018 1 1
【样例输出】
1