当前位置:首页 > 3C++第三章习题解答
第三章 函数习题 5
局部变量具有局部作用域使得程序在不同块中可以使用同名变量。这些同名变量各自在自己的作用域中可见,在其它地方不可见。所以提倡尽量使用局部变量
3.2.4 函数重载的作用是什么?满足什么条件的函数才可以成为重载函数?重载函数在调用
时是怎样进行对应的?
答:函数重载可以定义几个功能相似,而参数类型不同使用相同的函数名的函数,以适应不同情况下自动选用不同函数进行操作。函数重载的好处在于,可以用相同的函数名来定义一组功能相同或类似的函数,程序的可读性增强。
在定义重载函数时必须保证参数类型不同,仅仅返回值类型不同是不行的。
当某个函数中调用到重载函数时,编译器会根据实参的类型去对应地调用相应的函数。匹配过程按如下步骤进行:
(1)如果有严格匹配的函数,就调用该函数; (2)参数内部转换后如果匹配,调用该函数; (3)通过用户定义的转换寻求匹配。
3.2.5 多文件结构的程序是如何进行管理并运行的?采用多文件结构有什么好处?
答:多文件结构通过工程进行管理,在工程中建立若干用户定义的头文件.h和源程序文件.cpp。头文件中定义用户自定义的数据类型,所有的程序实现则放在不同的源程序文件中。编译时每个源程序文件单独编译,如果源程序文件中有编译预处理指令,则首先经过编译预处理生成临时文件存放在内存,之后对临时文件进行编译生成目标文件.obj,编译后临时文件撤销。所有的目标文件经连接器连接最终生成一个完整的可执行文件.exe。
多文件结构管理程序的好处是十分明显的。首先,可以避免重复性的编译,如果修改了个别函数,那么只需将这些函数所在的文件重新编译即可;其次,将程序进行合理的功能划分后,更容易设计、调试和维护;另外,通常把相关函数放在一个文件中,这样形成一系列按照功能分类的文件,便于为其他程序文件使用。
3.2.6 宏定义与常量定义从作用及效果上看是一样的,二者是否完全相同?
答:完全不同。不带参宏定义与const说明符定义常量从效果上看是一样的,但它们的机制不同。首先宏定义是在预处理阶段完成,而const定义则是在编译阶段实现。其次宏定义只是一种简单的字符串替代,不会为字符串分配内存单元,替代过程也不作语法检查,即使指令中的常量字符串不符合常量要求,预处理的替代过程也照样按指令给出的格式进行。而const定义则是象定义一个变量一样定义一个常量标识符,系统要按照类型要求为该标识符分配内存单元,同时在将常量放入单元时进行类型检查,如果类型不匹配,类型相容的会进行系统的类型转换,不相容的则要提示错误。
二.编程与综合练习题
3.3 设计函数,将小写英文字符变为对应的大写字符。
解:小写字母比大写字母ASCII码值大32,或写作ch=ch-?a?+?A?; #include
第三章 函数习题 6
int main(){ int i=0; char cp[30]; cout<<\请输入包含小写字母的句子:\ cin.getline(cp,30); while(cp[i]!='\\0') cout< 3.4 设计两个函数,分别求两个数的最大公约数和最小公倍数。 解:可用穷举法求最大公约数(从大到小找到的第1个公约数)和最小公倍数(从小到大找到的第1个公倍数)。 #include MaxCommonDevisor(int n,int m){ int i; for( i=n;i>=1;i--) if(n%i==0 && m%i==0) break; return i; } MinCommonMultiple(int n,int m){ int i; for(i=n;i<=n*m;i++) if(i%n==0 && i%m==0) break; return i; } int main(){ int i,j; cout<<\请输入两个整数:\ cin>>i>>j; cout<<\最大公约数:\ <<'\\t'<<\最小公倍数:\ return 0; } 3.5 设计函数digit(num,k),返回整数num从右边开始的第k位数字的值。例如: digit(4647,3)=6 digit(23523,7)=0 解:把整数转换为数串,放在一个整型数组中。 #include 第三章 函数习题 7 int i=0; do{//先把整数转换为数字串 s[i]=num; num/=10; i++; }while(num>0); if(k<=i) return s[k-1]; //题目中位数的下标从1开始,而数组下标从0开始 else return 0; } int main(){ cout<<\ cout<<\ return 0; } 3.6 设计函数factors(num,k),返回整数num中包含因子k的个数,如果没有该因子,则返 回0。 解:必须先判断整数m能否被k整除。 #include factors(int num,int k){//缺省返回值为整型 int count=0; while(num%k==0){ count++; num/=k; } return count; } int main(){ cout<<\ cout<<\ return 0; } 3.7 歌德巴赫猜想指出:任何一个充分大的偶数都可以表示为两个素数之和。例如: 4=2+2 6=3+3 8=3+5 … … 50=3+47 将4?50之间的所有偶数用两个素数之和表示。判断一个整数是否为素数用函数完成。 解:用prime()函数判断是否素数,用穷举法。歌德巴赫猜想验证也用穷举法,在所有组合中找两个数均为素数者。 #include 第三章 函数习题 8 if(m==2) return true; int k=(int)sqrt(m); for(int i=2;i<=k;i++)//穷举法 if(m%i==0) break; if(i>k) return true; else return false; } int main(){ for(int n=4;n<=50;n+=2){ for(int i=2;i<=n/2;i++) if(prime(i)&&prime(n-i)) cout< 3.8 设计函数打印直方图,直方图宽度为3行,每列代表数据1%。如下面的图形表示10%。 | |********** |********** |********** | 解:为简单将a%用a表示。 #include void PrintDiagram(int m){ int i ; cout<<'|'< for(int j=0;j cout<<'|'< int main(){ PrintDiagram(10); PrintDiagram(15); PrintDiagram(7); return 0; } 3.9 定义递归函数实现下列Ackman函数: m?0 ?n?1 ?Acm(m,n)??Acm(m1-,1) n?0 ?Acm(m?1,Acm(m,n?1)) n?0,m?0?
共分享92篇相关文档