C++学习之循环和关系表达式(1)

在c语言中我这部分还算学习的挺好,所以这部分我只添加一些我不太懂的点:

1.通常,cout在显示bool值之前将它们转换为int,但是在前面使用cout.setf(ios:boolalpha)函数调用设置了一个标记,该标记命令cout显示true和false,而不是1和0;

2.附加一个小程序。0-15的阶乘:

#include<iostream>

const int ArSize = 16;

int main(void)
{
	using namespace std;
	long long factorials[ArSize];
	factorials[1] = factorials[0] = 1LL;
	for (int i = 2; i < ArSize; i++)
	{
		factorials[i] = i*factorials[i - 1];
	}
	for (int i = 0; i < ArSize; i++)
	{
		cout << i << "! =" << factorials[i] << endl;
	}

}

3.小程序区别x++和++x

/*小例子区别++x和x++*/
#include<iostream>

int main()
{
	using std::cout;
	int a = 20;
	int b = 20;
	cout << "a    = " << a << ":    b = " << b << "\n";
	cout << "a++ = " << a++ << ":  ++b = " << ++b << "\n";
	cout << "a     =" << a << ":  b= " << b << "\n";
}

区别一样就能看出来了。++x是修改后使用,x++是使用后修改。

4.复合语句还有一种有趣的特性。如果在语句块中定义一个新的变量,则仅当程序执行该语句块中的语句时,该变量才存在。执行完该语句块后,变量将被释放。这表明此变量仅在该语句块中才是可用的:

#include<iostream>

int main()
{
	using std::cout;
	int x = 20;
	{
		int y = 100;
		cout << x << "\n";
		cout << y << "\n";
	}
	cout << x << "\n";
	cout << y << "\n";//invalid,won't compile
}

5.sring类对象的内容反转

#include<iostream>
#include<string>

int main()
{
	using namespace std;
	cout << "Enter a word ";
	string word;
	cin >> word;

	char temp;
	int i, j;
	for (j = 0, i = word.size() - 1; j < i; --i, ++j)
	{
		temp = word[i];
		word[i] = word[j];
		word[j] = temp;
	}
	cout << word << "\nDone\n";
	return 0;
}

6.提供一个简单的例子反应等于(==)与赋值运算符(=)的区别和以后可能出现的问题

#include<iostream>

int main()
{
	using namespace std;
	int quizscores[10] =
	{ 20, 20, 20, 20, 20, 19, 20, 18, 20, 20 };

	cout << "Doing it right:\n";
	int i;
	for (i = 0; quizscores[i] == 20; i++)
	{
		cout << "quiz" << i << "is a 20\n";
	}
	//warning :you may prefer reading about this program
	//to actually running it.
	cout << "Doing it dangerously wrong:\n";
	for (i = 0; quizscores[i] = 20; i++)
	{
		cout << "quiz" << i << "is a 20\n";

	}
	return 0;
}

当然错误出现在

	for (i = 0; quizscores[i] == 20; i++)
	{
		cout << "quiz" << i << "is a 20\n";
	}

首先,由于将一个非零的值赋值给数组元素,因此表达式始终为非零,所以始终为true。其次,由于表达式将赋值赋给数组元素,他实际上修改了数据。第三由于测试表达式一直为true,因此程序在到达数组结尾后,仍不断修改数据。

7.假设要知道字符数组中的字符串是不是mate。如果word是数组名,下面的测试可能并不能像我们预想的那样工作:

word=="mate";

请记住,数组名是数组的地址。同样,用引号括起来的字符串常量也是其地址。因此,上面的关系式不是判断两个字符串是否相同,而是查看它们是否存储在相同的地址上。当然他们的地址不是相同的。

当然比较时我们应该使用字符串库中的strcmp()。

strcmp(),接收两个字符串地址作为参数。这意味着参数可以是指针、字符串常量或字符数组名。如果两个字符串相同,该函数返回0;如果第一个字符串按字母顺序排在第二个字符串后面,则strcmp()返回一个正数值。相反则返回负数。

顺便说一句,虽然不能用关系运算符来比较字符串,但却可以用他们来比较字符,因为字符实际上是整型。

猜你喜欢

转载自blog.csdn.net/qq_38721302/article/details/82931839
今日推荐