C&C++学习心法03while/for循环

三目运算符

// 表达式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语句,以免造成程序流程混乱

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值