【2017年整理】实验1 熟悉VC开发环境,函数重载

上传人:爱****1 文档编号:952261 上传时间:2017-05-23 格式:DOC 页数:16 大小:346.04KB
返回 下载 相关 举报
【2017年整理】实验1  熟悉VC开发环境,函数重载_第1页
第1页 / 共16页
【2017年整理】实验1  熟悉VC开发环境,函数重载_第2页
第2页 / 共16页
【2017年整理】实验1  熟悉VC开发环境,函数重载_第3页
第3页 / 共16页
【2017年整理】实验1  熟悉VC开发环境,函数重载_第4页
第4页 / 共16页
【2017年整理】实验1  熟悉VC开发环境,函数重载_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《【2017年整理】实验1 熟悉VC开发环境,函数重载》由会员分享,可在线阅读,更多相关《【2017年整理】实验1 熟悉VC开发环境,函数重载(16页珍藏版)》请在金锄头文库上搜索。

1、实验 1 熟悉 VC开发环境,函数重载实验目的:熟悉 VC开发环境,掌握函数重载实验内容:1建立如图界面2编一个程序,用同一个函数名对 n个数据进行从小到大排序,数据类型可以是整型、单精度实型、双精度实型,用重载函数实现,数据定义如下int a = 1, 3, 2, 5, 6, 9, 0, 6; / 定义 afloat b = 1.6, 3.3, 2.8, 5.6, 6.8, 9.6, 0.6, 6.8; / 定义 bdouble c = 1.2, 3.1, 2.6, 5.8, 6.8, 9.8, 0.8, 6.2;/ 定义 c3.点击运行按钮排序,并用编辑框输出结果参考程序 1void CF

