ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:28.64KB ,
资源ID:11174208      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11174208.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(工作笔记.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

工作笔记.docx

1、工作笔记工作笔记目录1. 字符串与数字之间的转换2. 动态数组(C+)3. C+ vector4. C/C+中的sizeof详解5. I/O格式控制记1(2010-2-7)一 字符串转数字1.CRT函数 (需要的头文件 ) ASCII UNICODE TCHAR VS2005 int atoi _wtoi _tstoi _ttoi _atoi_l _wtoi_l long atol _wtol _tstoi _ttoi _atoi_l _wtoi_l _int64 _atoi64 _wtoi64 _tstoi64 _ttoi64 _atoi64_l _wtoi64_l float _atofl

2、t _atoflt_l double atof _wtof _tstof _ttof _atof_l _wtof_l _atodbl _atodbl_l long double _atoldbl _atoldbl_l 2.使用sscanf 头文件sscanf() 从一个字符串中读进与指定格式相符的数据。原型:int sscanf( const char *buffer,const char *format ,argument . );int scanf(const char *format ,argument. );其中参数 buffer:输入存储的数据;format:格式控制字符串sscan

3、f与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。例:(msdn里的例子)#include int main( void ) char tokenstring = 15 12 14.; char s81; char c; int i; float fp; / Input various data from tokenstring: / max 80 character string: sscanf( tokenstring, %80s, s ); / C4996 sscanf( tokenstring, %c, &c ); / C4996 ss

4、canf( tokenstring, %d, &i ); / C4996 将字符串转化为整数 sscanf( tokenstring, %f, &fp ); / C4996 将字符串转化为浮点数 / Note: sscanf is deprecated; consider using sscanf_s instead / Output the data read printf( String = %sn, s ); printf( Character = %cn, c ); printf( Integer: = %dn, i ); printf( Real: = %fn, fp );输出结果:

5、String = 15Character = 1Integer: = 15Real: = 15.000000其实sscanf很强大,功能类似于正则表达式,可以用于比较复杂的字符串处理。当只是单纯的将字符串转化为整数建议用第一种方法。参考 SDK:StrToInt头文件 导入库 shlwapi.lib 二 数字转字符串 1.CRT函数 ASCII UNICODE TCHAR VS2005 int itoa _itoa _itow _itot long ltoa _ltoa _ltow _ltot _int64 _i64toa _i64tow _i64tot double gcvt _gcvt _

6、ecvt _fcvt _wtof _tstof _ttof _gcvt_s _ecvt_s _fcvt_s 2.使用sprintf 头文件原型:int sprintf(char *buffer,const char *format ,argument . ); 将字符串格式化,buffer 格式化输出的字符串;format格式控制字符串;返回字符串长度。例:(msdn例子)/ crt_sprintf.c/ compile with: /W3/ This program uses sprintf to format various/ data and place them in the stri

7、ng named buffer.#include int main( void ) char buffer200, s = computer, c = l; int i = 35, j; float fp = 1.7320534f; / Format and print various data: j = sprintf( buffer, String: %sn, s ); / C4996 j += sprintf( buffer + j, Character: %cn, c ); / C4996 j += sprintf( buffer + j, Integer: %dn, i ); / C

8、4996 整数转化为字符串 j += sprintf( buffer + j, Real: %fn, fp );/ C4996 浮点数转化为字符串 / Note: sprintf is deprecated; consider using sprintf_s instead printf( Output:n%sncharacter count = %dn, buffer, j );输出: String: computer Character: l Integer: 35 Real: 1.732053character count = 793.:StringCbPrintf4.MFC/ATL:C

9、String:Format例:CString str; str.Format(_T(Floating point: %.2fn), 12345.12345); _tprintf(%s, (LPCTSTR) str); 输出:Floating point: 12345.12 三 补充:1 函数原型字符串转intint atoi(const char *string); _int64 _atoi64(const char *string); int _wtoi(const wchar_t *string); _int64 _ wtoi64(const char *string);字符串转longl

10、ong atol(const char * string); long _wtol(const wchar_t *string);字符串转doubledouble atof(const char *string); double _wtof(const wchar_t *string);int转字符串cahr *_itoa( int value,char *string,int radix); char *_i64toa(_int64 value,char *string,int radix); char * _ui64toa(unsigned _int64 value,char *strin

11、g, int radix); wchar_t * _itow(int value,wchar_t *string, int radix); wchar_t * _i64tow(_int64 value,wchar_t *string, int radix); wchar_t * _ui64tow(unsigned _int64 value,wchar_t *string, int radix); 参数的意义:value 是指要转换的整数,sring 是用来存放转换后结果的便利,radix是用来说明转换成几进制的数据,默认值是十进制数的。转换的进制范围是二进制到三十六进制。long转字符串cha

12、r *_ltoa( long value,char *string, int radix ); wchar_t *_ltow( long value, wchar_t *string, int radix ); 其中,参数 value 为被转换的值,参数string为字符串缓冲区,radix为进制。double转字符串char *_fcvt( double value, int count, int *dec, int *sign ); 其中参数value 为双精度数,参数count为转换的小数点后面的位数,dec表示小数点的位置, sign 表示符号。2 float与double的区别单精度

13、浮点数在机内占4个字节,用32位二进制描述。 双精度浮点数在机内占8个字节,用64位二进制描述。 浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。 数符占1位二进制,表示数的正负。 指数符占1位二进制,表示指数的正负。 尾数表示浮点数有效数字,0.xxxxxxx,但不存开头的0和点 指数存指数的有效数字。 指数占多少位,尾数占多少位,由计算机系统决定。 可能是数符加尾数占24位,指数符加指数占8位 - float. 数符加尾数占48位,指数符加指数占16位 - double. 知道了这四部分的占位,按二进制估计大小范围,再换算为十进制,就是你想知道的数值范围。 对编程人员来

14、说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。Example:#include #include main() CString str; str.Format(_T(#%Xn), 15); _tprintf(%s, (LPCTSTR) str); 记二(2010-4-1)2动态数组在C+中实现变长数组 1.变长一维数组 这里说的变长数组是指在编译

15、时不能确定数组长度,程序在运行时需要动态分配内存空间的数组。实现变长数组最简单的是变长一维数组,你可以这样做: /文件名: array01.cpp #include using namespace std; int main() int len; cinlen; /用指针p指向new动态分配的长度为len*sizeof(int)的内存空间 int *p=new intlen; . delete p; return 0; 注意int *p=new intlen;这一句,你不能这样做: int plen; C+编译器会报错说len的大小不能确定,因为用这种形式声明数组,数组的大小需要在编译时确定。

16、而且这样也不行: int p=new intlen; 编译器会说不能把int*型转化为int型,因为用new开辟了一段内存空间后会返回这段内存的首地址,所以要把这个地址赋给一个指针,所以要用int *p=new intlen; array01.cpp实现了一个变长的一维数组,但是要养成一个好习惯,就是注意要注销指针p,使程序释放用new开辟的内存空间。 当然使用C+标准模版库(STL)中的vector(向量)也可以实现变长数组: /文件名: array02.cpp #include #include using namespace std; int main() int len; cinlen

17、; vector array(len);/声明变长数组 for(int i=0;ilen;i+) arrayi=i; coutarrayit; return 0; 这里的变长数组让我联想到了java的java.util包中的vector和C#中的ArrayList,它们也可以在各自的语言中实现变长数组。不过C+中的vector不能像C#一样有托管的垃圾回收机制回收被占用的内存空间,但是你可以在使用完vector后调用vector()析构函数释放内存。 2.变长n维数组 变长的n维数组实现起来有些麻烦,但是在工程与软件设计应用中常使用的是二维数组,所以在这里着重介绍变长的二维数组,变长的n维数组

18、可以按照类似的方法实现。首先看一个经典的用C实现变长二维数组的例子: /文件名: array03.c #include #include void main() int x,y,i,j; float *a,*b; printf(请输入你所求解的线性方程组的行数x:x=); scanf(%d,&x); printf(请输入你所求解的线性方程组的列数y:y=); scanf(%d,&y); a=(float *)malloc(sizeof(float *) *x); b=(float *)malloc(sizeof(float) *x); for(i=0;ix;i+) *(a+i)=(float

19、*)malloc(sizeof(float)*y); /*读入数据*/ printf(请按行的顺序依次输入系数的值(共%d项):,x*y); for(i=0;i=x-1;i+) for(j=0;j=y-1;j+) scanf(%f,&aij); printf(请按列的顺序依次输入常数的值(共%d项):,x); for(j=0;j=x-1;j+) scanf(%f,&bj); printf(您输入方程组的增广矩阵为:n); for(i=0;i=x-1;i+) for(j=0;j=y-1;j+) printf(%.5f,aij); printf(%.5f,bi); printf(n); free(

20、b); for(i=0;ix;i+) free(*(a+i); 那么用C+怎样实现呢?在C+中可以通过new和delete运算符动态开辟和释放空间,其中new与C中malloc函数的功能相似,delete与C中free函数的功能相似。用C+实现变长二维数组时可以采用两种方法:双指针方法和使用STL中vector(向量)的方法。 首先介绍一下双指针方法,在这里双指针就是指像指针的指针,比如你可以这样声明一个数组: int *p = new int*num1; 而对每一个*p(一共num1个*p)申请一组内存空间: for(int i=0; inum1; +i) pi = new intnum2;

21、 其中,num1是行数,num2是数组的列数。测试的源程序如下: /文件名: array04.cpp #include #include using namespace std; int main() int num1,/行数 num2;/列数 coutPlease enter the number for row and column: num1 num2; /为二维数组开辟空间 int *p = new int*num1; for(int i=0; inum1; +i) pi = new intnum2; for(int j=0;jnum1;j+) for(int k=0;knum2;k+

22、) pjk=(j+1)*(k+1); coutsetw(6)pjk:setw(8)&pjk; coutendl; /释放二维数组占用的空间 for(int m=0;mnum1;m+) delete pm; delete p; return 0; 以下是运行结果: Please enter the number for row and column: 4 5 1:004915F0 2:004915F4 3:004915F8 4:004915FC 5:00491600 2:00491180 4:00491184 6:00491188 8:0049118C 10:00491190 3:0049114

