欢迎光临
我们一直在努力

C++基础入门--程序流程结构、数组详解

C++基础入门(二)

程序流程结构

C/C++支持最基本的3种程序运行结构:顺序结构 选择结构 循环结构

  • 顺序结构:程序按顺序执行,不发生跳转
  • 选择结构:根据条件是否满足,有选择的执行相应功能
  • 循环结构:根据条件是否满足,循环多次执行某段代码
选择结构
if语句

作用:执行满足条件的语句

三种形式:

  • 单行格式if语句:if(条件){条件满足执行语句}

    在这里插入图片描述

  • 多行格式if语句:if(条件){条件满足执行语句}else{条件不满足执行语句};

    在这里插入图片描述

  • 多条件的if语句:if(条件1){条件1满足执行的语句}else if(条件2){条件2满足执行语句}…else{都不满足执行的语句}
    在这里插入图片描述

  • 示例1:

    #include<iostream>
    using namespace std;
    int main() {

    //选择结构 单行if语句
    //用户输入分数,如果分数大于600,视为考上一本大学,在屏幕上输出

    //1、用户输入分数
    int score = 0;
    cout << "请输入一个分数" << endl;
    cin >> score;

    //2、打印用户输入的分数
    cout << "您输入的分数为:" << score << endl;
    //3、判断分数是否大于600,如果大于,那么输出
    //注意事项:if条件后面不要加分号
    if (score > 600) {
    cout << "恭喜您考上了一本大学" << endl;
    }

    system("pause");
    return 0;
    }

    示例2:

    #include<iostream>
    using namespace std;
    int main() {

    //选择结构 多行if语句
    //输入考试分数,大于600输出考上一本大学,小于600则输出没考上一本大学

    //1、输出考试分数
    int score = 0;
    cout << "请输入一个考试分数:" << endl;
    cin >> score;
    //2、提示用户输入分数
    cout << "您输入的分数为:" << score << endl;
    //3、判断 如果大于600,打印考上一本,否则打印未考上一本
    if (score > 600) //大于600分执行下面大括号中的内容
    {
    cout << "恭喜,考上了一本大学" << endl;
    }
    else //不大于600分,执行else后大括号中的内容
    {
    cout << "未考上一本大学" << endl;
    }

    system("pause");
    return 0;
    }

    示例3:

    #include<iostream>
    using namespace std;
    int main() {
    //选择结构 多条件if语句
    //输入一个考试分数,如果大于600分,视为考上一本大学,在屏幕输出
    //大于500,视为考上二本大学,屏幕输出
    //大于400,视为考上三本大学,屏幕输出
    //小于等于400分,视为未考上本科,屏幕输出

    //1、用户输入分数
    int score = 0;
    cout << "请输入考试分数:" << endl;
    cin >> score;

    //2、提示用户输入的分数
    cout << "您输入的考试分数为:" << score << endl;

    //3、判断
    //如果大于600,考上一本
    //如果大于500,考上二本
    //如果大于400,考上三本
    //前三个都没有满足,未考上本科
    if (score > 600) {
    cout << "恭喜您考上了一本大学" << endl;
    }
    else if(score>500)//第二个条件判断
    {
    cout << "恭喜您考上了二本大学" << endl;

    }
    else if (score > 400) {
    cout << "恭喜您考上了三本大学" << endl;
    }
    else {
    cout << "未考上本科大学" << endl;
    }
    system("pause");
    return 0;
    }

    嵌套if语句

    在if语句中,可以嵌套使用if语句,达到更精确的条件判断。

    思考题:三只小猪称体重,谁最重?

    #include<iostream>
    using namespace std;
    int main() {

    //三只小猪称体重,判断哪只最重
    //创建三只小猪的体重变量
    int num1 = 0;
    int num2= 0;
    int num3 = 0;

    //让用户输入三只小猪的重量
    cout << "请输入小猪A的重量" << endl;
    cin >> num1 ;
    cout << "请输入小猪B的重量" << endl;
    cin >> num2;
    cout << "请输入小猪C的重量" << endl;
    cin >> num3;

    cout << "小猪A的体重为:" << num1 << endl;
    cout << "小猪B的体重为:" << num2 << endl;
    cout << "小猪C的体重为:" << num3 << endl;
    //判断哪只最重
    if (num1 > num2) {//A比B重
    if (num1 > num3) //A比C重
    {
    cout << "小猪A最重" << endl;
    }
    else //C比A重
    {
    cout << "小猪C最重" << endl;
    }
    }
    else //B比A重
    {
    if (num2 > num3) //B比C重
    {
    cout << "小猪B最重" << endl;

    }
    else//C比B重
    {
    cout << "小猪C最重" << endl;
    }
    }
    system("pause");
    return 0;
    }

    三目运算符

    作用:通过三目运算符实现简单的判断。

    语法:表达式1?表达式2:表达式3

    解释:

    如果表达式1的值为真,执行表达式2,返回表达式2的结果

    如果表达式1的值为假,执行表达式3,返回表达式3的结果

    switch语句

    作用:执行多条件分支语句

    #include<iostream>
    using namespace std;
    int main() {
    //switch语句
    //给电影进行打分
    //10~9 经典
    //8~7 非常好
    //6~5 一般
    //5以下 烂片

    //1、提示用户给电影评分
    cout << "请给电影打分" << endl;

    //2、用户开始进行打分
    int score = 0;
    cin >> score;
    cout << "您打的分数为:" << score<< endl;

    //3、根据用户输入的分数来提示用户的结果
    switch (score) {
    case 10:
    cout << "您认为是经典电影" << endl;
    break;//退出当前分支
    case 9:
    cout << "您认为是经典电影" << endl;
    break;
    case 8:
    cout << "您认为是好电影" << endl;
    break;
    case 7:
    cout << "您认为是好电影" << endl;
    break;
    case 6:
    cout << "您认为是电影一般" << endl;
    break;
    case 5:
    cout << "您认为是电影一般" << endl;
    break;
    default:
    cout << "您认为这是烂片" << endl;
    break;

    }
    //if和switch区别?
    //switch缺点:判断时候只能是整型或者字符型,不可以是一个区间
    //switch优点:结构清晰,执行效率更高

    system("pause");
    return 0;
    }

    循环结构
    while循环语句

    作用:满足循环条件,执行循环语句

    语法:while(循环条件){循环语句}

    解释:只要循环条件的结果为真,就执行循环语句

    在这里插入图片描述

    思考题:猜数字

    系统随机生成一个1~100之间的数字,玩家进行猜测,如果猜错,提示数字过大或过小,如果猜对恭喜玩家胜利,并且退出游戏。

    #include<iostream>
    using namespace std;
    //time系统时间头文件的包含
    #include<ctime>
    int main() {
    //添加随机数种子 作用:利用当前系统时间生成随机数,防止每次随机数都一样
    srand((unsigned int)time(NULL));

    //1、系统生成随机数
    int num=rand() % 100 + 1; //rand()%100 +1 生成0~99+1的随机数
    //cout << num << endl;

    //2、玩家进行猜测
    int val = 0;//玩家输入的数据

    while (1) {
    cin >> val;

    //3、判断玩家的猜测
    //猜错 提示猜的结果 过大或过小 重新返回第二步
    if (val > num) {
    cout << "猜测过大" << endl;
    }
    else if (val < num) {
    cout << "猜测过小" << endl;
    }
    else {
    cout << "恭喜您猜对了" << endl;
    break;//break,可以利用该关键字来退出当前循环
    }//猜对 退出游戏
    }
    system("pause");
    return 0;
    }

    do…while循环语句

    作用:满足循环条件,执行循环语句

    语法:do{循环语句}while(循环条件);

    注意:与while区别在于do…while会先执行一次循环语句,再判断循环条件

    思考题:水仙花数

    水仙花数是指一个3位数,它的每个位上的数字的三次幂之和等于它本身

    例如:13+53+3^3=153

    请利用do…while语句,求出所有三位数中的水仙花数

    #include<iostream>
    using namespace std;
    int main() {

    //1、先打印所有的三位数
    int num = 100;
    do{
    //2、从所有的三位数字中找到水仙花数
    int a = 0;//个位
    int b = 0;//十位
    int c = 0;//百位

    a = num % 10;//获取数字的个位
    b = num / 10 % 10;//获取数字的十位
    c = num / 100;//获取数字的百位
    if (a*a*a+b*b*b+c*c*c==num)//如果是水仙花数,才打印
    {
    cout << num << endl;
    }
    num++;

    } while (num < 1000);

    system("pause");
    return 0;
    }

    for循环语句

    作用:满足循环条件,执行循环语句

    语法:for(起始表达式;条件表达式;末尾循环体){循环语句;}

    思考题:敲桌子

    从1开始数到数字100,如果数字个位含7,或者数字十位含有7,或者该数字是7的倍数,我们打印敲桌子,其余数字直接打印输出。

    #include<iostream>
    using namespace std;
    int main() {

    //敲桌子案例
    //1、先输出1~100
    for (int i = 1; i <= 100; i++) {
    //2、从100个数字中找到特殊数字,打印“敲桌子”
    //如果是7的倍数、个位有7、十位有7,打印敲桌子
    if (i % 7 == 0 || i % 10 == 7 || i / 10 == 7)//如果是特殊数字,打印敲桌子
    {
    cout << "敲桌子" << endl;
    }
    else//如果不是特殊数字,才打印数字
    {
    cout << i << endl;
    }

    }
    system("pause");
    return 0;
    }

    嵌套循环

    作用:在循环体中再嵌套一层循环,解决一些实际问题

    思考题:乘法口诀表

    利用嵌套循环,实现九九乘法表

    #include<iostream>
    using namespace std;
    int main() {

    //乘法口诀表
    //打印行数
    for (int i = 1; i <= 9; i++) {
    //cout << i << endl;
    //2*2 2*3 说明列数一定小于行数
    for (int j = 1; j <= i; j++) {
    cout << j <<"*"<<i<<"="<<j*i<<" ";
    }
    cout << endl;
    }
    system("pause");
    return 0;
    }

    跳转语句
    break语句

    作用:用于跳出选择结构和循环结构

    break使用的时机:

    • 出现在switch条件语句中,作用是终止case并跳出switch
    • 出现在循环语句中,作用是跳出当前循环语句
    • 出现在嵌套循环中,跳出最近的内层循环语句
    continue语句

    作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环

    goto语句

    作用:可以无条件跳转语句

    语法:goto 标记;

    解释:如果标记的名称存在,执行goto语句时,会跳转到标记的位置

    数组

    所谓数组,就是一个集合,里面存放了相同类型的数据元素

    特点1:数组中每个数据元素都是相同的数据类型

    特点2:数组是由连续的内存位置组成的

    一维数组

    一维数组定义的三种方式:

  • 数据类型 数组名[数组长度];
  • 数据类型 数组名[数组长度]={值1,值2…};
  • 数据类型 数组名[]={值1,值2…};
  • 一维数组名称的用途:

  • 可以统计整个数组在内存中的长度:sizeof(arr)
  • 可以获取数组在内存中的首地址:(int)&arr[0]
  • 思考题:5只小猪称体重

    在一个数组中记录了5只小猪的体重,如:int arr[5]={300,350,200,400,250};找出并打印最重的小猪体重。

    #include<iostream>
    using namespace std;
    int main() {

    //1、创建5只小猪体重的数组
    int arr[5] = { 300,350,300,400,250 };

    //2、从数组中找到最大值
    int max = 0;//先认定最大值为0
    for (int i = 0; i < 5; i++) {
    //cout << arr[i] << endl;
    //如果访问的数组中的元素比我认定的最大值还要大,更新最大值
    if (arr[i] > max) {
    max = arr[i];
    }
    }

    //3、打印最大值
    cout << "最重的小猪体重为:" << max << endl;

    system("pause");
    return 0;
    }

    思考题2:数组元素逆置

    请声明一个5个元素的数组,并且将元素逆置

    如原数组元素为:1,3,2,5,4;逆置后输出的结果为:4,5,2,3,1;

    #include<iostream>
    using namespace std;
    int main() {

    //实现数组元素逆置

    //1、创建数组
    int arr[5] = { 1,3,2,5,3 };
    cout << "元素数组逆置前:" << endl;
    for (int i = 0; i < 5; i++) {
    cout << arr[i] << endl;
    }

    //2、实现逆置
    //2.1记录起始下标的位置
    //2.2记录结束下标的位置
    //2.3起始下标与结束下标元素互换
    //2.4起始位置++ 结束位置–
    //2,5循环执行2.1操作,直到起始位置>=结束位置
    int start = 0;//起始下标
    int end = sizeof(arr) / sizeof(arr[0]) – 1;//结束下标

    while(start < end) {
    //实现元素互换
    int temp = arr[start];
    arr[start] = arr[end];
    arr[end] = temp;

    //下标更新
    start++;
    end–;
    }

    //3、打印逆置后的数组
    cout << "数组元素逆置后" << endl;
    for (int i = 0; i < 5; i++) {
    cout << arr[i] << endl;
    }

    system("pause");
    return 0;
    }

    冒泡排序

    作用:最常用的排序算法,对组内元素进行排序

  • 比较相邻的元素,如果第一个比第二个大,就交换他们两个
  • 对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值
  • 重复以上的步骤,每次比较数-1,直到不需要比较
  • #include<iostream>
    using namespace std;
    int main() {

    //利用冒泡排序生成升序序列
    int arr[9] = { 4,2,8,0,5,7,1,3,9 };
    cout << "排序前:" << endl;
    for (int i = 0; i <9; i ++) {
    cout << arr[i] << " ";
    }
    cout << endl;

    //开始冒泡排序
    // 排序总轮数=元素个数-1
    // 每轮对比次数=元素个数-排序轮数-1
    for (int i = 0; i < 9 – 1; i++) {
    //内层循环对比
    for (int j = 0; j < 9 – i – 1;j++) {
    //如果第一个数字比第二个数字大,实现交换两个数字
    if (arr[j] > arr[j + 1]) {
    int temp = arr[j];
    arr[j] = arr[j + 1];
    arr[j + 1] = temp;

    }
    }
    }
    //排序后的结果
    cout << "排序后:" << endl;
    for (int i = 0; i < 9; i++) {
    cout << arr[i] << " ";
    }
    cout << endl;

    system("pause");
    return 0;
    }

    二维数组

    二维数组定义的4种方式:

  • 数据类型 数组名[行数] [列数];
  • 数据类型 数组名[行数] [列数]={{数据1,数据2},{数据3,数据4}};(常用)
  • 数据类型 数组名[行数] [列数]={数据1,数据2,数据3,数据4};
  • 数据类型 数组名[] [列数]={数据1,数据2,数据3,数据4};
  • 二维数组数组名
    • 查看二维数组所占内存空间:sizeof(arr)
    • 获取二维数组首地址:(int)arr (int)&arr[0] [0]

    思考题:考试成绩统计

    有三名同学(张三,李四,王五),在一次考试中成绩分别如下表,请分别输出三名同学的总成绩

    语文数学英语
    张三 100 100 100
    李四 90 50 100
    王五 60 70 80

    #include<iostream>
    using namespace std;
    #include<string>
    int main() {

    //二维数组案例–考试成绩统计

    //1、创建二维数组
    int score[3][3] = {
    {100,100,100 },
    {90,50,100 },
    {60,70,80 }
    };
    string names[3] = { "张三","李四","王五" };

    //2、统计每个人分数的总和分数
    for (int i = 0; i < 3; i++) {
    int sum = 0;//统计分数总和变量
    for (int j = 0; j < 3; j++) {
    sum += score[i][j];
    //cout << score[i][j] << " ";

    }
    cout << names[i]<<"的总分为"<<sum << endl;
    }
    system("pause");
    return 0;
    }

    赞(0)
    未经允许不得转载:171主机测评 » C++基础入门--程序流程结构、数组详解
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址