2、irstvcDlg:OnRun() / TODO: Add your control notification handler code hereCString message;CEdit * pEdit;pEdit=(CEdit*)this-GetDlgItem(IDC_MES); /找到编辑框空间pEdit-SetSel(0,-1); /先清屏 pEdit-Clear();int i=0;for(i=0;iSetSel(-1,-1); /自动卷屏到底端pEdit-ReplaceSel(message);参考程序 2m_var1定义/执行排序、显示输出void CQhtest2Dlg:OnB

3、utton1() char c110=0;char c2300=0;int a = 1, 3, 2, 5, 6, 9, 0, 6; / 定义 afloat b = 1.6f, 3.3f, 2.8f, 5.6f, 6.8f, 9.6f, 0.6f, 6.8f; / 定义 bdouble c = 1.2, 3.1, 2.6, 5.8, 6.8, 9.8, 0.8, 6.2;/ 定义 cint n1;for(n1=0;n1 ,c2);ss1(a);for(n1=0;n1 ,c2);ss1(b);for(n1=0;n1 ,c2);ss1(c);for(n1=0;n1data1n2)s1=data1n1

4、;data1n1=data1n2;data1n2=s1;void ss1(float data1)int n1,n2;float s1;for (n1=0;n1data1n2)s1=data1n1;data1n1=data1n2;data1n2=s1;void ss1(double data1)int n1,n2;double s1;for (n1=0;n1data1n2)s1=data1n1;data1n1=data1n2;data1n2=s1;附 1:基于 C语言 sprintf函数的深入理解对 C语言中的 sprintf函数进行了详细的分析介绍Printf与 sprintf由于 spri

5、ntf跟 printf在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致 sprintf比 printf有用得多。所以本文着重介绍 sprintf,有时也穿插着用用 pritnf。sprintf是个变参函数,定义如下:int sprintf( char *buffer, const char *format , argument );除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。printf 和 sprintf都使用格式化字符串来指 定串的格式,在格式串内部使用一些以“%”开头的格式说明符(fo

6、rmat specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要 的字符串。1. 格式化数字字符串sprintf最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代 itoa。如:/把整数 123打印成一个字符串保存在 s中。sprintf(s, “%d”, 123); /产生“123可以指定宽度,不足的左边补空格:sprintf(s, “%8d%8d”, 123, 4567); /产生:“ 123 4567当然也可以左对齐:sprintf(s, “%-8d%8d”, 1

7、23, 4567); /产生:“123 4567也可以按照 16进制打印:sprintf(s, “%8x”, 4567); /小写 16进制,宽度占 8个位置,右对齐sprintf(s, “%-8X”, 4568); /大写 16进制,宽度占 8个位置,左对齐这样,一个整数的 16进制字符串就很容易得到,但我们在打印 16进制内容时,通常想要一种左边补 0的等宽格式,那该怎么做呢?很简单,在表示宽度的数字前面加个 0就可以了。sprintf(s, “%08X”, 4567); /产生:“000011D7上面以”%d”进行的 10进制打印同样也可以使用这种左边补 0的方式。这里要注意一个符号扩展

8、的问题:比如,假如我们想打印短整数(short)-1的内存 16进制表示形式,在 Win32平台上,一个 short型占 2个字节,所以我们自然希望用 4个 16进制数字来打印它:short si = -1;sprintf(s, “%04X”, si);产生“FFFFFFFF” ,怎么回事?因为 spritnf是个变参函数,除了前面两个参数之外,后面的参数都不是类型安全的,函数更没有办法仅仅通过一个“%X”就能得知当初函数调用前参数压栈时 被压进来的到底是个 4字节的整数还是个2字节的短整数,所以采取了统一 4字节的处理方式,导致参数压栈时做了符号扩展,扩展成了 32位的整数-1,打印时 4个

9、位置不够了,就把 32位整数-1的 8位 16进制都打印出来了。如果你想看 si的本来面目,那么就应该让编译器做 0扩展而不是符号扩展(扩展时二进制左 边补 0而不是补符号位):sprintf(s, “%04X”, (unsigned short)si);就可以了。或者:unsigned short si = -1;sprintf(s, “%04X”, si);sprintf和 printf还可以按 8进制打印整数字符串,使用”%o” 。注意 8进制和 16进制都不会打印出负数,都是无符号的,实际上也就是变量的内部编码的直接的 16进制或 8进制表示。2. 控制浮点数打印格式浮点数的打印和格式

10、控制是 sprintf的又一大常用功能,浮点数使用格式符”%f”控制,默认保留小数点后 6位数字,比如:sprintf(s, “%f”, 3.1415926); /产生“3.141593但有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:”%m.nf”格式,其中 m表示打印的宽度,n 表示小数点后的位数。比如:sprintf(s, “%10.3f”, 3.1415626); /产生:“ 3.142sprintf(s, “%-10.3f”, 3.1415626); /产生:“3.142 ”sprintf(s, “%.3f”, 3.1415626); /不指定总宽度,产生:“3.142注意

11、一个问题,你猜int i = 100;sprintf(s, “%.2f”, i);会打出什么东东来?“100.00”?对吗?自己试试就知道了,同时也试试下面这个:sprintf(s, “%.2f”, (double)i);第一个打出来的肯定不是正确结果,原因跟前面提到的一样,参数压栈时调用者并不知道跟 i相对应的格式控制符是个”%f” 。而函数执行时函数本身则并不知道当年被压入栈里的是个整数,于是可怜的保存整数 i的那 4个字节就被不由分说地强行作为浮点数格式来解释了,整个乱套了。不过,如果有人有兴趣使用手工编码一个浮点数,那么倒可以使用这种方法来检验一下你手工编排的结果是否正确。J字符/As

12、cii 码对照我们知道,在 C/C+语言中,char 也是一种普通 的 scalable类型,除了字长之外,它与 short,int,long 这些类型没有本质区别,只不过被大家习惯用来表示字符和字符串而已。 (或许当年 该把这个类型叫做“byte” ,然后现在就可以根据实际情况,使用 byte或 short来把 char通过 typedef定义出来,这样更合适些)于是,使用”%d”或者”%x”打印一个字符,便能得 出它的 10进制或 16进制的 ASCII码;反过来,使用”%c”打印一个整数,便可以看到它所对应的ASCII字符。以下程序段把所有可见字符的 ASCII码对照表打印到屏幕上(这里

13、采用 printf,注意”#”与”%X”合用时自动为 16进制数增加”0X”前缀):for(int i = 32; i #include #include int main() srand(time(0);char s64;int offset = 0;for(int i = 0; i #include #include void main() SYSTEMTIME st; /定义存放时间的结构体char strTime256;int n=0;GetSystemTime(&st);n = sprintf(strTime,”Year:/t%d/n”,st.wYear);n += sprintf(

14、strTime+n,”Month:/t%d/n”,st.wMonth);n += sprintf(strTime+n,”Day:/t%d/n”,st.wDay);n += sprintf(strTime+n,”Date:/t%d/n”,st.wDayOfWeek);n += sprintf(strTime+n,”Hour:/t%d/n”,st.wHour);n += sprintf(strTime+n,”Minute:/t%d/n”,st.wMinute);n += sprintf(strTime+n,”Second:/t%d/n”,st.wSecond);n += sprintf(strTime+n,”MilliSecond:/t%d/n”,st.wMilliseconds);printf(”%s”,strTime);system(”pause”);VC运行参考

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 实验/测试

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号