c++ primer plus capture 5 学习笔记loops and relational exoressions

文章详细介绍了C++编程中的for和while循环结构,包括初始化、测试表达式和更新表达式。同时,讨论了表达式和语句的区别,特别是逗号运算符的用法。文章还深入讲解了关系表达式以及C风格字符串和string类字符串的比较,提到了strcmp函数的作用。此外,提到了时间延迟循环的构建、类型别名定义以及cin输入处理的相关问题。
摘要由CSDN通过智能技术生成

目录

1 the for loop

for (initialization;test-expression;update-expression)        body

表达式和语句

","运算符:把两个语句连结成一句,

关系表达式

Compareing C-style strings

2. strcmp() function

comparing string class strings

 2 The while loop

3 for Versus while

4 Building a Time-Dlay Loop

clock()

5 定义别名Type Aliases

6 do while 循环

7 Using Unadorned cin for Input

8 cin.get(char)

9 The end of file condition

10 Nested Loops and Two_Dimensional Array


1 the for loop

c++和c一样

1. Setting a value initially
2. Performing a test to see whether the loop should continue
3. Executing the loop actions
4. Updating value(s) used for the test

for (initialization;test-expression;update-expression)
        body

表达式和语句

任何表达式都是有值的:

赋值表达式的值为等号左边的值,

表达式+分号——>语句

但是语句去掉分号不一定是表达式

","运算符:把两个语句连结成一句,

++j,++i;

逗号运算符也是序列点,保证前一个语句执行完再进行下一个语句

优先级最低,低于赋值运算符”=“

表达式的值为第二个表达式的值

cats=17,240;        //cats为17

cats=(17,240);  //cats为240

关系表达式

1.计算机具有比较数据的能力,是其决策的基础。

2.关系表达式均返回布尔变量:false or true

3.关系运算符的优先级低于算数运算符

4.易犯错误:等于是”==“,注意区分赋值运算符”=“

musicians == 4        //comparison

musicians = 4       //assignment

Compareing C-style strings

 1. C++ handles C-style strings as address

string word="mate";

word == "mate";

//只是比较word数组和“mate”地址相同吗?而不是比较字符串是否相同

2. strcmp() function

strcmp() function  :依据是否相同和首字母排序返回不同结果;

strcmp(str1, str2)!=0 and strcmp(str1, str2)
are true if str1 and str2 are not identical.
The following expression is true if str1 pre cedes str2 :
strcmp(str1,str2) < 0
And the following expression is true if str1 follows str2:
strcmp(str1, str2) > 0
Thus, the strcmp() function can play the role of the == , != , < , and > operators, depending
on how you set up a test condition.

        使用char数组储存字符串

        c的比较是计算到空字符的,与储存数组的大小无关;

        在系统中的排序比首字母更精确,系统中是区分大小写的,如A和a的ASCⅠⅠ code就不同;

        不可以比较字符串,但是可以比较字符

for(ch = 'a'; ch<= 'z'; ch++)
    cout << ch;

comparing string class strings

1.使用string类储存字符串

2. 可直接用于比较运算符

string word = "?ate";
for (char ch = ‘a’; word != "mate"; ch++)
{
cout << word << endl;
word[0] = ch;
}

 2 The while loop

 while (test-condition)

                body

1 循环体中必须包含语句会影响判断语句的结果,while循环才有可能终止

2 进入条件循环,如果一开始判定就是false,那body 部分一次也不会执行

3 下列两种表达式是等价的

while (name[i])

while (name[i] != '\0)

4 string的结尾并没有空字符标志结束,如果使用上述判断条件,不可用string代替char数组表示字符串

3 for Versus while

1 for loop在没有判断语句的时候,会默认为ture

2  for的控制语句可声明变量但是while不行

3 选择:

        计数循环用for,可以清晰的看到相关的信息——初始化,终止条件,变量的更新;

        while常用于循环次数未知;

4注意事项:

        在loop的body部分有多个语句的时候要用{}括起来;

       while()后面不要加多余的分号,分号意味着while loop的结束,将不会进入body部分

4 Building a Time-Dlay Loop

1 使用while loop计数:受计算速度影响

2 let system clock do the timing for you

clock()

不一定返回s为单位的时间

返回clock_t是电脑的计时器计数

不同系统可能是long也可能是unsigned long

5 定义别名Type Aliases

为什么要定义别名:eg:5.14中使用clock_t可以很直观的看出来是时间相关

typedef typeName aliasName;

                类型     定义的类型别名

6 do while 循环

1 出口条件循环

do
    body
while (test-expression);

7 Using Unadorned cin for Input

使用cin遇到的一些问题:

1.会省略空格,因为cin的输入会跳过空格和换行符,所以空格无回显

2.cin is buffered,键入回车才会把输入的信息发送给程序,所以可以在#之后输入信息但是程序不会读取

// page 234 
// 5.16textin1
#include <iostream>

int main()
{
	using namespace std;
	char ch;
	int count = 0;
	cout << "Enter characters;enter # to quit;\n";
	cin >> ch;
	while (ch != '#')
	{
		cout << ch;
		++count;
		cin >> ch;
	}
	cout << endl << count << " characters read\n";
	return 0;
}

8 cin.get(char)

1 可以读取空格(space)

2  still is buffered

cin.get()重载

cin.get();``//不带参数,清除换行符

cin.get(char* str; std::streamsize_count)  

   //带两个参数,第一个是数组地址,第二个是数组大小

9 The end of file condition

vs2022     ctrl+z enter

fail()

检查filebit是false 还是true

When cin detects the EOF, it sets two bits (the eofbit and the failbit) to 1.

所以也可以用eof()

10 Nested Loops and Two_Dimensional Arrays

type_name array_name [rows][coulmns]

内容:使用和引用,没啥重点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值