您的位置:首页 > 编程语言 > C语言/C++

c++Primer学习笔记之七:第二章课后习题

2014-08-29 15:08 357 查看
//ex2.10
#include <iostream>
int main()
{
std::cout<<"2M\n"
<<"2\tM"
<<std::endl;
return 0;
}
//ex2.11
/*第一次编译通过,测试数据3^3是1875563862?发现是初始化的问题
*果断给result附初值1;
*/
#include <iostream>
int main()
{
int base,exponent,result=1;
std::cout<<"Please input a number for base:"<<std::endl;;
std::cin>>base;
std::cout<<"Please input a number for exponent"<<std::endl;
std::cin>>exponent;
for (int cnt = 0;cnt != exponent; ++cnt){
result *= base;
}
std::cout<<"the result of "
<<base<<"^"<<exponent
<<"is "<<result<<std::endl;
return 0;
}

result未初始化时:



result初始化为1:



//ex2.15

/*前两个month和day定义正确
*后面的month和day定义是错误的
*编写程序运行,看看编译报错的信息
*发现错误原因在后面的09代表定义的是八进制数,但是八进制中没有数字9
*如果要定义9月7号,应改为int month1 = 011, day1 = 07;
*/
#include <iostream>
int main()
{
int month = 9, day = 7;
int month1 = 011, day1 = 07;
std::cout<<"month="<<month<<"\n"
<<"day="<<day<<"\n"
<<"month1="<<month1<<"\n"
<<"day1="<<day1;
return 0;
}



//ex2.16

//编译几个定义看看输出信息

#include <iostream>
int main()
{
//auto是c++关键字,不能用作变量标识符
int car = 1024, auto = 2048;
//定义格式正确,定义的时候系统会随机给ival一个比较大的值
//然后用这个值给本身初始化,理论上没错,但是逻辑上不提倡这样
int ival = ival;
//cin输入流变量要在之前指定类型
std::cin >> int input_value;
//wage没有定义
double salary = wage = 9999.99;
//()是函数调用符,在这里表示将calc()函数的返回值用作calc的初始化
//但是在这个cpp中calc函数没有定义。
double calc = calc();
return 0;
}
//ex2.17

//输出变量看看结果

#include <iostream>
std::string global_str;
int global_int;
int main()
{
int local_int;
std::string local_str;
std::cout<<"global_str:"<<global_str<<"\n"   //空
<<"global_int:"<<global_int<<"\n"    // 0
<<"local_int:"<<local_int<<"\n"      // 4201982 一个不清楚具体值的整数
<<"local_str:"<<local_str<<std::endl; // 空
return 0;
}



//ex2.18

/*
1、声明一个string类型的变量,变量名是name
2、定义一个string类型的变量,变量名是name,并初始化为”exercise 3.5a“
3、声明并初始化,只能在函数体外部使用,意义与2相同
*/
//ex2.20

/*
*输出i=100,sum=45
*i在for语句作用域中重新命名了
*for循环结束后,输出语句输出的i是局部作用域下的i=100
*而sum在语句作用域中没有重新定义
*也就是for循环中的sum就是局部作用域下的sum,sum值改变为45
*最后输出sum=45
*/
#include <iostream>
int main()
{
int i = 100, sum = 0;
for (int i = 0; i != 10; ++i)
sum += i;
std::cout << i << " " << sum << std::endl;
return 0;
}
//ex2.21

/*
*不合法
*i只在语句作用域中定义,for循环结束后i也消失
*/
#include <iostream>
int main()
{
int sum = 0;
for (int i = 0; i != 10; ++i)
sum += i;
std::cout << "Sum from 0 to " << i
<< " is " << sum << std::endl;
return 0;
}



//ex2.22

/*
* int i是在for循环定义和处理的
* 在语句for循环外面经没法访问,
* 因此这个变量i对我们来说没有意义
* 最好将i在for循环外面定义
*/
//ex2.23
/*
*1、不合法,const是不可改变的变量,在声明的时候就需要初始化
*2、正确,没有问题
*3、sz是const类型,他的值是不可改变的
*/
//ex2.24

/*
*1、合法,强制转化为int行,值为1;
*2、不合法,引用类型要和数据类型一样,但这里是double
*3、正确,ival在初始化的时候就自动变为int型了
*4、正确
*/
//ex2.25

/*
*1、合法,编译通过;
*2、编译通过
*3、编译通过
*4、不合法,const 类型的rval3不能被赋值
*/
//ex2.26

/*
*a、int类型的ival和int类型的const引用
*b、第一个正确,const可以做右值,第二个不对,不能给const赋值
*/
//ex2.27

// 输出10 10

#include <iostream>
int main()
{
int i, &ri = i;
i = 5; ri =10;
std::cout << i << " " << ri << std::endl;
return 0;
}




//ex2.31

/*
*(a)定义,虽然是extern,但在后面初始化了,即已经定义
*(b)定义,系统会随机赋值
*(c)声明
*(d)定义,虽为extern,但在声明为const型的时候就必须初始化,因此
* 应该是已经初始化了的extern
*/



//ex2.32
/*
*(a)放在源文件中,是定义
*(b)放在头文件中,使用常量表达式定义的const型,在编译的时候就知道值是多少,
*(c)定义,放在源文件中
*(d)放在源文件中,编译的时候不知道const的具体值
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: