c++基础技能(二)

for语句

for (循环变量赋初始值;循环条件;更新循环变量) {
循环体
}

  • 语法解析
  • 循环变量:用于控制循环的变量,一般在循环条件中使用

比如:循环变量可以是在存钱100天这个例子中的天数
for循环的执行逻辑:

  1. 首先会给循环变量赋一个初始值
  2. 然后判断是否满足循环条件
  3. 如果不满足,直接跳出循环;
  4. 如果满足,执行循环体,更新循环变量,再跳回去重新判断是否满足循环条件

比如:输出存款总数,天数加1,再跳回去看看现在是不是依然满足循环条件
使用for循环时,【循环变量赋初始值】,【循环条件】,【更新循环变量】这三个表达式都可以省略,变为 for ( ; ; ) ,这表示不用给循环变量赋初始值,也不用在每次执行后更新循环变量,同时循环的条件始终为真,也就是说每次都会选择进入循环体

  • 如果循环体只有一句话,可以不用大括号括起来
  • 循环控制语句 break

除了正常的循环之外,循环控制语句可以更改程序执行的正常序列。循环控制语句常用的是 break 和 continue。
‘’break只能在循环体和switch语句中使用‘’

  • break 用法

在switch语句中也有用到过,用于停止执行模块内后面的程序语句
通常放在循环体中,当执行到这句语句时,跳出整个循环,也就是说整个循环立即终止

  • 循环控制语句 continue

另一个常用的循环控制语句是 continue。

  • continue 用法

通常也是放在循环体中,当执行到这句语句时,跳过当前循环体,强迫进入下一次循环
举例

int savings = 0;

for (int i=1; i<=100; i++) {
    // 如果天数是10的倍数,直接进入下一天
    if (i % 10 == 0)
        continue;

    savings = savings + 1;
    cout << i << ":总数" << savings << endl;
}

说明:1
假设如果天数是10的倍数(第10、20、30、…天),那么那天迷你键可以不存钱,也不输出存款总量。他可以用continue跳过这几次循环

输出21世纪(2001年1月1日至2100年12月31日的这一段期间称为21世纪)中截止某个年份以来的所有闰年年份。
注意:闰年的判别条件是该年年份能被4整除但不能被100整除,或者能被400整除。

  • 输入描述:

输入在一行中给出21世纪的某个截止年份。

  • 输出描述:

逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出**“Invalid year!”。若不存在任何闰年,则输出“None”**。

#include <bits/stdc++.h>
using namespace std; 
int year;
int b=0;

int main() {
    // 请补全代码,实现题目功能
    cin>>year;
    //判断在不在21世纪范围
    if(year>=2100 || year<=2001){
        cout<<"Invalid year!";
    
    }
    //在21世纪范围
    else{
        for(int i=2001;i<=year;i++){
        //判断闰年
          if(((i%4==0) && (i%100!=0)) || (i%400==0)){
            cout<<i<<endl;
            b +=1;
           }
    }
    //如果计数为0证明,这个范围内没有闰年
        if(b==0){
           cout<<"None";
        }
        
    }
    

    return 0;
}

while语句

while (循环成立条件) {
循环体
}

do {
循环体
} while (循环成立条件);

  • do while 执行逻辑

和while类似
唯一的区别在于: 因为条件表达式出现在循环的尾部,do–while所以至少会执行一次循环体,执行完成后,再判断是否进入下一次循环。

  • 猜数字游戏
#include <iostream>
using namespace std;

