1、C+强化训练强化训练总结总结东南大学东南大学 郑雪清郑雪清E_mail:E_mail:C+语言程序设计2 一、程序调试、分析一、程序调试、分析 等级考试上机部分为改错题和编程题两部等级考试上机部分为改错题和编程题两部分(两大题),每题占总分的分(两大题),每题占总分的20%20%。一般分布在。一般分布在类和对象(包含一些基本类和对象编程、数组、类和对象(包含一些基本类和对象编程、数组、线性表等),字符串处理(包括在字符串中查线性表等),字符串处理(包括在字符串中查找字符,删除或替换指定字符或子字符串,拼找字符,删除或替换指定字符或子字符串,拼接字符串、计算指定字符个数等)、链表或线接字符串、计
2、算指定字符个数等)、链表或线性表的处理、运算符重载、也可能会独立的数性表的处理、运算符重载、也可能会独立的数组处理(如排序、行列式或矩阵的处理)。我组处理(如排序、行列式或矩阵的处理)。我们通过总结,把容易出现问题的地方列示出来,们通过总结,把容易出现问题的地方列示出来,内容应该是不全面的。内容应该是不全面的。总结:等级考试要求总结:等级考试要求3 原则:原则:上机考试时,应该首先完成改错题的输入,然后完成自己有把握的题目,不要纠缠在一道题目的完美上。总结总结:4二、二、首先尽快输入原题首先尽快输入原题编译并修改错误栏中的第一个错误编译并修改错误栏中的第一个错误仔细核对是否输入有误仔细核对是否
3、输入有误修改并编译修改并编译编译成功后,仔细阅读题目,理解算法含义编译成功后,仔细阅读题目,理解算法含义修改算法错误,并编译、运行修改算法错误,并编译、运行注意:标点符号中英文混淆。注意:标点符号中英文混淆。总结总结:5 1.是否缺少编译预处理指令是否缺少编译预处理指令常用的有:#include(包含cin和cout时)#include(包含字符串处理函数时,如strlen等)#include(包含数学处理函数时,如sqrt函数等)#include(包含输出格式函数时,如setw等)#include(包含exit和about函数时)总结总结:62.2.是否缺少函数的原型说明是否缺少函数的原型说
4、明 若被调用函数的定义放在调用语句之后若被调用函数的定义放在调用语句之后时,应在调用此函数之前使用函数原型说明。时,应在调用此函数之前使用函数原型说明。例例1 1:includeinclude.hvoid main()void main()powwpoww();/();/函数应先说明,后使用函数应先说明,后使用 int powwint poww()()7例例2:int f()power();/函数使用前未说明函数使用前未说明int power()总结总结:83.函数的参数是否一一对应,给定的参数是否存在问函数的参数是否一一对应,给定的参数是否存在问题(包括是变量、数组、指针还是引用)题(包括是
5、变量、数组、指针还是引用)函数形参与实参不符函数形参与实参不符例例1:(成员函数实现时成员函数实现时)Money operator+(Money t)/+前置运算符重载应前置运算符重载应该无参该无参 例例2:void count(char,int&,int&,int&,int&);void main()int caps,space,num,other;char str80;count(str,caps,space,num,other);9例3:void max(int&x,int&y,int&z)void main()int a,b,c,;max(&a,&b,&c);总结总结:104.函数的返
6、回值说明与return语句返回是否一致例1:List&List:operator+(List&l1)return;/return应该返回当前对象总结总结:11例例2:void sum(int a)/函数返回值与定义不符函数返回值与定义不符 for()s+=a%10;return s;总结总结:125.关系表达式是否有问题(如关系表达式是否有问题(如:是或运算还是与是或运算还是与运算、等于运算、等于=还是不等于!还是不等于!=,等于,等于=是否写是否写成成=等等)。等等)。总结总结:13完整例子:完整例子:(/是正确语句是正确语句)(1)下面程序将字符串str2插入到字符串str1的第m(m20
7、)个字符前。总结总结:14#includevoidinsert(char,int,char);/voidinsert(char,int,char);voidmain()charstr180=123456789012345678901234567890,str280=abc;intm;coutInputanumberm(m20):m;coutPrimeString:str1endl;insert(str1,m,str2);/insert(str1,m,str2);coutOutputString:str1endl;15voidinsert(chars1,intn,chars2)charp180;
8、for(inti=n-1,j=0;s1i;i+)p1+j=s1i;/p1j+=s1i;p1j=0;for(j=0;s2j;j+)for(i=0;p1i;)s2j+=p1i+;s2j=0;for(i=n-1,j=0;s2j;j+)s1i+=s2j;s1i+1=0;/s1i=0;16完整例子:完整例子:(/是正确语句是正确语句)(2)下面程序用于验证哥德巴赫猜想:任何大于4的偶数均可以分解成两个素数的和。程序中的函数prime用于判断一个数是否为素数,如果是则返回值为1,否则返回值为0。主程序中不断接收键盘上输入的数据,如果输入的数为0,则结束验证,程序退出;如果输入的数不是大于4的偶数,则要求重
9、新输入。总结总结:17#include#includevoidprime(floatm)/intprime(intm)for(inti=2;i=(int)sqrt(m);i+)if(m%i=0)return(0);/不是素数返回0return(1);/是素数返回1voidmain(void)inti,yes;intn;docoutn;if(n=0)break;/if(n=0)break;18if(n%2=0|n5)/n%2!=0或n%2cout“Wrongnumber!“endl;continue;for(i=3,yes=0;in;i+)if(prime(i)|prime(n-i)/|应该是&cout“n=“i“+“n-iendl;yes=1;break;if(!yes)cout“Cantfind!“endl;while(1);