最近在看《C++程序设计语言》,里面有些代码和《C程序设计语言》的思路差不多,记录一下代码,算是强迫自己敲一遍,顺便记录下自己的看书进度。今天看了P19--P95,课后习题没有细作,因为之前有点基础,所以看这本书的时候不是特别困难。
1.一个用来返回各种数值的范围的小程序
<pre name="code" class="cpp">#include <iostream>
#include <limits>
#include <typeinfo>
template<typename T>
struct Type{
static void print(){
std::cout << typeid(T).name() << ": range is ("
<<std::numeric_limits<T>::min() << ","
<<std::numeric_limits<T>::max() << ")\n";
}
};
int main(){
Type<char>::print();
Type<short>::print();
Type<int>::print();
Type<long>::print();
Type<float>::print();
Type<double>::print();
Type<long double>::print();
Type<unsigned>::print();
return 0;
}
今天群里有个大神说在.h文件中不要出现using namespace std;的语句,还不太能理解,难道是可能出现递归地一直include?先记录下来吧。
2.写一个程序打印出字母a,b,...,z和数字0,1,...9,以及他们的整数值。对所有其他可打印字符做同样的事情,再用十六进制形式做同样的事情。
<pre name="code" class="cpp"><pre name="code" class="cpp">#include <iostream>
char const char_table[] = "abcdefghijklmnopqrstuvwxyz0123456789-*&@";
int main(){
//第一个和第二个是一种情况,因为十进制是默认形式
for(int k = 0;k < sizeof(char_table)-1;k++)
std::cout << char_table[k] << "\t"
<< std::dec << int(char_table[k]) << std::endl;
for(int k = 0;k < sizeof(char_table)-1;k++)
std::cout << char_table[k] << "\t"
<< int(char_table[k]) << std::endl;
//显示指定为十六进制
for(int k = 0;k < sizeof(char_table)-1;k++)
std::cout << char_table[k] << "\t"
<< std::hex << int(char_table[k]) << std::endl;
return 0;
}
3.打印月份和天数
<pre name="code" class="cpp">#include<iostream>
#include<string>
struct Month{
//char const *name;
std::string name;
int length;
};
const int n_months = 12;
const Month month[n_months]
= {{"January",31},{"February",28},{"March",31},{"April",30},{"May",31},{"June",30},
{"July",31},{"August",31},{"September",30},{"October",31},{"November",30},{"December",31}};
int main(){
for(int k = 0;k != n_months;k++)
std::cout << month[k].name << ":\t" << month[k].length << std::endl;
return 0;
}
比较奇怪,对不齐,还是基础不够好,对齐的代码写不出来。