- 标识符命名注意:
只有字母(A-Z,a-z)、数字(0-9)、下划线_
一般对变量名用小写,符号常量命名用大写
关键字、预定义标识符(如printf)、用户标识符(自定义) - 字节又名长度
- 基本数据类型默认为long,且无符号时取值的范围大小相同(-128——127==0——255)
整型(除unsigned)第一位为符号位 0正1负
char型按ASCII码存储,可通过查找对应字符变量值的ASCII值,利用其在ASCII里的对应的int值进行加减运算。#include<iostream> using namespace std; int main(void) { char X = 'A', Y = 'B'; int Z=X+Y; cout<<Z<<"\n"; system("pause"); return 0; }
但是当定义Z为char型时,不报错却没有结果,那是由于两个char相加是整型
当对byte、short、char类型进行混合运算时,最终结果一定是整型,当然你也可以把它们都转换成int类型的,之后在进行混合运算
当多种数据类型进行混合运算的时候,最后的数据类型一定是它们中取值最大的数据类型,如果里面有字符串的话,那最后的数据类型一定是字符串类型
#include<iostream> using namespace std; int main(void) { char X = 'A', Y = 'B'; string a = "1234",b=a+X; int Z=X+Y; cout<<Z<<"\n"<<b<<"\n"; system("pause"); return 0; }
实型均为有符号数据,不能用unsigned,且数字默认为double - 代码返回为0是因为我们最终main函数return 0,其实没什么问题
system("pause")是个函数调用,在stdlib.h中定义
作用是中断当前程序并等待一个输入后继续。 不加这个一闪而过是因为程序运行完退出了 - 字符串型结尾多了一个’\0'空字符位,但也多了一位
- scanf() scanf_s() printf()
VS中scanf由于安全等级太低,所以强制使用scanf_s函数来接收输入值
其中"%[标志][宽度][.精度][长度]类型" - iostream头文件是标准类,包含cin和cout
cin>>a>>b>>c;可以多个输入,以空格、tab、回车做间隔,回车做结尾
cin不能接收空格和回车符,用cin.get(X),X是变量名
cout同理 - 整形数和整形数相除,结果将舍弃小数部分只取整数,除非除数或被除数有浮点数,结果才是浮点数
双目运算中,将精度较低的向精度较高的转换
char-short-int-long-float-double
1-------2-----4----4----4-------8类型 字长 bool 1
char 1 int 4 float 4 double 8 #include<iostream> using namespace std; int main() { int a = 9, b = 2; //2.0默认为double类型了,float精度不满足,溢出 float d = (a +b) / 2.0; cout << d; return 0; }
在做加法运算之前,先把a,b强制转换成double的8个字节型,避免因加四个字节而引起的算术溢出
#include<iostream> using namespace std; int main() { int a = 9, b = 2; double c = ((double)a + (double)b)/2.0; cout << c; system("pause"); return 0; }
- 字符型数据参与运算是ASCII码进行的,自动转换成整型
实型数据参与运算会自动转换成双精度型数据
赋值运算时,左右类型不同时,会将右操作数自动转换为左类型再赋值给左边
取余运算(求模运算)
必须是整数,若有一方为负数,则先绝对值取余,再根据被除数取正负- 前置自增:先自增后参与运算++x 在前管自己
后置自增:先参与运算后自增x++ - 表达式相等用“==”,赋值用“=”
- 逻辑运算符的结合性:相同优先级的运算符在同一个表达式中,且没有括号的时候,运算符和操作数的结合方式,通常有从左到右结合和从右到左结合两种方式
比如三目运算符?:是从右向左结合的,那么表达式a > b ? b > c ? 1 : 0 : 2将被解析为 a > b ? (b > c ? 1 : 0) : 2。 - 逻辑表达式在值能够确定的情况下,运算将不在进行,不作为判定的地方还是原来的数据
#include<iostream> using namespace std; int main() { int a = 4, b = 7; printf("a=%d b=%d\n", a, b); //由于b=5已经为真,那么后续的a不考虑运算,仍为原值4 cout << ((b = 5) || (a = 6)); printf("\na=%d b=%d", a, b); system("pause"); return 0; }
- 三目运算符:
a?b:c;
若a真,则执行b,否则执行c - 分支结构中的swtich语句
表达式以及常量表达式的值只能是整型、字符型或枚举型
表达式==常量表达式i时,执行语句i,不需要判定新条件,继续执行i+1……n+1
switch(表达式){
case 常量表达式1:语句序列1;break;(不是必须的,作用是结束switch)
case 常量表达式2:语句序列2;break;
……
default:语句序列n+1;(可省略default,且它可在任意位置,且无break)#include<iostream> using namespace std; int main() { int score; cin >> score; switch (score/10) { case 10: case 9:cout << 'A' << endl; break; case 8:cout << 'B' << endl; break; case 7:cout << 'C' << endl; break; case 6:cout << 'D' << endl; break; default:cout << 'E' << endl; } system("pause"); return 0; }
做题:
今天做了题单里的题,在分类别在做
前面整数类的题目基本没什么问题,就是小学数学计算,这个1031小数类的还困了我几分钟哈哈哈,明明今天才学了整数与整数相除依然是整数来着,下次还是要更加细心呀!