23、0 6:00491144 9:00491148 12:0049114C 15:00491150 4:00491100 8:00491104 12:00491108 16:0049110C 20:00491110 Press any key to continue 程序清单array04.cpp可以显示分配的内存空间单元的地址,大家可以看到,由于数组空间是动态分配的,数组行之间的地址空间是不连续的,因为不同行的数组元素的地址空间是用不同的new来分配的。而每一行之中列之间的地址空间是连续的。 那么用vector(向量)怎样实现二维数组呢?以下给出源程序: /文件名: array05.cpp #i

24、nclude #include #include using namespace std; int main() int i, j, m, /行数 n; /列数 cout mn; /注意下面这一行:vector之间要有空格!否则会被认为是重载。 vectorvector vecInt(m, vector(n); for (i = 0; i m; i+) for (j = 0; j n; j+) vecIntij = i*j; for (i = 0; i m; i+) for (j = 0; j n; j+) coutsetw(5)vecIntij:setw(9)&vecIntij; coute

25、ndl; return 0; 以下是运行结果: input value for m,n:3 4 0: 00491180 0: 00491184 0: 00491188 0: 0049118C 0: 00491140 1: 00491144 2: 00491148 3: 0049114C 0: 00491100 2: 00491104 4: 00491108 6: 0049110C Press any key to continue 大家可以看到,这里vector中元素的内存的地址分配也有同双指针实现的二维数组有同样的特点。不过用vector的方法比使用双指针简单地多,分配内存空间时会更安全,数

26、组初始化代码也更简单,所以本人建议使用STL中的vector来实现变长多维数组。以下是一个变长三维数组:) /文件名: array06.cpp #include #include #include using namespace std; int main() int i, j, k, m, /一维坐标 n, /二维坐标 l; /三维坐标 cout mnl; vectorvectorvector vecInt(m, vectorvector (n, vector(l); for (i = 0; i m; i+) for (j = 0; j n; j+) for(k = 0; k l; k+)

27、vecIntijk = i+j+k; for (i = 0; i m; i+) for (j = 0; j n; j+) for(k = 0; kl; k+) coutsetw(5)vecIntijk:setw(9)&vecIntijk; coutendl; coutendl; return 0; 运行结果: input value for m,n,l:2 3 4 0: 00492FE0 1: 00492FE4 2: 00492FE8 3: 00492FEC 1: 00492FA0 2: 00492FA4 3: 00492FA8 4: 00492FAC 2: 00492F60 3: 00492F64 4: 00492F68 5: 00492F6C 1: 00492EC0 2: 00492EC4 3: 0049

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1