int main() {
    // 声明生成的随机数字和猜的数字这两个变量
    int num, guess;
    
    // 提供随机种子
    srand((unsigned)time(NULL));
    // 随机生成一个1-100的数字
    num = rand() % 100 + 1;
    
    // TODO 先进入循环,如果猜的数字和生成的数字不相同就再次进入循环
    do {
        // TODO 输入猜测的数字
        cin>>guess;
            
        // 输出猜大了还是猜小了
        if (guess > num)
            cout << "猜大了" << endl;
        else if (guess < num)
            cout << "猜小了" << endl;
        
    } while(guess!=num);

    // 当猜的数字和生成的数字相同时,跳出循环后,输出“猜对了”
    cout << "猜对了" << endl;

数组

int sales[6] = {0};
cin >> sales[0];
scanf("%i", &sales[1]);

cout << sales_4[0];
printf("%i", sales[1]);

Tips:在 C++ 中,‘a’ 和 “a” 是不一样的,前者是一个字符常量,在内存中占 11 字节,后者是一个字符串,占 22 字节的空间,第 11 个字节储存了字母 a 的内码值,第二个字节储存了 ‘\0’。

字符串数组

  • 举例:char userName[11]
    就可以声明一个名字叫userName的字符数组型字符串,这个数组最多能存放一个长度为10的字符串。
// 第一种:给每个元素指定初始化值
// 依次赋初值,剩下的会默认被初始化为\0
char userName[11] = {'L', 'a', 'o', 'W', 'a', 'n', 'g', '\0'};
char userName[11] = {'L', 'a', 'o', 'W', 'a', 'n', 'g'};

// 和普通数组一样,元素个数可以省略,c++会自动识别长度为8
char userName[] = {'L', 'a', 'o', 'W', 'a', 'n', 'g', '\0'};
//第二种:使用字符串常量初始化字符数组
char userName[11] = {"LaoWang"};
// 大括号可以省略
char userName[11] = "LaoWang";
  1. 字符数组的输入输出

字符数组可以进行逐个字符的输入输出,这种做法和普通的数组操作一样,分为以下两种方式:

  • 将整个字符串一次性地用对象 cin 和 cout 的 >> 和 << 操作完成输入或输出。
  • 通过 cin 的成员函数 get 或 getline 输入。

**

  • 方式一:使用 cin 和 cout

**

对于字符数组 userName,输入一个字符串到数组中,可以使用语句:

cin >> ch;

输入的时候,使用cin语句,会不断的读入字符串,直到遇到一个空白字符(空格、回车或者制表符)就结束读入
用cin向计算机输入一串字符时,输入的字符的数量应该少于已定义的字符数组的长度,否则会出现问题
如果输入的字符的数量 小于 字符数组长度时,剩下的部分会默认补上’\0’

  • 方式二:用 scanf printf 也可以输入输出字符串,有以下一些需要注意的点:

字符的输入用 scanf("%c", &变量名),而输入一个字符串用 scanf("%s", 数组名)

scanf("%s", userName);

  1. 字符数组型字符串的常用操作

字符串不能用系统的内置运算符进行操作,C++语言设计了一个 cstring 库,提供了一些用来处理字符串的函数。

  • 连接字符串

使用 strcat(s1, s2) 函数可以把字符串 s2 连接到 s1 的末尾。

  • 获取字符串长度

使用 strlen(s1) 函数可以返回字符串 s1 的有效字符数。比如"yes"的长度就是3。

  • 比较字符串的字典序

使用 strcmp(s1, s2) 函数可以比较两个字符串之间的字典序:如果 s1和 s2是相同的,会返回0;如果s1的字典序在 s2前面,则返回值会小于0;如果s1的字典序在 s2后面,则返回值会大于0

  • 复制字符串

使用 strcpy(s1, s2) 函数可以复制字符串 s2 到字符串 s1。如果 s2 比 s1 短,那么 s1 这个数组后面没被覆盖的部分不会改变。比如 s1存的是 {q, w, e, r, \0}, s2存的是 {a, s, \0},那么使用 strcpy(s1, s2)后,s1前五位应该是{a, s, \0, r, \0}。

string类型

  • string 类型的基本操作

字符数组型字符串是把字符串当作一个元素为字符一维数组,而 string 类型是直接把字符串当作一个整体,可以像整型变量、字符变量一样使用。

  • string 类型的用法有以下一些注意点:
  • 头文件
  • 首先需要加载 string 类型所在的头文件。

"# include < string >

  • 声明和初始化
  • 输入输出

string 类型的字符串一般直接通过cin和cout进行输入输出。
输入的时候,使用cin语句,会不断的读入字符串,直到遇到一个空白字符(空格、回车或者制表符)就结束读入
输出的时候,从字符串中第一个字符开始输出,直到遇到 ‘\0’(不会输出 ‘\0’)

string 类型的常用操作

对于string 类型的字符串,官方提供了一些字符数组型字符串常用处理函数,可以对字符数组型的字符串进行一些常规操作。本节选取抽取一些常用操作,和字符数组型字符串对照讲解一下:

  • 连接字符串

字符数组型字符串会使用 strcat(s1, s2) 函数把字符串 s2 连接到 s1 的末尾。
string 类型可以直接使用s1 + s2 连接两个字符串。

  • 获取字符串长度

字符数组型字符串会使用 strlen(s1) 函数返回字符串 s1 的字符数。
string 类型可以直接使用 s1.size() 或者 s1.length() 返回字符串 s1 的字符数。

  • 比较字符串的字典序

字符数组型字符串会使用 strcmp(s1, s2) 函数比较两个字符串之间的字典序:
如果s1和s2是 相同 的,会返回0
如果s1在s2 前面 ,则返回值会小于0
如果s1在s2 后面,则返回值会大于0
string 类型可以直接使用 关系运算符 来比较两个字符的字典序:
如果s1 < s2为1(),就表示s1的字典序在 s2前面
如果s1 < s2为0(),就表示s1的字典序不在 s2前面

  • 复制字符串

字符数组型字符串使用 strcpy(s1, s2) 函数复制字符串 s2到字符串 s1。
string 类型可以直接使用赋值表达式 s1 = s2来复制字符串 s2到字符串 s1。
举例:小六在处理平台上的新老用户名,并且尝试做了一些操作:

string userName_old = "LaoWang";
string userName_new = "Liu";
string str;
int len;

// 连接小六的新老用户名,并赋值给str
str = userName_old + userName_new;
cout << userName_old << " + " << userName_new << " = " << str << endl;

// 输出连接后str的总长度
cout << "str length:  " << str.size() << endl;
cout << "str length:  " << str.length() << endl;

// 比较新老用户名的字典序
cout << (userName_old > userName_new) << endl;

// 再把老用户名赋给str
str = userName_old;
cout << "str : " << str << endl;

第一张
2
第二张
在这里插入图片描述
第三张
3

C++基础技能(一)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值