数据类型
计算机中最小的存储单位是 位(bit),8位组成一个字节(byte),即1byte=8bit
c++中有各种数据类型,用以表示现实中的各种数据。如:
整型:int ,short int,long int
字符型:string
实型:double,float
不同数据类型可存储的数的范围也不同。
变量
程序执行过程中,其值可以发生改变的量。一个变量应该有一个变量名子,在内存中占据一定的存储单元。变量使用之前,应该先声明或定义。如:
int a=3;变量名是a,值为3,是int(整型)的,在内存中占据4个字节的存储空间。
笔记:根据定义不同,变量类型也不同,如实型变量,整型变量,字符型变量,不同类型变量只能存储对应数据类型的数据。
运算符
1)赋值运算符
= , +=,-=,*=,/=,%=等
注:%为取余运算符
2)关系运算符
<,>,<=,>=,运算结果为bool(布尔类型):0或1(假或真)
cout << boolalpha << a<b <<endl;
3)逻辑运算符
&& 与,|| 或,! 非。
4)位运算符
& 按位与,| 按位或,~按位非,^ 按位异或,<< 左移,>> 右移。
例:
cout << (4 & 5) << endl;
100 &101 运算结果为:100(4十进制),即每个对应位取与运算。
cout << (2 << 10) << endl;
位移运算此处重载,2<<10,表示把2的二进制“10”左移10位,即“100000000000”, 结果为22^10,为21024=2048。
5)sizeof运算符
基本用法:sizeof(type name)
如测量计算机中某种数据类型的长度:
cout << sizeof(int) << "\t" << sizeof(0.1) << endl;
运行结果为4 8(不同编译器或机型可能不同)
6)自增自减运算符
++ --,如i++,i–,++i,–i。
表达式
运算符和变量构成表达式,故而表达式按照参与的运算符不同,又可分为算术,逻辑,关系表达式等。
表达式构成语句,每个语句之间用“;”隔开。“{}”之间的语句,无论有多少个“;”均视为一个语句。
If语句
分为if,if else,if else if……
笔记:if可以用于判断某一个条件是否成立,成立则执行if后面的语句。
if else可用于判断那些只有两种情况的问题,无论那种情况均有对应语句执行。
if else可用于依次判断条件是否成立,每个if之后均有一个语句,只要任意一个语句被执行,之后的else if都不再进行判断。
基本用法示例:
int a,b,c,d;
cout << "请输入三个数:" << endl;
cin >> a >> b >> c;
cout << a << "\t" << b << "\t" << c << endl;
if(a>b)
{
d=a;
a=b;
b=d;
}
if(a>c)
{
d=a;
a=c;
c=d;
}
if(b>c)
{
d=b;
b=c;
c=d;
}
cout << a << "\t" << b << "\t" << c << endl;
//强调下if的大括号,当需要执行的语句只有一条时,可省略:
int a = 5, b = 10;
if(a>b)
if(a++ > --b)
a+=b;
cout << a << "\t" << b << endl;
return 0;
三个语句可以合理灵活搭配使用。
double a,b,c,d,max;
cout << "输入4个数:" << endl;
cin >> a >> b >> c >> d;
a>b?max=a:max=b>c?b:c>d?c:d;//取出4个数中最大的数
cout << max <<endl;
/*
float score;
cout << "请输入分数:" << endl;
cin >> score;
if (score >=90) cout << "A等" << endl;
else if(score >=80 && score <90) cout << "B等" << endl;
else if (score >=70 && score <80) cout << "C等" << endl;
else if (score >=60 && score <70) cout << "D等" << endl;
else cout << "E等" << endl;
return 0;
if关键字后均为表达式,该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。如a=5和a==5均是允许的。由于编译不会报错,为避免逻辑上的错误难以发现,可以采用以下方式:
int a=2;
if(3==a) cout << "a=3" << endl;
else cout << "a=2" << endl;
return 0;
if语句的嵌套
当if语句中的执行语句又是if语句时,则构成例if语句的嵌套。再嵌套内的if语句可能又是if else型的,这将出现多个if和else重叠的情况,这是要特别注意if和else的配对问题。为避免二义性,规定,else总是与它前面最近的if配对。
条件运算符和条件表达式
条件运算符为“?”和“:”,是三目运算符,即参与运算的量是三个。由条件运算符组成的条件表达式一般形式为:
表达式1?表达式2:表达式3
求值规则为:如果表达式1为真,则把表达式2的值作为整个表达式的值,否则把表达式3 的值作为整个表达式的值。该运算表达式自右至左运算。如:a>b?a:b>c?b:c应理解为a>b?a:(b>c?b:c)
//输入一个字母,如果是大写字母则打印出来,如果不是,则转换成大写字母打印出来。
char letter;
cout << "输入一个字母:" << endl;
cin >> letter;
'A'<= letter && 'Z' >= letter?letter:letter-=32;
cout << letter << endl;
switch语句
switch语句一般形式为:
switch (表达式1)
{
case 常量表达式1:语句1;break;
case 常量表达式2:语句2;break;
……
case 常量表达式n:语句n;break;
default:语句n+1;
}
该语句含义为:计算表达式1的值,并按顺序逐个与其后的常量表达式的值型比较,当表达式1的值与某个常量表达式的值相同时,执行其后的语句,然后不再进行判断,继续执行后面的所有case后的语句。如表达式1的值与后面所有常量表达式值均不相同,则执行default后的语句。执行语句时,遇到break,则不再执行之后的语句,跳出整个switch语句。break可以省略,具体视程序想要实现的效果而定。
int a;
cout << "今天星期几?(数字):" << endl;
cin >> a;
switch (a)
{
case 1 : cout << "Monday" <<endl;//break;
case 2 : cout << "Tuesday"<<endl ;//break;
case 3 : cout << "Wednesday"<<endl;//break;
case 4 : cout << "Thursday"<<endl;//break;
case 5 : cout << "Friday"<<endl;//break;
case 6 : cout << "Saturday"<<endl;//break;
case 7 : cout << "Sunday"<<endl;//break;
default :cout << "error" << endl;
return 0;
注意点:
switch后的表达只能是整型或字符型。
case后常量表达式的值不能相同,允许多条语句,不需要大括号。
如果不添加break语句,需要特别注意执行顺序。
case和default子句的先后顺序可以自行变动,default可以省略。
题外话:有趣的闰年
闰年的定义:能被4整除,不能被100整除,或者能被400整除。
解释:能被4整除,不能被100整除的是普通闰年。能被400整除的是大闰年。
有了判断语句,就能通过闰年的定义来判断某一年是否为闰年了。
用if语句实现:
int year;
cout << "请输入年份:" << endl;
cin >> year;
if (0 == year%100)
{
if(0 == year%400)
{
cout << "公元" <<year << "年是闰年" << endl;
}
else cout << "公元" <<year << "年不是闰年" << endl;
}
else if(0==year%4)
{
cout << "公元" << year << "年是闰年" << endl;
}
else cout << "公元" <<year << "年不是闰年" << endl;
return 0;
用switch语句实现:
int a,b,c,d;
cout << "请输入年份:" << endl;
cin >> a;
b=a%4;
c=a%100;
d=a%400;
switch( 0 == b && 0 != c || 0 == d)
{
case 1: cout << a << "年是闰年" << endl; break;
case 0: cout << a << "年不闰年" << endl; break;
}
return 0;
那么问题来了,为什么闰年要这样定义呢?
经过本人搜索资料与思考,做出以下详细解释:
首先,我们都知道,一年的本意是地球绕太阳一圈,即公转运行的时间,地球公转一圈又一圈,一年又一年。
平年(普通年)是365天,但地球绕太阳一周实际时间是365天零5小时48分46秒。所以,如果没有闰年存在,一年多出5小时48分46秒也就是20926s没有统计在内。4年就是83704s,又因为一天的时间是:
24*3600s=86400s
也就是说4年差不多要多处将近1天的时间没有计算在内。
故而,我们可以规定
–
第四年第二月多一天,即闰年比平年多一天,为366天,
这样近似地弥补了时间的误差。
但是问题还是没有完全解决。毕竟误差存在,每4年按86400s去多加上一天,跟实际上多出来的83704s相比,又多出了2696s不存在的时间。每400年就多出了100个2696s,即269600s,这与3天即259200s差不多。那么,
–
每400年再减少三天吧!
于是,就有了以下规定:
以1~400年这个区间为例:
1.每4年闰一年,即加一天,100年就加了25天,400年加了100天,即100个闰年。为了方便计量,规定能被4整除的数是闰年。
2.又因为每400年要减去3天,故而,实际上每400年中有3个闰年是需要被舍去。那么舍去哪三个闰年呢?我们可以看到,第100年,第200年,第300年按照规则1计算,刚好是三个闰年。那么我们把这三个闰年舍去,就得到了最终结果了:能被4整除却不能被100整除的年份是普通闰年,以及能被400整除的年份是大润年。
事实上,这种闰年的方式,任然没有解决根本问题,因为还有269600-259200=10400s不存在的时间。即,每400年我们的日历比地球公转形成的春夏秋冬四季提前了10400s,也就是2.88888……个小时,4000年就推迟了一天多。如果现有条件不变的话,几百万万年,几千万年后,我们将在本该过秋天的季节过夏天,本该过冬天的季节过秋天,本该过春天的季节过冬天。。。意思就是,季节变化比日历上推迟了。。。不过我等凡人寿命区区几十载,可以说是丝毫不受影响。