三目运算符
// 表达式1? 表达式2:表达式3
// 如果表达式1为真 执行表达式 2 并且返回表达式2 的结果
// 如果表达式1为假 执行表达式 3 并且返回表达式3 的结果
#include <iostream>
using namespace std;
// 表达式1? 表达式2:表达式3
// 如果表达式1为真 执行表达式 2 并且返回表达式2 的结果
// 如果表达式1为假 执行表达式 3 并且返回表达式3 的结果
int main(){
int a = 100;
int b = 200;
int c = 300;
// a和b谁大
int max;
// if (a > b)
// max = a;
// else
// max = b;
// cout << max <<endl;
cout <<( a > b ? a : b)<<endl;
// 三目运算返回的是变量可以继续赋值运算
( a > b ? a : b) = 1000;
cout <<"a = "<< a<<endl; // 100
cout <<"b = "<< b<<endl; // 1000
// 三个数的最大值
cout <<"san = "<<((a>b?a:b) > c ? (a>b?a:b) : c)<<endl; // 1000
}
switch语句
语法
switch(表达式){
case 结果1: 执行语句;
break;
case 结果2: 执行语句;
break;
case 结果3: 执行语句;
break;
...
default: 执行语句;
break;
}
举个例子
#include <iostream>
using namespace std;
int main (){
// 10 / 9 经典之作
// 8 / 7 非常不错
// 6 / 5 一般般
// 5 以下 烂片
// char c;
int score;
cout<< "请输入电影评分等级" <<endl;
cin>>score;
switch (score) {
case 10:
case 9:
cout<< "经典之作" <<endl;
break;
case 8:
case 7:
cout<< "非常不错" <<endl;
break;
case 6:
case 5:
cout<< "一般般" <<endl;
break;
default:
cout<< "烂片" <<endl;
break;
}
}
注意1:switch语句中表达式类型只能是整型或者字符型
注意2:case里如果没有break,那么程序会一直向下执行 // 每一个case有执行语句的都要写 break 要防止case穿透
总结:与if语句比,对于多条件判断时,switch的结构清晰,执行效率高,缺点是switch不可以判断区间
循环结构
while语句
while循环
语法
while(循环条件){
循环语句
}
// 只要循环条件为真就会执行循环语句
举个例子
死循环栗子
#include <iostream>
using namespace std;
int main(){
int i = 1;
while (true){
cout<< "haha" << i << endl;
i++;
}
}
#include <iostream>
using namespace std;
int main(){
int i = 1;
int sum = 0; // 存储当前 的累加和
while (i<=100){
// sum = sum + i;
sum += i;
i++;
}
cout<< "1~100 sum= "<<sum<< endl;
}
do while循环
语法:
do{循环语句} while(循环条件)
与while的区别 :do while循环会先执行一次循环, 再去判断循环条件
#include <iostream>
using namespace std;
int main(){
int num = 0;
do{
cout<< num << endl;
num++;
} while (num<20);
// int num = 0;
// do{
// cout<< num << endl;
// num++;
// } while (num<0);
// while (num<0){
// cout<< num << endl;
// num++;
// }
}
#include <iostream>
using namespace std;
int main(){
//案例描述:系统随机⽣成⼀个1到100之间的数字,玩家进⾏猜测,
// 如果猜错,提⽰玩家数字过⼤或过 ⼩,如果猜对恭喜玩家胜利,并且退出游戏。
int genarate_number;
int guess_number;
cout<< "input true number"<<endl;
cin >> genarate_number; // 40
while (true){
cout<< "input your guess number"<<endl;
cin >>guess_number;
if (guess_number>genarate_number){
cout<< "too larger"<<endl;
}else if(guess_number<genarate_number){
cout<< "too small"<<endl;
}else{
cout<< "very good"<<endl;
break;
}
}
}
1、rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。
2、如果你要产生0~99这100个整数中的一个随机整数,可以表达为:int num = rand() % 100; 这样,num的值就是一个0~99中的一个随机数了。
3、如果要产生1~100,则是这样:int num = rand() % 100 + 1;
4、总结来说,可以表示为:int num = rand() % n +a;其中的a是起始值,n-1+a是终止值,n是整数的范围。
5、一般性:rand() % (b-a+1)+ a ; 就表示 a~b 之间的一个随机整数。
6、若要产生01之间的小数,则可以先取得010的整数,然后均除以10即可得到“随机到十分位”的10个随机小数。若要得到“随机到百分位”的随机小数,则需要先得到0~100的10个整数,然后均除以100,其它情况依 此类推。
电脑生成随机数
#include <iostream>
using namespace std;
#include <ctime>
int main (){
srand((unsigned int) time(NULL));
int computer = rand()%100 + 1;
int player;
while (true){
cout << "请输入你要猜的数字" << endl;
cin >> player;
if (player > computer)
cout << "猜大了" << endl;
else if (player < computer)
cout << "猜小了" << endl;
else{
cout << "猜对了" << endl;
break;
}
}
}
上面可以改写成限制猜的次数
#include <iostream>
#include <ctime>
using namespace std;
int main(){
// cout <<(unsigned int )time(NULL)<<endl;
srand((unsigned int )time(NULL));
// srand(666); // 固定随机种子
int generate_number;
generate_number = rand()%100 +1;
cout <<generate_number<<endl;
int guess_number;
int count = 0;
while (count <= 5){
count++;
cout << "please input your guess number"<<endl;
cin>>guess_number;
if (guess_number > generate_number){
cout << "too large --"<< (5 - count) << " left"<<endl;
}
else if (guess_number < generate_number){
cout << "too small -- "<< (5 - count) << " left"<<endl;
}else{
cout << "correct !!! "<<endl;
break;
}
}
}
C语言
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 常量
int main(){
time_t tm = time(NULL);//得到系统时间
srand((unsigned int)tm);//随机种子只需要设置一次即可
// srand(666); // 固定随机种子
int r = rand()%5;
printf("r = %d\n", r);
}
for 循环
语法
// for 和 while 可以互相转化
for (初始表达式; 条件表达式; 步进表达式) {
循环体
}
#include <iostream>
using namespace std;
int main(){
// 累加
int sum = 0;
for(int i= 1; i<=100; i++){
sum += i;
}
cout<< "sum = "<<sum<<endl;
}
break和continue
break 跳出本层循环;continue跳出本次循环执行下一次循环;
#include <iostream>
using namespace std;
int main(){
// 奇数累加
int sum = 0;
for(int i= 1; i<=100; i++){
if (i%2==0){
//odd 偶数
continue;
}
sum += i;
}
cout<< "sum = "<<sum<<endl;
}
break
#include <iostream>
using namespace std;
int main(){
// 累加和达到1000终止循环
int sum = 0;
for(int i= 1; i<=100; i++){
sum += i;
if (sum >= 1000){
break;
}
}
cout<< "sum = "<<sum<<endl;
}
案例描述:⽔仙花数是指⼀个 3 位数,它的每个位上的数字的 3次幂之和等于它本⾝ 例如:1^3 + 5^3+ 3^3 = 153, 编程实现找到所有的水仙花数
]
2 . 01234
3. 0369
12
4. 6
8
5. k = 8
循环嵌套
循环嵌套:循环里面还有循环
小口诀 : 外层循环负责打印多少行; 内层循环负责具体的某一行是什么样
#include <iostream>
using namespace std;
// 小口诀 : 外层循环负责打印多少行; 内层循环负责具体的某一行是什么样
int main(){
// 外层循环负责打印 10 行
for(int i=0; i < 10; i++){
// 内层循环每行打印 5个 *
for(int j=0; j < 5; j++){
cout<< "*"<<" ";
}
// 换行就行
cout<<endl;
}
}
自己实现九九乘法表
#include <iostream>
using namespace std;
// 小口诀 : 外层循环负责打印多少行; 内层循环负责具体的某一行是什么样
int main(){
for(int i = 1; i < 10; i++){
for(int j = 1; j <= i; j++){
cout<< j << " x " << i << " = " << i*j<< " ";
}
cout<<endl;
}
}
#include <iostream>
using namespace std;
// 小口诀 : 外层循环负责打印多少行; 内层循环负责具体的某一行是什么样
int main(){
int row = 10;
int column;
while(row>=1){
column = 1;
while(column<=10){
// 打印
// if(row%2==0)
// cout<< ">";
// else
// cout<< "<";
cout<< (row%2? "<" : ">");
++column;
}
cout<<endl;
--row;
}
}
for 形式
#include <iostream>
using namespace std;
int main(){
for (int row = 10; row >= 1 ; --row) {
for (int column = 1; column <=10 ; ++column)
cout<< (row%2? "<" : ">");
cout<<endl;
}
}
输入一个数 判断他是不是水仙花数
#include <iostream>
using namespace std;
int main(){
int num;
cout<< "input a number";
cin>>num;
// 提取个位十位百位
int ge, shi, bai;
ge = num%10;
bai = num/100;
shi = (num%100-ge)/10;
if ((ge*ge*ge + shi*shi*shi + bai*bai*bai) == num)
cout<< "yes"<<endl;
else
cout<< "no"<<endl;
}
寻找所有的水仙花数
#include <iostream>
#include<cmath>
using namespace std;
int main(){
int num = 101;
while(num<1000){
// 提取个位十位百位
int ge, shi, bai;
ge = num%10;
bai = num/100;
shi = (num%100-ge)/10;
if ((pow(ge, 3) + pow(shi, 3) + pow(bai, 3)) == num)
cout<<num <<" ";
num++;
}
}
goto语句
作用 可以无条件的跳转语句
#include <iostream>
#include<cmath>
using namespace std;
int main(){
cout<< "1" <<endl;
goto FLAG;
cout<< "2" <<endl;
cout<< "3" <<endl;
cout<< "4" <<endl;
FLAG:
cout<< "5" <<endl;
}
注意:在程序中不建议使用goto语句,以免造成程序流程混乱