C++面向对象程序设计双语教程(第3版)-参考答案【ch02】Basic Failities - Shifting from C to C++ Programs.docx
ShjftingChapter 2 Bas ic Faci I ities from C to C+ Programs1. Answer the fol lowing questions:1-5 bdcad6. ait:2. Read the fol lowing program and comp Iete册血11& vi6如丽. _ . . . _ _ _ _ . J """ _ * , * * : , .:. y. :.:;.: ;?.,*. ;*,;- *, ,;V.- '!.*': : :using namespace std;int& put(int n); /put value into the array. -.* » , . < * * ,.;mt get(int n); /obtain a value from the array, », . » * (. .* * .*. .int vals101;intend;二: . : * . * *_*.* * . J a : / .1 voidmamO(put(0) =10; /put value into the array .: . * * *_ * * ( . *, , : . . . /.- - - , : .put =20; put =30;cout« get(O)«eiidl;cout« get(l)«endl; 涔泰西琮萌冬0山;1mmm;,mput(12) = l; /out of bound 8kget(12)vvendl; . .略。3.Wr ite out the output of the fol lowing programs. (1)int i当后蕊港;: : O:二:. : :二.;:二mt&r-1; . . : . . . a a .: . . . . . _ . , . . . . . . : .、. : . :口=9;三二三三:三.= A 工 : : : :丁1 = 10二二二?.:";coUtvvK之";"iWVeiidl; :£;:; . . . , . . .cout«&r<<"互击;;9:10Ox 某个地址;Ox 某个地址if char, isdigit ():digit_count 十二 1elif char. isalphaO :letter_count +二 1return digit_count, letter_count#测试代码input_string = Hello World 123digit_count, letter_count count digitsand letters(inputstring)print (、数字的数量: digit_count)print (、字母的数量: letter_count) 、 、这段代码会输出以下结果:数字的数量:3 字母的数量:10 、请注意,这个代码假设输入字符串只包含数字和字母,并且只计算ASCH字符。如果输 入字符串中包含其他字符,例如标点符号、空格或特殊字符,它们将被忽略。13. Write a funct i on to so Ive roots of ax2 +bx+c=0 equat i on. Hint: for d i fferent a, b and c, the equat i on may have 0, 1 or 2 roots. You may def i ne a funct i on as foI Iows:i nt so Iv i ng( doubIe a, doubIe b, doubIe c, doubIc& x1, doubIe& x2) where parameters x1 and x2 are the roots. The return i ng vaIue of the funct i on i s the number of roots.以下是一个求解一元二次方程的根的函数:python import mathdef solve quadratic equation (a, b, c):#计算判别式 discriminant = b*2 - 4*a*c#判断根的数量 if discriminant > 0:#有两个实根xl =(-b + math, sqrt(discriminant) / (2*a)x2 = (-b - math, sqrt(discriminant) / (2*a) return 2, xl, x2elif discriminant 二二 0:#只有一个实根xl = -b / (2*a)return 1, xl, Noneelse:#没有实根return 0, None, None#测试a = 2b = -5c = -3root_count, xl, x2 = solve_quadratic_equation(a, b, c)print (、根的数量: root_count)if root_count > 0:print (、根 1: xl)if root count > 1:print (、根 2: x2)以上函数使用判别式确定根的情况,返回根的数量以及根的数值(如果有的话)。若根 数大于3则会打印根的值。14. Write a program that pI ays the game “guess the number? as fol lows. Your programchooses the number to be guessed by seIecting an integer randomly in the range 1 to 1000. The program then d i spI ays the fol lowing:“I have a number between 1 and 1000. Can you guess my number? Please type your number :99The pIayer then types a guess. The program responds with one of the fol lowing after every guess:)z )z 12 3 /( z( z(xBingo! You guessed the number.Too h i gh. Try aga in.Too 1ow. Try aga in.And the program counts the number of guesses that the pIayer makes.(1) I f the number i s 5 or fewer, pr i nt “You know the secret?11(2) If the pIayer guesses the number i n 10 tr i es, then pr i nt “You got Iucky!"(3) If the pIayer makes more than 10 guesses, then pr i nt “You shouId be abIe to do better."当玩家猜测的数字小于选择的数字时,程序会回答:“太小了,请重新猜测J当玩家猜测的数字大于选择的数字时,程序会回答:“太大了,请重新猜测J当玩家猜测的数字等于选择的数字时,程序会回答:“恭喜,你猜对了!”并显示猜测了 多少次才猜对。以下是一个示例的Python代码:pythonimport randomdef guess_number():secret number = random, randint(1, 1000)guess_count = 0 print ('我有一个数字在1到1000之间。你能猜出我的电话号码吗? whileTrue:guesscount +二 1elif guess > secret_number: else:guess = int (input (、请输入您的号码: if guess < secret_number:print(、太小了,请重新猜测。print('太大了,请重新猜测。print (恭喜,你猜对了你猜了 guess_count, '次。breakguess_number ()这段代码使用'random, randint。,1000)'来在1到1000之间随机选择一个整数作为 要猜测的数字。然后,通过不断循环,玩家可以输入他们的猜测,程序会根据猜测的大小给 出相应的回答,直到猜对为止。最后会显示玩家猜了多少次才猜对。(2):K:,:;.: : * ;-,:/:,.: ,;?.:士二:二:?: :,-, ,、W, :;:讪京受5,苗三;6襄十二 . J / a. .*.*. *. »* : : 二讨三Q 痣沱求耍河阂:土:密.袋:W 孑淑二诵。画历证M前反装;:陵疑泰腔;然小犯施bi镖%奖6簸苑海熊.泰 ;:靖UU::球然:涣学可也:江可 工:£十二:,:己;:.二",:.七:三旌5就面面0密谈逐泊定滂黎懑诙哥. * « . « e * * * * * * * , * * * * * 丁 . W . . .* .» . * .:, 名m沙smgmySpMe:;a;为三营片"x . , . , /. * . r . . ? 您您鸿叫里崂峭独亡诳密, 子访oKcacV9fyenE;1 .1. . . e * * * * , * * _ , . * * * * * 4 . .,. . . . .、 . . . , / * * * * . *, , .» .«. , * * - , .:少;. 9.V /.*. ? * , J * * 2 mySpace:a=5yourSpace:b=98. 3#include<iostream> . . . . . . .,J.using namespace std;void Tcst(int&. int); , , . ; . voidmamQ. . a 4. . 'j. . . . . ,. ., . , ;.:., .;intx= 12;了. . . . . . . . ,.;mty= 14; 一:: .'.:;: ;:":, :.壬.: / -:Test(x,y); ?;'.; ; .?,:f ./-:. . : After the first call of Te钝 the variables equal K« x << y << chdl; . 二工20; : ,.:二.一. :.;. . J.二二 y=22;: . . ' . - * , * * . . , 1 .,X 2 . . ' ' * ' , . ' . . . ' . , , . , . . . :cout«nAficr the second call of Test, the variables equal n« x « y << endl; .a、 . . ; void Test(int& a, intb),; . :;.; 丁,; ;e'., .J ,. , . . . . i. . . . . . -* .、 , ” . . .,.” ::: a=3;二二二二, : :/.:. , . . ." ., . ' . , 1 . ' :a+= 2;./.:; -.a*5; :二.二二.二; : : I.:, .::.:;,bout«'In fimetion Test, tfie variable equal " W 在 <v b W endl;略。4. Wr i te a funct i on that swaps two i nteger numbers and two doub I e fI oat i ng po i nt numbers. Hint: us i ng reference and po i nter as the parameters.当涉及到交换两个整数和两个双浮点数时,我们可以定义一个函数,接受四个参数,即 两个整数和两个双浮点数的引用或指针。下面是一个示例函数的实现:cppttinclude <iostream>void swap(int& a, int& b, double* c, double* d)inttemp = a;b;temp;double tempi = *c;*c*d*d;tempi;int main () int numl = 10;int num2 = 20;double deci = 1.5;double dec2 = 2.5;std:cout << Before swapping: << std:endl;std:cout <<uml = << numl << num2 = << num2 << std:endl;std:cout << decl = << deci << dec2 = << dec2 << std:endl;swap(numl, num2, &decl, &dec2);std:cout <<After swapping: << std:endl; std:cout <<uml = << numl << num2 = << num2 << std:endl;std:cout << decl = << deci << dec2 = << dec2 << std:endl;return 0;在上面的示例中,我们定义了一个'swap、函数,接受两个整数的引用('int&、类型), 以及两个双浮点数的指针('double*'类型)。在函数内部,我们使用一个临时变量来交换整 数的值,并使用指针来交换双浮点数的值。在'main'函数中,我们声明了两个整数' numl'和' num2' ,以及两个双浮点数' deci和 'dec2然后,我们调用了飞wap、函数,并传递这些变量的地址作为参数。最后,我们输出 交换后的值,以验证交换是否成功。请注意,通过使用引用('int& )和指针('double*'),我们可以直接修改原始变量的 值,而不创建副本。这样可以节省内存,并且函数内的修改会反映在'main'函数中。5. Write a program that has three over Ioad i ng funct i ons display to produce the i r outputs. The f i rst funct i on returns a doubIe type. The second funct i on returns an i nt type. The th i rd funct i on returns a char type.以下是一个示例程序,展示了三个重载函数和它们的输出:CPP ttinclude <iostream>/重载函数1:返回双重类型double display(double num) std: :cout << 双重类型函数被调用,输入参数为: << num << std: :endl; return num;/重载函数2:返回int类型int display(int num) std: :cout << int类型函数被调用,输入参数为: << num << std: :endl; return num;/重载函数3:返回字符类型char display(char ch) std: :cout << 字符类型函数被调用,输入参数为: << ch << std: :endl; return ch;)int main() double doubleNum = 3. 14;int intNum = 42; char character ='A'/调用重载函数1double doubleResult 二 display(doubleNum);std: :cout <<、双重类型函数的返回值为: << doubleResult << std: :endl;/调用重载函数2int intResult = display(intNum);std: :cout << int 类型函数的返回值为: << intResult << std: : endl;/调用重载函数3char charResult = display(character);std: :cout <<、字符类型函数的返回值为: << charResult << std: :endl;return 0;运行上述程序,将输出如下:双重类型函数被调用,输入参数为:3. 14双重类型函数的返回值为:3. 14int类型函数被调用,输入参数为:42int类型函数的返回值为:42字符类型函数被调用,输入参数为:A 字符类型函数的返回值为:A这是一个简单的示例,展示了如何通过重载函数实现不同类型参数的输出。你可以根据 需要自定义这些函数,并根据实际情况返回不同类型的值。6. Wr i te a funct i on that takes an i nteger vaIue and returns the number with i ts digits reversed. For examp I e, given the number 1234, the funct i on shouId return 4321.以下是一个将整数反转的函数示例:pythondef reverse num(num):#将整数转换为字符串并进行反转reversed_str = str(num)::-1#将反转后的字符串转换为整数 reversed_num = int(reversed_str) return reversed num你可以使用这个函数来反转一个整数,例如:pythonnum = 1234reversed_num = reverse_num(num) print (reversed num)输出结果将会是4321。7. Wr ite a funct i on qua I i tyPo i nts that i puts a student's average and a returni ng va Iue4 if a student's average i s 90-100, 3 if the average i s 80-89; 2 i f the average i s 70-79, 1 i f the average i s 60-69, and 0 i f the average i s Iower than 60.下面是一个实现你描述的功能的函数代码:pythondef等级评定(平均值):if平均值)=90 and平均值=100:return、学生的平均值是A return、学生的平均值是B return '学生的平均值是C return '学生的平均值是Delif平均值 =80 and平均值elif平均值=70 and平均值elif平均值=60 and平均值else:二 89:<=79:<=69:return、学生的平值是F你可以将以上代码复制到一个Python编译器或脚本中,并且传入平均值进行测试。示例用法:pythonprint (等级评定(95) #print (等级评定(83) #print (等级评定(75) #print (等级评定(64) #print (等级评定(55) #输出:学生的平均值是A 输出:学生的平均值是B 输出:学生的平均值是C 输出:学生的平均值是D 输出:学生的平均值是F8. Write a funct i on that f i nds the maximum and mini mum va I ues of an ar ray.pythondef find_max_min(arr):if not arr:return None#初始化最大值和最小值为数组的第一个元素 max_val = arr0min val = arr0#遍历数组,更新最大值和最小值for num in arr:if num > maxval:max_val = numif num < min_val:min_val = numreturn max_val, min_val以上代码中,我们首先检查数组是否为空,若为空则返回Noneo然后我们初始化最大 值和最小值为数组的第一个元素。接着遍历数组中的每个元素,如果遇到比当前的最大值大 的数,就更新最大值;如果遇到比当前的最小值小的数,就更新最小值。最后返回找到的最 大值和最小值。你可以调用这个函数并传入你想要查找的数组,例如:pythonarray = 3, 9, 2, 6, 1, 8max val, min val = find max min(array)print (、最大值: max_val)print (、最小值: min_val) 、 、 、输出将会是:最大值:9最小值:19. Write a function integerPower (base, exponent) that returns the va I ue of base xponr. For examp Ie, i ntegerPower (3, 4)=3*3*3*3Assume the exponent i s a pos i t i ve, nonzero i nteger and that base i s an i nteger. (Do not use any math I i brary funct i on)pythondef sum_of_numbers(numbers):sum_positive = 0sum_negative = 0for num in numbers:if num >= 0:sum_positive +二 num else:sum_negative += numreturn sumpositive, sum_negative#测试函数numbers =1, -2, 3, -4, 5, 6, -7, 8, 9, -10 positivesum, negativesum = sum of numbers(numbers) print (、数字之和 0=0) : positive_sum)print(、数字之和(<0) : negative_sum)10. Write a function that inputs 10 integer numbers and outputs the sum of numbers 0=0) and the sum of numbers «0).pythondef sum of numbers(numbers):sum positive = 0sumnegative = 0 for num in numbers: if num >= 0:sum_positive += numelse:sum_negative += num return sum_positive, sum_negative#测试函数numbers = -4, 6, 2, -8, 10, -3, 5, 7, -1, 9positive_sum, negative_sum = sum_of_numbers(numbers)print (、大于等于0的数字之和: positive_sum)print (、小于 0 的数字之和: negative_sum) 、运行结果:大于等于0的数字之和:39 小于0的数字之和:-16这个函数会遍历输入的10个整数,将于等于0的数字累加到、suni_positive'变量中, 将小于0的数字累加到'sum_negative'变量中。最后,函数返回这两个和。11. Write a funct i on to ca I cu I ate the calorie of I unch. The user i nputs three I i nes. Each I i ne has a character (M i s for meat, V i s for vegetabIe, D i s for dessert) and a calorie vaIuc. Theprogram outputs the totaI calorie vaIue of Iunch.pythondef calculate_calories():total_calories = 0for _ in range(3):line = input (、请输入字符和卡路里值(M/V/D卡路里):line =line, split ()character 二 line0calories = int(linel)total calories += caloriesprint (、午餐的总卡路里值: total_calories)calculate_calories () 、请注意,这个例子假设用户将会依次输入三行信息,并且每一行都包含一个字符和一个 卡路里值,中间用空格隔开。函数会依次读取每一行的信息,并将卡路里值累加到总卡路里 值中,最后输出总卡路里值。12. According to the input string, count the number of digit and a Iphabet and output them.pythondef count_digits_and_letters(input_str):digitcount = 0letter_count = 0 for char in input_str: