挑战c++(一)

//c++
#include<iostream>
using namespace std;
int main(){

	int a,b,sum;
	cout<<"挑战 c++,I do believe it!"<<endl;
	cout<<"Enter a number:\n";
	cin>>a;
	cout<<"Enter a number again:\n";
	cin>>b;
	sum=a+b;
	cout<<"a+b="<<a<<"+"<<b<<"="<<sum;
	return 0;
}

命名空间:using namespace std;
指定用std名字空间(namespace),这是C++中的新特性。名字空间可以帮助程序员开发新的软件组件而不会与现有软件组件产生命名冲突。开发类库的一个问题是类和函数名可能已经使用。名字空间能为每个新软件组件保持惟一的名称

#include<iostream>
//using namespace std;
int main(){

	int a,b,sum;
	std::cout<<"挑战 c++,I do believe it!"<<endl;
	std::cout<<"Enter a number:\n";
	std::cin>>a;
	std::cout<<"Enter a number again:\n";
	std::cin>>b;
	sum=a+b;
	std::cout<<"a+b="<<a<<"+"<<b<<"="<<sum;
	return 0;
}


C++变量名可以是任何有效标识符。标识符是一系列由字母、数字和下划线( _)组成的字符串,不能以数字开头。c++区分大小写的;


c++转义序列

\n 换行符,是屏幕光标移到屏幕下一行开头

\r 回车符,使屏幕光标当前行开头,不移到下一行

\t 水平制表符,是屏幕光标移到下一个制表位

\a 警告,发出系统警告声音

\\ 反斜杠,打印反斜杠符

\'' 双引号,打印双引号

c++数据类型

long double
double
float
unsigned long int (同unsigned long)
long int (同long)
unsigned int (同unsigned)
int
unsigned short int (同unsigned short)
short int (同short)
unsigned char
short
char

旧式头文件 说明
旧式头文件(本书前面使用)
(assert.h> 包含增加诊断以程序调试的宏和信息。这个头文件的新版本为<cassert>
<ctype.h> 包含测试某些字符属性的函数原型和将小写字母变为大写字母,将大写字母变为小
写字母的函数原型。这个头文件的新版本为<cctype>
<float.h> 包含系统的浮点长度限制。这个头文件的新版本为<cfloat>
<limits.h> 包含系统的整数长度限制。这个头文件的新版本为<climits>
<math.h> 包含数学库函数的函数原型。这个头文件的新版本为<cmath>
<stdio.h> 包含标准输入/输出库函数的函数原型及其使用信息。这个头文件的新版本为<cstdio>
<stdlib.h> 包含将数字变为文本、将文本变为数字、内存分配、随机数和各种其它工具函数的函
数原型。这个头文件新版本为<cstdlib>
<string.h> 包含C语言格式的字符串处理函数的函数原型。这个头文件的新版本为<cstring>
<time.h> 包含操作时间和是期的函数原型和类型。这个头文件的新版本为<ctime>
<iostream.h> 包含标准输入/输出函数的函数原型。这个头文件的新版本为<iostream>
<iomanip.h> 包含能够格式化数据流的流操纵算子的函数原型。这个头文件的新版本为<iomanip>
<fstream.h> 包含从磁盘文件输入输出到磁盘文件的函数原型。这个头文件的新版本为<fstream>


标准库头文件 说明
<utility> 包含许多标准库头文件使用的类和函数
<vector>、<list>、 包含实现标准库容器的类的头文件。容器在程序执行期间用于存放数据。我们将在
<deque>、<queue>、 “标准模板库”一章介绍这些头文件
<stack>、<map>、
<set>、<bitset>
<functional> 包含用于标准库算法的类和函数
<memory> 包含用于向标准库容器分配内存的标准库使用的类和函数
<iterator> 包含标准库容器中操作数据的类
<algorithm> 包含标准库容器中操作数据的函数
<exception> 这些头文件包含用于异常处理的类(见第13章)
<stdexcept>
<string> 包含标准库中string类的定义(见第19章)
<sstream> 包含从内存字符串输入和输出到内存字符串的函数原型
<locale> 包含通常在流处理中用于处理其它语言形式数据的类和函数(例如货币格式、
排序字符串、字符表示等)
<limits> 包含定义每种计算机平台特定数字数据类型的类
<typeinfo> 包含运行时类型信息的类(在执行时确定数据类型)


图 3.6 常用C++标准库头文件

c++ 存储类 作用域 连接

存储类-->auto register(主要定义函数体内的局部变量和参数,且两者不能同时使用) extern (调用外部变量或者函数) static(静态的)

作用域-->一个标识符一共有:函数范围,文件范围,块范围,函数原型范围,类范围等几个作用域。

随机数使用

//c++
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main(){
    int i;
    //unsigned int seed;
    //cin>>seed;
    //void srand(unsigned int);-->cstdlib
    //time_t time(time_t*);-->ctime
    srand(time(0));

    //int rand();-->cstdlib
    //i=rand();
    for(int j=0;j<10;j++){
       i=1+rand()%100;   //将会产生1-100之间的随机数,i=base+rand()%width
       cout<<i<<" ";
    }
	return 0;
}


i=a+rand()%b,其中a是位移值(等于所要的连续整数范围的开始值),b是比例因子(即由连续整数构成的该范围的宽度)。练习中将介绍如何从一组非连续整数中随机选择整数。

C++ const使用详解

一 const基础

  如果const关键字不涉及到指针,我们很好理解,下面是涉及到指针的情况:

  int b = 500;

  const int* a = &b; [1]

  int const *a = &b; [2]

  int* const a = &b; [3]

  const int* const a = &b; [4]

  如果你能区分出上述四种情况,那么,恭喜你,你已经迈出了可喜的一步。不知道,也没关系,我们可以参考《Effective c++》Item21上的做法,

  如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;

  如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。

  因此,[1]和[2]的情况相同,都是指针所指向的内容为常量(const放在变量声明符的位置无关),这种情况下不允许对内容进行更改操作,如不能*a = 3 ;

  [3]为指针本身是常量,而指针所指向的内容不是常量,这种情况下不能对指针本身进行更改操作,如a++是错误的;

  [4]为指针本身和指向的内容均为常量。

  

二 作为参数

  void display(const double& r);或者void display(const double* r);

  说明:

  1 在引用或者指针参数的时候使用const限制是有意义的,而对于值传递的参数使用const则没有意义

  2 保证引用的变量的值不被改变

  3 const在double前或者后面意思相同,只是不同的人的写法不同

  

三 const对象

  声明为const的对象只能访问类中声明为const的成员函数,不能调用其它成员函数.

  

四 const成员函数

  类型说明符 函数名(参数表)const; void print(int i) const;

  说明:

  1 const是函数类型的一个组成部分,因此在实现部分也要带const关键字.

  2 常成员函数不能更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数.

  

五 使用const的一些建议

  1 要大胆的使用const,这将给你带来无尽的益处,但前提是你必须搞清楚原委;

  2 要避免最一般的赋值操作错误,如将const变量赋值,具体可见思考题;

  3 在参数中使用const应该使用引用或指针,而不是一般的对象实例,原因同上;

  4 const在成员函数中的三种用法(参数、返回值、函数)要很好的使用;

  5 不要轻易的将函数的返回值类型定为const;

  6除了重载操作符外一般不要将返回值类型定为对某个对象的const引用;

一元作用域运算符
可以声明同名的局部变量和全局变量。C++提供一元作用域运算符(::),可以在同名局部变量的作用域中访问全局变量。一元作用域运算符不能在外层块中访问同名的局部变量。如果在作用域内没有与全局变量同名的局部变量,则可以直接访问全局变量,而不用一元作用域运算符。

#include <iostream.h>
#include <iomanip.h>
const double PI = 3.14159265358979;
 int main( )
{
  const float PI = static_cast< float >( ::PI );

  cout << setprecision( 20 )<<" Local float value of PI = "<< PI << "\nGlobal double value of PI = "<< ::PI << endl;

 return 0;
}

输出结果:
Local float value of PI = 3.14159
Global double value of PI = 3.14159265358979


函数重载
C++允许定义多个同名函数,只要这些函数有不同参数集(至少有不同类型的参数)。这个功 能称为函数重载(function overloading)。调用重载函数时,C++编译器通过检查调用中的参数个数、 类型和顺序来选择相应的函数。函数重载常用于生成几个进行类似任务而处理不同数据类型的同名 函数


函数模板
重载函数通常用于不同数据类型用不同程序逻辑进行类似的操作。如果每种数据类型的程序逻辑和操作相同.那么用函数模板(fuction template)完成这项工作更加简洁和方便。程序员编写一个函数模板定义。根据函数调用中提供的参数类型,C++自动产生不同模板函数(template function)
来处理不同类型的调用。这样,定义一个函数模板即可定义一系列的解决方案。
所有的函数模板定义都是以关键字template开头,之后是用尖括号(< >)括起来的形式参数表。每一个形式参数之前都有关键字class。形式参数是内部类型或用户自定义类型,指定函数的参数类型及返回类型,在函数定义体中声明变量,然后和任何其他函数中一样进行函数定使用如下的函数模板定义:
template < class T >
T maximum{ T valuel, T value2, T value3 )
{
T max = valuel;
if ( value2 > max )
max = value2;
if ( value3 > max )
max = value3;
return max;
}
这个函数模板声明一个形式参数T为函数maximum要测试的数据类型。编译器发现程序源代码中的maximum调用时,传人maximum的数据类型代替整个模板定义中的T,C++生成一个完整函数,确定三个指定数据类型值的最大值,然后编译新生成的函数。可以看出,模板就是一种代码产生工具。
实例化三个函数:一个取三个int值,一个取三个double值,一个取三个char值。int类型的实例化如下所示:
int maximum(int valuel int value2, int value3 )
{
int max - valuel;
if ( value2 > max
max = value2;
if ( value3 > max
max = value3;
return max;
}
板定义中的每种参数都要在函数的参数表中至少出现一次。类型参数名在特定模板定义的形式参数表中必须惟一。

用maximum确定三个int值、三个double值和三个char值的最大值。
#include <iostream.h>
template < class T >
T maximum( T value1, T value2, T value3 )
{
T max = valuel;
if( value2 > max )
if ( value3 > max )
max = value3;
return max;
}
int main( )
{
int intl, int2, int3;
cout << "Input three integer values: ";
cin >> i,tl >> int2 >> int3;
cout << "The maximum i.teger value is:"
<< maximum{ intl, int2, int3 ); // int version
double doublel, double2, double3;
cout << "\nInput three double values: ";
cin >> doublel >> double2 >> double3;
cout << "The maximum double value is:"
<< maximum( doublel, double2, double3 ); // double version
char charl, char2, char3;
cout << "\nInput three characters: ";
cin >> charl >> char2 >> char3;
cout << "The maximum character value is:"
<< maximum( charl, char2, char3 ) // char version
<< endl;
return 0;
}

输出结果:
Input three integer values: 1 2 3
The maximum integer value is: 3
Input three double values:3.3 2.2 1.1
The maximum double value is: 3.3
Input three characters: A C B
The maximum character value is: C

术语
ampersand (&) suffix &号后缀 caller 调用者
argument in a function call 函数调用中的参数 calling function 调用函数
auto storage class specifier auto存储类说明符 coercion of arguments 强制参数类型转换
automatic storage 自动存储 collaboration 协作
automatic stooge class 自动存储类 component 组件
automatic variable 自动变量 const
base case recursion 递归中的基本情况 constant variable 常量变量
block 块 copy of avalue 数值副本
bilk scope 块范围 dangling reference 悬挂引用
C++standard library C++标准库 default function arguments 默认函数参数
call a function 调用函数 divide and conquer 分而治之,各个击破
call-by-reference 按引用调用 elementofchance 机会元素
call-bY-value 按值调用 enum
called function 被调用函数 enumeration 枚举
enumeration constant 枚举常量 rand
extern storage class specifier extern 存储类说明符 random number generation 随机数产生
factorial function 阶乘函数 randomize 随机化
file scope 文件范围 RAND_MAX
function 函数 read-only variable 只读变量
function call 函数调用 recursion 递归
function declaration 函数声明 recursive call 递归调用
function definition 函数定义 recursive function 递归函数
function overloading 函数重载 reference parameter 引用参数
function prototype 函数原型 reference type 引用类型
function scope 函数范围 register storage class specifier register 存储类说明符
function signature 函数签名 return
global variable 全局变量 return-value-type 返回值类型
header file 头文件 scaling 比例缩放
infinite recursion 无穷递归 scope 作用域(范围)
information hiding 信息隐藏 shifting 位移
inline function 内联函数 side effect 副作用
invoke a function 调用函数 signature 签名
iteration 迭代 simulation 模拟
linkage 连接 software engineering 软件工程
linkage specification 连接指定 software reusability 软件复用
local variable 局部变量 srand
math library functions 数学库函数 standard library header files 标准库头文件
mixed-type expression 混合类型表达式 static storage class specifier static 存储类说明符
modular program 模块化程序 static storage duration 静态存储期
name decoration 名字修饰 static variable static 变量
name mangling 名字改编 storage class specifier 存储类说明符
named constant 命名常量 storage class 存储类
optimizing compiler 优化编译器 template
overloading 重载 template function 模板函数
parameter in a function definition 函数定义中的 time
参数 type-safe linkage 类型安全连接
principle of least privilege 最低权限原则 unary scope resolution operator 一元作用域运
programmer-definnd function 程序员定义的函数 算符
promotion hierarchy 层次提升 unsigned
void

1.36 编写一个程序,读取5位数,将各个位分开,并在打印时在位与位之间增加三个空格。提示:用整数和求模运算符。例如,用户输入42339时,程序打印:
4 2 3 3 9

1.26 编写程序,从键盘输入三个值,度打印其和、平均数、积、最小值和最大值。屏幕对话如下所示:
Input three diffrent integers: 13 27 14
Sum is 54
Average is 18
Product is 4914
Smallest is 13
Largest is 27

回文是指数字或文本正向和逆向读时都一样的文本。例如,下列五位整数都是回文:
12321、55555、45554和11611。编写一个程序,读取五位整数并确定其是否回文。提示:用除法和求模运算符将数字分成各个位。
#include<iostream>
using namespace std;
int main(){
    int num;
    cout<<"Please a 5bits number:\n";
    cin>>num;
    while(num>99999||num<10000){
    	cin>>num;
    }
    //cout<<num<<endl;
    int a,b,c,d,e;
    a=num/10000;
    b=(num%10000)/1000;
    c=(num%1000)/100;
    d=(num%100)/10;
    e=num%10;
    cout<<"a="<<a;
    cout<<" b="<<b;
    cout<<" c="<<c;
    cout<<" d="<<d;
    cout<<" e="<<e<<";\n";
    if((a==b)&&(d==e)){
    	cout<<"This is a huiwen number\n";
    }else{
    	cout<<"This is not a huiwen number\n";
    }
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值