//if条件结构:
int a = 0;
int b = 0;
cout << "Enter two number" << endl;
cin >> a >> b;
if (a > b)
cout << "max is " << a << endl;
else if (a < b)
cout << "max is " << b << endl;
else
cout << "Equal" << endl;
constexpr double cm_per_inch = 2.54; //定义常量每英寸折合多少厘米
double length = 1; //长度 单位时英寸或者厘米
char unit = 'a';
cout << "Enter a length followed by a unit (c or i): \n";
cin >> length >> unit;
switch (unit) //switch括号内必须是整型,字符型或者枚举类型,不能是字符串类型
{
case'i': //case内值不能重复,但可以多个case执行同一程序
cout << length << "in==" << cm_per_inch*length << "cm\n";
break; //当未加break时,编译器并不会报错 需要特别注意
case'c':
cout << length << "cm==" << length / cm_per_inch << "in" << endl;
break;
default: //default也可以放在其他条件之前
cout << "error unit" << endl;
break;
}
//值得注意:switch一般用于简单一些的条件判断也更一目了然,if用于更复杂的条件判断情况
循环结构:
//while结构
计算并打印0-99的平方表
int i = 0;
while (i<100)
{
cout << i<<"\t"<<(i*i) << endl;
i++;
}
//for循环
for (int i = 0; i < 100; i++)
{
cout << i << "\t" << i*i << endl;
}
//题:随机来模拟游戏中的两名玩家的攻击
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
//血量
int hp1 = 100; //player1
int hp2 = 100; //player2
//攻击力
int attack1 = 0; //player1
int attack2 = 0; //player2
int randomNum; //存放判断玩家攻击先后的随机数
srand(time(NULL)); //更新随机种子配合rand函数来产生不同的随机数 time(NULL)返回到现在时间的秒
//一般srand放在循环外,因为时间种子精度和程序运行速度的问题,放在循环内部后得到的随机数实际是使用同一个时间种子,随机数相同
while (hp1 > 0 && hp2 > 0)
{
//随机数奇数 1攻击 偶数 2攻击
randomNum = rand(); //默认随机0-32767
cout << "Random" << randomNum << endl;
if (randomNum % 2 == 1) //奇数
{
attack1 = (int)(5 + 10 * rand() / (RAND_MAX + 1.0)); //固定公式计算攻击力 RAND_MAX表示随机数的最大值,即32767
attack2 = (int)(5 + 10 * rand() / (RAND_MAX + 1.0));
hp2 -= attack1;
hp1 -= attack2;
}
else //偶数
{
attack2 = (int)(5 + 10 * rand() / (RAND_MAX + 1.0));
attack1 = (int)(5 + 10 * rand() / (RAND_MAX + 1.0));
hp1 -= attack2;
hp2 -= attack1;
}
}
//打印对战最终结果
cout << "player1:" << hp1 << endl;
cout << "player2:" << hp2 << endl;
return 0;
}
c++中的运算符:
//一元运算符:++、--
//二元运算符:+、-、*、/、%
//三元运算符:?:
//值得注意的是 i++和++i的区别:
//i++和++i都等同于 i=i+1,但i++ 返回原值 ++i返回增加后的值
//i++ 不可以作为左值 而++i可以作为左值
int num1 = -5;
int num2 = 2;
num1 = num2++ - --num2;
cout << num1 << "\t" << num2 << "\n";
输出结果:0 2
位运算符 :按位与&、按位或|、按位非~、按位异或^、左移<<、右移>>
&:两个同时为1时 结果为1
cout << (4 & 5) << endl; //输出为4 //4二进制100 5二进制101 0&1 结果为0
|:两个有一个为1 结果为1
cout << (4 | 5) << endl; //输出为5
~:操作数为1,结果为0;操作数为0,结果为1
cout << ~2 << endl; //输出-3 2二进制八位为00000010 ~运算后 为11111101此时为负数 把负数转化为十进制步骤:取反并+1并加符号
^:相同时候为0,不同的时候为结果为1 即同假异真
cout << ((1+5)^(2+4)) << endl; //输出为0
<<:运算符左移(重载) 右侧空位补零
int num = 5; //5二进制 0101.00 数字左移三位 0101000转化为十进制为40
num = 5 << 3;
cout << num << endl; //输出40
>>:运算符右移(重载)
cout << (64 >> 2) << endl; //输出16 64为2的5次方 右移两位为2的3次方即16
//运算符左移和右移多用于2的次方计算 效率较高
初识vector(向量):
//Vector 一组可以通过索引来访问的顺序存储的数据元素 vector类似数组但不需要事先指定大小
//vector的初始化
vector<int> v_i; //int类型默认为0
v_i = { 1,3,7,2,9 };
//遍历
for (int i = 0; i < v_i.size(); i++)
{
cout << v_i[i] << endl;
}
//vector的空间增长 vector可以往里面添加任意多个元素
v_i.push_back(15); //如果括号内输入的不是int类型比如5.4,则存在一个强制转换,最终结果为5
一个简单的例子:简单字典程序,建立排序单词的列表
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
vector<string> words;
for (string temp;cin>>temp;)
{
words.push_back(temp);
}
cout << "Number of words: " << words.size() << endl;
sort(words.begin(), words.end()); //对单词快速排序
for (int i = 0; i < words.size();i++)
if (i == 0 || words[i - 1] != words[i]) //判断是否是一个新的单词
cout << words[i] << endl;
cin.get();
return 0;
}
输入 a man a plan a camel panama //关于如何终止输入流 vs可以使用ctrl+z +enter来终止输入流
输出 a
camel
man
panama
plan