




已阅读5页,还剩84页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计实习,李文新,内容提要,课程简介输入输出位运算函数指针命令行参数库函数程序风格,课程简介,课程定位课程内容授课方式成绩评定教材进度安排课程网页,信息学院课程体系图,课程内容,1.掌握vc+编程环境能够使用该环境进行基于控制台输入输出及文件输入输出的C及C+程序的源代码编辑、编译连接、调试和运行2.巩固和增强程序设计和代码实现能力高精度计算、日期的处理、字符串的处理、链表的概念、实现和应用、枚举和递归的求解方法。3.学习用C+语言编程基本概念(类、对象、数据抽象、重载、继承、虚函数、多态等)及其语法实现。C+程序基本构成、输入输出流及文件处理、模板、字符串处理、文件处理及标准模板库等。,授课方式,课上讲授、练习及测验复习、自学和书面作业上机实习并完成上机作业期中及期末考试,成绩评定,期中考试15%上机考试期末考试50%有B卷,考试内容为作业平时成绩:作业和课堂表现35%平时作业成绩与B卷成绩加权作业包括课堂上留的,每周两个小时的到机房上机(期中考试前),以及期中考试后的Blocks程序对战(不必到机房,按比赛成绩给分),教材,程序设计导引及在线实践C+大学教程(第二版)HarveyM.DeitelPaulJamesDeitel邱仲潘等译冯平审校电子工业出版社2004,进度安排(暂定),第一讲:C+基础知识巩固第二讲:简单计算题和数制转换以及日期处理第三讲:字符串处理第四讲:高精度计算第五讲:枚举第六讲:递归第七讲:搜索第八讲:动态规划第九讲:链表和二叉树第十讲:习题课,进度安排(暂定),第十一讲:类和对象(一)第十二讲:类和对象(二)第十三讲:运算符重载第十四讲:继承第十五讲:多态第十六讲:输入/输出流、文件操作第十七讲:类模板、函数模板、string类第十八讲:标准模板库(一)第十九讲:标准模板库(二)第二十讲:标准模板库(三)第二十一讲:标准模板库(四)第二十二讲:习题课第二十三讲:总结和答疑,课程网页,内容提要,课程简介输入输出位运算函数指针命令行参数库函数程序风格,C语言的输入输出语句#includescanf()将输入读入变量printf()将变量内容输出,scanf()语句(函数),intscanf(constchar*,.);参数可变的函数第一个参数是格式字符串,后面的参数是变量的地址,函数作用是按照第一个参数指定的格式,将数据读入后面的变量参数可变的函数的参考阅读(不要求掌握),scanf返回值0成功读入的数据项个数;0没有项被赋值;EOF第一个尝试输入的字符是EOF(结束)(对POJ上某些题,返回值为EOF可以用来判断输入数据已经全部读完),printf()语句(函数),intprintf(constchar*,.);参数可变的函数第一个参数是格式字符串,后面的参数是待输出的变量,函数作用是按照第一个参数指定的格式,将后面的变量在屏幕上输出,返回值:成功打印的字符数;返回负值为出错,%d读入或输出int变量%c读入或输出char变量%f读入或输出float变量%s读入或输出char*变量%lf读入或输出double变量%e以科学计数法格式输出数值%x以十六进制读入或输出int变量%I64d读入或输出_int64变量(64位整数)%p输出指针地址值%.5lf输出浮点数,精确到小数点后5位,格式字符串里的格式控制符号:,#includeintmain()inta;charb;charc20;doubled=0;floate=0;intn=scanf(%d%c%s%lf%f,intn=scanf(%d%c%s%lf%f,input:123ateststring8.99.2output:123ateststring8.9000009.200000e+0009.2000005input:123ateststring8.99.2output:123ateststring8.9000009.200000e+0009.2000005input:123ateststring8.99.2output:123a0.0000000.000000e+0000.0000003,#includeintmain()inta,b;charc;chars20;_int64n=9876543210001111;scanf(%d%c,%s%x%I64d,input:-28K,testffee1234567890123456output:-28ffffffe44294967268test0012FF60ffee655181234567890123456,main()char*s;scanf(“%s”,s);错在何处?,常见错误:,错在s不知道指向何处,往其指向的地方写入数据,不安全,char*gets(char*s);从标准输入读取一行到字符串s如果成功,返回值就是s地址如果失败,返回值是NULL可以根据返回值是NULL判定输入数据已经读完调用时要确保s指向的缓冲区足够大,否则可能发生内存访问错误,读取一行:,#includeintmain()chars200;char*p=gets(s);printf(%s:%s,s,p);return0;input:WelcometoBeijing!output:WelcometoBeijing!:WelcometoBeijing!,读取一行:,intsscanf(constchar*buffer,constchar*format,address,.);和scanf的区别在于,它是从buffer里读取数据intsprintf(char*buffer,constchar*format,argument,.);和printf的区别在于,它是往buffer里输出数据,sscanf函数和sprintf函数,#includeintmain()inta,b;charc;chars20;charszSrc=-28K,testffee1234567890123456;charszDest200;_int64n=9876543210001111;sscanf(szSrc,%d%c,%s%x%I64d,output:-28ffffffe44294967268test0012FF60ffee655181234567890123456,五个函数,一个概念,scanfprintfsscanfsprintfgets补码,内容提要,课程简介输入输出位运算函数指针命令行参数库函数程序风格,位运算,有时我们需要对某个整数类型变量中的某一位(bit)进行操作,比如,判断某一位是否为1,或只改变其中某一位,而保持其他位都不变。C/C+语言提供了“位运算”的操作,能够做到类似的操作。C/C+语言提供了六种位运算符来进行位运算操作:,按位异或运算符是双目运算符。其功能是将参与运算的两操作数各对应的二进制位进行异或操作,即只有对应的两个二进位不相同时,结果的对应二进制位才是1,否则为0。例如:表达式“2118”的值是7(即二进制数111)。21:0000000000000000000000000001010118:000000000000000000000000000100102118:00000000000000000000000000000111异或运算的特点是:如果ab=c,那么就有cb=a以及ca=b。此规律可以用来进行最简单的加密和解密。,按位异或,按位非运算符“”是单目运算符。其功能是将操作数中的二进制位0变成1,1变成0。例如,表达式“21”的值是无符号整型数0 xffffffea21:0000000000000000000000000001010121:11111111111111111111111111101010而下面的语句:printf(%d,%u,%x,21,21,21);输出结果就是:-22,4294967274,ffffffea,按位非,左移运算符“”是双目运算符。其计算结果是将左操作数的各二进位全部左移若干位后得到的值,右操作数指明了要左移的位数。左移时,高位丢弃,右边低位补0。左移运算符不会改变左操作数的值。,左移运算符,例如,常数9有32位,其二进制表示是:00000000000000000000000000001001因此,表达式“94”的值,就是将上面的二进制数左移4位,得:00000000000000000000000010010000即为十进制的144。实际上,左移1位,就等于是乘以2,左移n位,就等于是乘以2n。而左移操作比乘法操作快得多。,左移运算符,#includemain()intn1=15;shortn2=15;unsignedshortn3=15;unsignedcharc=15;n1=15;n2=15;n3=15;c=6;printf(n1=%x,n2=%d,n3=%d,c=%x,c4=%d,n1,n2,n3,c,c4);上面程序的输出结果是:n1=78000,n2=-32768,n3=32768,c=c0,c4=3072,n1:00000000000000000000000000001111n2:0000000000001111n3:0000000000001111c:00001111n1=15:(变成78000)00000000000001111000000000000000n2=15:,(变成-32768)1000000000000000n3=15:(变成32768)1000000000000000c=6;(变成c0)11000000c4这个表达式是先将c转换成整型00000000000000000000000011000000然后再左移。c”是双目运算符。其计算结果是把“”的左操作数的各二进位全部右移若干位后得到的值,要移动的位数就是“”的右操作数。移出最右边的位就被丢弃。对于有符号数,如long,int,short,char类型变量,在右移时,符号位(即最高位)将一起移动,并且大多数C/C+编译器规定,如果原符号位为1,则右移时左边高位就补充1,原符号位为0,则右移时高位就补充0。,右移运算符,对于无符号数,如unsignedlong,unsignedint,unsignedshort,unsignedchar类型的变量,则右移时,高位总是补0。右移运算符不会改变左操作数的值。实际上,右移n位,就相当于左操作数除以2n,并且将结果向下取整。-254=-2-24=-1184=1,右移运算符,#includemain()intn1=15;shortn2=-15;unsignedshortn3=0 xffe0;unsignedcharc=15;n1=n12;n2=3;n3=4;c=3;printf(n1=%x,n2=%d,n3=%x,c=%x,n1,n2,n3,c);上面的程序输出结果是:n1=3,n2=-2,n3=ffe,c=1,n1:00000000000000000000000000001111n2:1111111111110001n3:1111111111100000c:00001111n1=2:变成300000000000000000000000000000011n2=3:变成-21111111111111110n3=4:变成ffe0000111111111110c=3;变成100000001,思考题:有两个int型的变量a和n(0n)其中“类型名”表示被指函数的返回值的类型。“(参数类型1,参数类型2,)”中则依次列出了被指函数的所有参数的类型。例如:int(*pf)(int,char);表示pf是一个函数指针,它所指向的函数,返回值类型应是int,该函数应有两个参数,第一个是int类型,第二个是char类型。,函数指针,可以用一个原型匹配的函数的名字给一个函数指针赋值。要通过函数指针调用它所指向的函数,写法为:函数指针名(实参表);下面的程序说明了函数指针的用法,#includevoidPrintMin(inta,intb)if(ab)printf(%d,a);elseprintf(%d,b);intmain()void(*pf)(int,int);intx=4,y=5;pf=PrintMin;pf(x,y);return0;上面的程序输出结果是:4,函数指针应用:快速排序库函数qsort,voidqsort(void*base,intnelem,unsignedintwidth,int(*pfCompare)(constvoid*,constvoid*);base是待排序数组的起始地址,nelem是待排序数组的元素个数,width是待排序数组的每个元素的大小(以字节为单位)pfCompare是一个函数指针,它指向一个“比较函数”。该比较函数应是返回值为int,有两个参数为constvoid*的函数int函数名(constvoid*elem1,constvoid*elem2);,快速排序库函数qsort,排序就是一个不断比较并交换位置的过程。qsort如何在连元素的类型是什么都不知道的情况下,比较两个元素并判断哪个应该在前呢?答案是,qsort函数在执行期间,会通过pfCompare指针调用“比较函数”,调用时将要比较的两个元素的地址传给“比较函数”,然后根据“比较函数”返回值判断两个元素哪个更应该排在前面。这个“比较函数”不是C/C+的库函数,而是由使用qsort的程序员编写的。在调用qsort时,将“比较函数”的名字作为实参传递给pfCompare。程序员当然清楚该按什么规则决定哪个元素应该在前,哪个元素应该在后,这个规则就体现在“比较函数”中。,qsort函数的用法规定,“比较函数”的原型应是:int函数名(constvoid*elem1,constvoid*elem2);该函数的两个参数,elem1和elem2,指向待比较的两个元素。也就是说,*elem1和*elem2就是待比较的两个元素。该函数必须具有以下行为:1)如果*elem1应该排在*elem2前面,则函数返回值是负整数(任何负整数都行)。2)如果*elem1和*elem2哪个排在前面都行,那么函数返回03)如果*elem1应该排在*elem2后面,则函数返回值是正整数(任何正整数都行)。,快速排序库函数qsort,#include#includeintMyCompare(constvoid*elem1,constvoid*elem2)unsignedint*p1,*p2;p1=(unsignedint*)elem1;p2=(unsignedint*)elem2;return(*p1%10)-(*p2%10);,下面的程序,功能是调用qsort库函数,将一个unsignedint数组按照个位数从小到大进行排序。比如8,23,15三个数,按个位数从小到大排序,就应该是23,15,8,#
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 咨询写实施方案
- 犯罪心理案例分析与理论应用
- 企业内审质量体系年度总结报告
- 搅拌设备售后服务分析报告
- 气压机械在汽车维修性能评估报告
- 教师职称政治素养考试题及答案
- 城市地下管网安全隐患排查
- 公路纵坡变更施工方案
- 第4课 活动:算法效率对比教学设计-2025-2026学年小学信息科技清华版新疆2024五年级下册-清华版(新疆)2024
- 营销方案突出针对性提升
- 成人癌性疼痛护理-中华护理学会团体标准2019
- 演示文稿小儿雾化吸入
- 生活中的理财原理知到章节答案智慧树2023年暨南大学
- 知行合一-王阳明传奇课件
- T-CSAE 204-2021 汽车用中低强度钢与铝自冲铆接 一般技术要求
- 节水灌溉技术总结
- GB/T 22588-2008闪光法测量热扩散系数或导热系数
- 《绿色建筑概论》整套教学课件
- itop-4412开发板之精英版使用手册
- 建筑设计防火规范2001修订版
- 原料药FDA现场GMP符合性要求与检查实践课件
评论
0/150
提交评论