在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()返回一个正数值。相反则返回负数。
顺便说一句,虽然不能用关系运算符来比较字符串,但却可以用他们来比较字符,因为字符实际上是整型。