您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C++程序设计(第二版)钱能-第4章--计算表达
第4章计算表达4.9练习4(Exercises4)1.C++的数学函数一般由具有若干输入参数和返回值的函数构成,形式为:Typef(type1,type2,…)其中Type为函数值的类型,type1,type2,…为自变量。在cmath.h头文件中含有一些常用的数学函数:doublesin(doublex)//表示x弧度的正弦值doubleexp(doublex)//表示e的x次方doublesqrt(doublex)//表示x的平方根doublepow(doublex,doubley)//表示x的y次方写出下列数学表达式所对应的C++表达式:(1)2.5sin()x(2)1()24axaxa(3)22xcx解答:(1)sqrt(pow(sin(x),2.5))(2)pow(2,-1)*(a*x+(a+x)*pow(4a,-1))(3)pow(c,pow(x,2))*pow(sqrt(2*x),-1)2.写出下列表达式的值:(1)inte=1,f=4,g=2;doublem=10.5,n=4.0,k;k=(e+f)/g+sqrt(n)*1.2/g+m;(2)doublex=2.5,y=4.7;inta=7;x+a%3*(int)(x+y)%2/4;(3)inta,b;a=2,b=5,a++,b++,a+b;解答:(1)13.7(2)2.5(3)93.编程求131818!13!(1813)!C的值,注意不要让中间结果溢出。解答:#includeiostreamusingnamespacestd;longlongfactorial(intn){longlongsum=1;for(inti=1;i=n;i++)sum*=i;returnsum;}intmain(){cout1.0*factorial(18)/(factorial(13)*factorial(18-13))endl;return0;}4.今有一个文件abc.txt,内含一些数对,找出全部积为16!的数对,并输出。注意浮点数的比较方法。文件内容和输出样例为:abc.txt解答:#includeiostream#includefstream#includecmath#includesstreamusingnamespacestd;intmain(){longdoublefac=1;for(inti=1;i=16;i++){fac*=i;}E:\ch04f04x06↙87178291200002.4160000001307674.368100002092278988.811223344556687178291200002.4160000001307674.368100002092278988.81234567890123ifstreamin(abc.txt);for(strings;getline(in,s);){longdoublemut=1,p;for(istringstreamsin(s);sinp;mut*=p);if(abs(mut-fac)1e-5)coutsendl;}return0;}5.编程输出longdouble型数12345.67891023456的二进制位码。解答:#includeiostreamusingnamespacestd;intmain(){longdoublea=12345.7891023456;coutsizeof(longdouble)endl;int*ph=reinterpret_castint*(&a);int*pl=reinterpret_castint*((&a)+4);//4指的是字节数for(inti=31;i=0;i--){if((i+1)%8==0)cout;cout(*phi&1);}coutendl;for(inti=31;i=0;i--){if((i+1)%8==0)cout;cout(*pli&1);}coutendl;return0;}6.abc.txt文件中有一些整数,试编程实现循环输入文件中的整数,判断其能否被3、5、7整除,并对每个整数输出以下信息:(1)能同时被3、5、7整除(2)能被其中两数(要指出哪两个)整除(3)能被其中一个数(要指出哪一个)整除(4)不能被3、5、7任一个整除解答:#includeiostream#includefstream#includesstreamusingnamespacestd;intmain(){ifstreamin(abc.txt);for(strings;getline(in,s);){istringstreamsin(s);for(inta;sina;){if(a%(3*5*7)==0)couta能同时被3,5,7整除endl;elseif(a%3!=0&&a%5!=0&&a%7!=0)couta不能被3,5,7任何个整除endl;elseif(a%3!=0&&a%5!=0&&a%7==0)couta能被7整除endl;elseif(a%3!=0&&a%5==0&&a%7!=0)couta能被5整除endl;elseif(a%3==0&&a%5!=0&&a%7!=0)couta能被3整除endl;elseif(a%3!=0&&a%5==0&&a%7==0)couta能被5,7整除endl;elseif(a%3==0&&a%5!=0&&a%7==0)couta能被3,7整除endl;elseif(a%3==0&&a%5==0&&a%7!=0)couta能被3,5整除endl;}}return0;}7.下列代码是旧式C++程序,将它按照自己的编程风格编排,转换成标准C++,能简化就简化,并写出运行结果(可以添加头部注释)。#includeiostream.hvoidmain(){inta,b,c;ints,w,t;s=w=t=0;a=-1;b=3;c=3;if(c0)s=a+b;if(a=0){if(b0)if(c=0)w=a-b;}elseif(c0)w=a-b;elset=c;couts','w','tendl;}解答:#includeiostreamusingnamespacestd;intmain(){inta=-1,b=3,c=3;ints=0,w=0,t=0;if(c0)s=a+b;if(a=0){if(b0)if(c=0)w=a-b;}elseif(c0){w=a-b;}elset=c;couts','w','tendl;return0;}运行结果:2,0,0时限:3秒输入文件:change.in输入说明有3000个二进制数,最长的不超过64位,在文件中艺术字串的形式存放,每行只放一个数。如果是-1,那就表示输入结束。样板输入0101001000011111011111011011001100101111111001111110000000100000000000000001111111110101010010101010010100000001111100100001-1样板输出184924582623264513878459494412433解答:#includeiostream#includevector#includecmath#includefstreamusingnamespacestd;intmain(){ifstreamin(abc.txt);vectorstringa;for(strings;ins;){a.push_back(s);if(s==-1)break;}for(inti=0;ia.size()-1;i++){longdoublebits=0;for(intj=0;ja[i].length();j++){if(a[i][j]=='1')bits+=pow(2.0,double(a[i].size()-1-j));}cout.precision(0);coutfixedbitsendl;}return0;}
本文标题:C++程序设计(第二版)钱能-第4章--计算表达
链接地址:https://www.777doc.com/doc-4382320 .html