首先对上一篇教程做点补充
关于创建的项目在哪个地方
比如我创建了一个叫test的项目,找到它所在的位置(在创建时可以选择)
这个test.sln
就是VS工程的入口,解决方案(solution),打开它就会自动开启VS。
名字为test
的文件夹内就有你写的源码文件,main.cpp
关于断点
执行时,会在断点处停顿,停顿的时候,断点所在的那一行并不会执行。
这时你可以将鼠标移到代码中的变量上查看他们的值
也可以点菜单栏里的“继续”
也可以选择菜单栏里的“逐语句”,“逐过程”,即一句一句执行。
- 编辑器美化
在菜单栏的 工具-选项 里,可以设置主题颜色(皮肤)
字体和字号
显示行号
众所周知,数据在计算机内都是以二进制表示的,不太懂的可以先温习一下
十进制 | 二进制 | 十六进制(0x) |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
2 | 10 | 2 |
3 | 11 | 3 |
4 | 100 | 4 |
5 | 101 | 5 |
10 | 1010 | A |
11 | 1011 | B |
12 | 1100 | C |
13 | 1101 | D |
14 | 1110 | E |
15 | 1111 | F |
16 | 10000 | 10 |
由表可以看出,
2进制的每一个位置,占1个bit,称为 1 位
16进制的每一个位置,占4个bit
也就是 1 Byte = 8 bit = 2个16进制位。
1 Byte (称为 字节)表示的数最大为 28−1=255
常用基本数据类型
数据类型 | 所占空间(字节) | 最大值或范围 |
---|---|---|
int(整数,integer) | 4 | 231−1 |
float(单精度浮点数,小数) | 4 | 3.4×1038 + 7位有效数字 |
double(双精度浮点数,小数) | 8 | 1.7×10308 + 15位有效数字 |
char(字符,character) | 1 | -128 ~ 127 |
bool(布尔) | 1 | 0(false)或1(true) |
变量的赋值
赋值的格式:
变量类型 变量名 = 值
例如下面这些赋值
#include<iostream>
using namespace std;
void main()
{
int a = -18; //直接赋值整数
int b = -18 + 99 + a; //等号右边可做运算
int c = 0xABCDEF; //0x是16进制表示的前缀
float d = 1997.0806;
double g = 1.123456789;
char h = 102;//试试输出h。把整数赋值给char型变量,输出时就转到ASCII码
char i = 'i'; //字符数是用单引号引起来的字符。
char j = 'abcd';//试试?
char k = '\102';// 转义符 "\"
char l = '\xAF';// "\x"后接两位16进制数
bool n = 1 < 2;
}
解释几句:
- char型,可以理解为它储存的就是整数,但cout时会转到ASCII码表中对应的字符。如果赋给他的值超过了127,就会产生溢出。
如char c=129
此时c的值就是 -127。
溢出规则这里就不讲了,自己百度or群里讨论or等老师讲 - 关于转义符
\
的两种用法
一般来说它会把紧跟在它后面的那个东西转成含有特殊含义的字符。
比如\n
表示换行符,\t
表示制表符(Tab键),\102
对应ASCII码的B
。
一个比较有趣的是\a
,表示鸣铃(alert),你可以输出它然后运行听听。
第二个用法,就是把包含在双引号""
之间的符号转变为它们本来的意思。比如cout<<"\"";
就会输出一个"
,不加\
符号的话,三个引号就无法识别了。
(所以,怎么输出一个\
呢?)
另外,const
关键字用来声明常变量。例如
const double pi = 3.1415926;
这类变量的值在声明后无法修改,所以,在声明的同时就应赋值。
像
const int i;
i=0;
也是不行的,会报错
运算符
常用的包括+
-
*
/
=
以及<
>
>=
<=
==
!=
还有++
--
和衍生的+=
-=
*=
/=
我们知道,编程语言中,我们写a=b
是把b的值赋给a。
int a = 0;
int b = 1;
a = b - 1;
a = b * 5; // * 是乘号
a++; //a的值自增1,即 a=a+1,执行之后a=1
++a; //同上,执行之后a=2
a*=3; //即a=a*3
++a和a++的区别我就不bb了,注意就好。
运算符优先级:
*
/
优先于+
-
。
()
内的优先其他运算符执行。
为了可读性,即使有的地方能用优先级规则判别出来,括号也都要加,比如
b+a*100+1
b+(a*100)+1 //有括号清爽多了
控制语句
最基础的if…else
if (1 > 2)
{
cout << "1>2";
}
else if(1 < 2)
{
cout << "1<2";
}
else if(1 == 2)
{
cout << "1=2";
}
else
cout << "wtf?";
这里,1<2是true的,所以会执行else if
中的语句。
当if
,for
,while
等语句后的{}
内只有一句话的时候,花括号可省略,比如上面的else
。
但是如果没加花括号,又写了两句话呢?
if(1==2)
cout<<"a";
cout<<"b";
那当然就按顺序执行了。所以这里只会输出b
要注意,if后的括号内应接true或false。不是bool型变量则会转换成bool型。
c++中,0自动转成false,非0的数转成true。
所以下面的语句会输出if中的内容。
bool flag = false;
if(flag)
cout <<"flag comes true";
int n = 10086;
if(n) //或者 if(10086)
{
cout<<n;
}
警惕下面的错误
int a=10086;
if(a = 1) //注意这里写成了"=",把1赋值给了a
cout << "exm?";
试试这个?
这里仍然会输出exm。
它等价于if(1)
,即if
后的括号内,先进行运算,再判断最后的运算结果。
最常用的for
//输出0~7,每两个数中间一个空格。
for (int i = 0; i < 8; i++)
{
cout << i << " ";
}
for后的括号内有3个语句块,作用分别是
(赋值;继续循环的条件;每循环一次所做的改变)
所以像这样写都是可以的
int i; //在for之前声明变量
for (i = 0; i < 8; i++)
cout << i << " ";
cout << endl;
i = 10; //在for之前给变量赋值
for (; i > 0; i = i - 1) //这里第一个语句块空着,但要加分号
cout << i << " ";
cout << endl;
while
先看一个示例
//输出0~9
int i=0;
while (i < 10)
{
cout << i << endl;
i++;
}
while的意思是 当……时
也就是当i<10时(只要i<10),就进入循环。
执行到i=9时,在i++将i变成10之后,进行判断,i=10<10,结果是false,所以跳出循环。
由于while的括号内没有给变量增值的语句,所以要在循环体内做改变。
while经常用于不知道具体循环次数的情况
int i=0;
int n = 0;
while (i < 10)
{
cin >> n; //cin为输入语句,后接">>",给n赋值。
if (n > 10)
i += 4;
else
i += 1;
}
break&continue
都用在循环中。
break表示跳出当前的循环
//由于break语句,输出0~5
for (int i = 0; i < 10; i++)
{
if (i > 5)
break;
cout << i << " ";
}
while (true)//由于括号内总为真,所以如果没有break,就会造成死循环
{
cout << "没时间解释了,快输入0!"
int n;
cin >> n;
if (n == 0)
break;
}
continue表示继续下一轮当前的循环
while (true)
{
cout << "没时间解释了,快输入0!"
int n;
cin >> n;
if (n != 0)//不等号。如果n不等于0,则执行continue
continue;
}
为什么我上面强调是“当前的”循环呢?其实,break和continue只对最内层的循环起作用
//嵌套循环的例子
for (int i = 0; i < 10; i++)//外层循环
{
for (int j= 0; j < 10; i++)//内层循环
{
int n;
cin >> n;
if (n == 0)
break;
cout << "j";
}
cout << "i";
}
上面的例子中,即使每次都输入0,也会输出10次i
,每次被打断的都是j
的输出。
自己动手试试:
- 输出一个
\
- 声明一个整型变量,
cin
一个小数 - 声明一个布尔型变量,赋给整型变量,再输出
自己的小作业:
- 求0~100中的质数,并输出到屏幕上
作业(要交 要交 要交):
- 写一个计算平均绩点(GPA, Grade Point Average)的程序
要求输入各科学分(比如高数5分)和成绩(百分制),最后输出GPA。
具体的流程需自己设计,且有足够的提示语句,能让别人知道怎么用。
附公式(C代表学分 credit,GP代表绩点 grade point)
分数和绩点的转换关系,自行百度“GPA”,按咱们学校的版本来算。
(其实就是加权绩点,权重为学分)