C++.docx

上传人:b****8 文档编号:30489188 上传时间:2023-08-15 格式:DOCX 页数:80 大小:39.24KB
下载 相关 举报
C++.docx_第1页
第1页 / 共80页
C++.docx_第2页
第2页 / 共80页
C++.docx_第3页
第3页 / 共80页
C++.docx_第4页
第4页 / 共80页
C++.docx_第5页
第5页 / 共80页
点击查看更多>>
下载资源
资源描述

C++.docx

《C++.docx》由会员分享,可在线阅读,更多相关《C++.docx(80页珍藏版)》请在冰豆网上搜索。

C++.docx

C++

第三单元运算符与表达式

根据题目要求,编写完整的程序。

(1)从键盘上输入一些组合键,如Ctrl+B、Ctrl+D、Ctrl+Y等,如何能知道这些键的值。

#include

voidmain(){

charMul_Character;

cin>>Mul_Character;

cout<<(int)Mul_Character<

}

(2)从键盘上输入一个整数x,将其低六位全部置1,其余各位不变。

然后用十进制和十六制输出x的值。

#include

voidmain(){

cout<<"inputaintger:

"

intnum,num_changed;

cin>>num;

num_changed=num|0x003f;

cout<<"theresultis:

"<

}

(3)从键盘上输入一个整数x,将其高六位全部置0,其余各位不变。

然后用十进制和十六制输出x的值。

#include

voidmain(void){

shortx;

cout<<"input1intvalue:

";

cin>>x;

x=x&0x03ffffff;//高六位全部置000000011111111111111111111111111

cout<<"x=(dec)"<

cout<<"x=(hex)"<

}

(4)从键盘上输入一个摄氏温度C,求该温度对应的华氏温度F(F=5/9C+32)及绝对温度K(K=C+273.15)。

#include

voidmain(){

floatc,f,k;

cout<<"inputtemperature:

";

cin>>c;

f=5.0/9*c+32;

k=c+273.15;

cout<<"TheCelsiusis:

"<

cout<<"TheFahrenheitis:

"<

"<

//求该温度对应的华氏温度F(F=5/9C+32)及绝对温度K(K=C+273.15)

}

(5)从键盘上输入任意两个实数,求它们的和、差、积、商,并输出结果。

#include

usingnamespacestd;

voidmain(void){

floata,b;

cout<<"请输入两个实数a,b:

"<

cin>>a;

cin>>b;

cout<<"a+b="<

cout<<"a-b="<

cout<<"a*b="<

if(b)cout<<"a/b="<

elsecout<<"biszero\n";

}

(6)输入任意一个实数,将其整数部分与小数部分分开,分别输出在两行上。

例如,输入23.45,输出:

23

0.45

#include

voidmain(void){

floatnum;//数据存放

inta;//存放整数部分

floatb;//存放小数部分

cout<<"请输入任意一个实数:

";

cin>>num;

a=(int)num;

b=num-a;

cout<

cout<

}

第四单元基本语句

按要求完成编程

(1)任意输入一个int整数,计算其中有多少位是1。

#include

voidmain(){

inta,count=0;

cin>>a;

while(a){

if(1==a%10)

count++;

a/=10;

}

cout<

}

(2)任意输入一个int整数,显示为十六进制形式,不能用hex控制符,而且要求输出8个字符。

#include

voidmain(){

cout<<"inputaintger:

(lessthan0xffffffff):

";

intnum;

cin>>num;

cout<<"theintger'shexis:

";

charout;

for(inti=7;i>=0;i--){

out='0';

if((num>=(1<<4*i))&&(num<(1<<(4*i+4)))){

for(intj=15;j>=0;j--){

if(j*(1<<4*i)<=num){

out=char(j+48);

if(out>'9')

out=char(out+39);

num=num-j*(1<<4*i);

break;

}

}

}

cout<

}

cout<

}

(3)任意输入一个浮点数,小数点后最多有两位,作为一笔金额,显示为中文金额格式,银行里经常要用这种格式。

例如,输入1234.56,输出“壹仟贰佰叁拾肆元伍角陆分”为零,7为柒,8为捌,9为玖,。

010为拾,还有万、亿。

注意,2004应输出“贰仟零肆元整”,而不是“贰仟零佰零拾肆元整”。

尝试你能准确处理的最大金额是多少。

//最大范围整数部分10位//移位运算

//最大范围整数部分10位

#include

voidmain()

{

floatvalue;

cout<<"请输入最大位为十亿,小数为两位的浮点数:

";

cin>>value;

intmInteger;//整数金额

floatmDecimal;//小数金额

mInteger=(int)value;

mDecimal=value-mInteger;

//计算金额的最高位数

intn=mInteger;

intlength=0;

while(n)

{

n=n/10;

length++;

}

//处理整数部分

intm=1;

inti;

for(i=1;i

m*=10;

//整数部分显示

intx;

n=(int)value;

intlevel;

intcount;

for(i=length,level=(i-1)/4,count=0;i>0;i--)

{

x=n/m;//该位上的数值;

n=n%m;

m/=10;

if(level==(i-1)/4)

{

if(x==0)

count++;

else

{

if(count>0)

{

cout<<"零";

count=0;

}

}

}

else

{

level=(i-1)/4;

count=0;

if(x==0)count++;

}

switch(x)

{

case1:

cout<<"壹";

break;

case2:

cout<<"贰";

break;

case3:

cout<<"叁";

break;

case4:

cout<<"肆";

break;

case5:

cout<<"伍";

break;

case6:

cout<<"陆";

break;

case7:

cout<<"柒";

break;

case8:

cout<<"捌";

break;

case9:

cout<<"玖";

break;

case0:

break;

}

//显示该位的值

if(x!

=0)

{

switch(i%4)

{

case0:

cout<<"仟";

break;

case3:

cout<<"佰";

break;

case2:

cout<<"拾";

break;

default:

break;

}

}

if((i-1)%4==0)//亿,万位

{

switch((i-1)/4)

{

case2:

cout<<"亿";

break;

case1:

if(count==4)

break;

cout<<"万";

break;

case0:

cout<<"元";

break;

default:

break;

}

}

}

//小数部分,由于存储精度问题,存在误差

floattmp=mDecimal;

inttmp2;

if(mDecimal==0.0)

{

cout<<"整"<

return;

}

for(i=0;i<2;i++)

{

tmp=tmp*10;

tmp2=(int)tmp;

tmp=tmp-(float)tmp2;

switch(tmp2)

{

case1:

cout<<"壹";

break;

case2:

cout<<"贰";

break;

case3:

cout<<"叁";

break;

case4:

cout<<"肆";

break;

case5:

cout<<"伍";

break;

case6:

cout<<"陆";

break;

case7:

cout<<"柒";

break;

case8:

cout<<"捌";

break;

case9:

cout<<"玖";

break;

case0:

if(i==0)

cout<<"零";

else

{

tmp2=1;

cout<<"壹";//弥补精度问题造成的误差

}

break;

}

if(i==0&&tmp2!

=0)

cout<<"角";

if(i==1&&tmp2!

=0)

cout<<"分"<

}

cout<

}

(4)输入若干个字符,统计输入的数字字符的个数。

#include

voidmain()

{

intcount=0;

charch;

do{

ch=cin.get();

if(ch>='0'&&ch<='9')

count++;

}while(ch!

='\n');

cout<<"该字符串中数字字符的个数count="<

}

(5)从键盘上输入一个正整数n,按下式求出y的值:

y=1!

+2!

+3!

+…+n!

再编程分析,结果y应该是一个正整数,在整型范围之内,可正确计算的最大的n和y分别是多少。

#include

usingnamespacestd;

voidmain(void)

{

intn,y=0;

cout<<"请输入一个正整数n"<

cin>>n;

for(inti=1;i<=n;i++)

{

inttmp=1;

for(intj=1;j<=i;j++)

{

tmp=tmp*j;

}

cout<<"i="<

y=y+tmp;

}

cout<<"y=1!

+2!

+3!

+…+n!

="<

intmaxn=(1<<31)-1;

intcurrent_y=0,greatest_y=0,greatest_n=1;

intatmp=1,tmp=0;

while(atmp>=0)

{

atmp=1;

for(ints=1;s<=greatest_n;s++)

atmp=atmp*s;

tmp=current_y+atmp;

greatest_n++;

if(tmp>0)current_y=tmp;elsebreak;

if(maxn/atmp<=greatest_n)break;

}

cout<<"可正确计算的最大的n和y分别为:

"<

}

(6)求一元二次方程ax2+bx+c的根。

任意输入系数a、b、c的值,显示方程的根。

注意什么条件下无根,什么条件下有一个根、两个根。

#include

#include

voidmain(void)

{

floata,b,c;//系数

doublex1,x2;//答案

floaty;//△

cout<<"请输入系数a:

";

cin>>a;

cout<<"请输入系数b:

";

cin>>b;

cout<<"请输入系数c:

";

cin>>c;

y=b*b-4*a*c;

if(a!

=0)

{

if(y>0)

{

x1=(-b+sqrt(y))/(2*a);

x2=(-b-sqrt(y))/(2*a);

cout<<"此方程有两个根:

"<

}

else

{

if(y==0)

{

x1=-b/(2*a);

cout<<"此方程有两个同根:

"<

}

else

{

cout<<"此方程无解"<

}

}

}

else

{

if(b==0)

{

cout<<"此方程无效(a,b都等于零)!

"<

}

else

{

x1=-c/b;

cout<<"此方程只有一个根:

"<

}

}

}

(7)某个数列的前5项为:

,按此规律求出该数列的前20项,显示每一项的分子和分母。

#include

#include

voidmain()

{

intup1=2,up2=3;

intdown1=1,down2=2;

cout<

cout<

cout<

for(inti=3;i<=20;i++)

{

intup=up1+up2;

intdown=down1+down2;

cout<

up1=up2;up2=up;

down1=down2;down2=down;

}

}

(8)输入一个正整数x,显示其所有的因子。

在此基础上,求出1~100之间的完全数。

所谓完全数是指该数刚好等于它的因子之和(自己本身除外)。

例如,6的因子为1,2,3,且6=1+2+3,因此6是一个完全数。

#include

voidmain()

{

cout<<"inputainteger:

";

intnum,sum;

intfactor,j;

cin>>num;

cout<<"thenum"<

";

for(factor=1;factor<=num;factor++)

{

if((num%factor)==0)

cout<

}

cout<

cout<<"-----------------------------------------"<

cout<<"doyouwanttofindtheperfectnumbersbetwenn1and100:

(yorn)";

charflag;

cin>>flag;

if((flag=='y')||(flag=='Y'))

{

cout<<"theperfectnumbersbetween1and100are:

"<

for(j=1;j<=100;j++)

{

sum=0;

for(factor=1;factor<=j;factor++)

{

if((j%factor)==0)

sum+=factor;

}

sum-=j;

if(sum==j)

cout<

}

cout<

}

}

(9)编程验证一个数学定理,任意一个正偶数都能分解为两个素数之和,例如,6=3+3、8=3+5。

#include

#include

voidmain()

{

intn;

inti,j;

boolflag;

cout<<"请输入任意整数(大于或等于6):

";

cin>>n;

while(n%2!

=0||n<6)

{

cout<<"请输入任意整数(大于或等于6):

";

cin>>n;

}

for(i=3;i<=n/2;i+=2)

{

flag=false;

for(j=3;j*j<=i;j+=2)//内层循环

if(i%j==0)//如果被整除,i不是素数

break;//停止内层循环

if(j*j>i){//如果循环到头了,i就是素数

flag=true;

}

if(!

flag)//判断当前的i不是素数则执行下一次循环

continue;

flag=false;

for(j=3;j*j<=(n-i);j+=2)//证明后一部分是素数

if((n-i)%j==0)//如果被整除,i不是素数

break;//停止内层循环

if(j*j>(n-i)){//如果循环到头了,i就是素数

flag=true;

}

if(flag)

{

cout<

}

}

}

第五单元函数和编译预处理

根据题目要求,编写完整的程序,可所用已有函数,也可自行添加函数

(1)编写一个函数intdigitSum(intx),返回形参x的十进制数的各位数之和,例如123的各位数为1+2+3=6。

#include

intdigitSum(intx){

intsum=0;

while(x){

sum+=x%10;

x/=10;

}

returnsum;

}

voidmain(){

inta;

cin>>a;

cout<

}

(2)编写一个函数,返回三个整数中的最大数并输出。

要求先编写函数实现两个数中求最大数。

#include

intmax_in_two(inta,intb){

if(a>b)

returna;

elsereturnb;

}

intmax_in_three(inta,intb,intc){

return(max_in_two(max_in_two(a,b),c));

}

voidmain(){

cout<<"inputthreeinteger:

";

inta,b,c;cin>>a>>b>>c;

cout<<"themaxnumberis:

"<

}

(3)编写一个函数,计算组合数:

C(m,r)=m!

/(r!

×(m-r)!

),其中m,r为正整数,且m>r。

分别求出C(4,2),C(6,4),C(8,7)的组合数。

求阶乘和组合数分别用函数来实现。

#include//求阶乘函数

unsignedfactorial(unsignedn){

if(n==1)

return1;

elsereturnn*factorial(n-1);

}//求组合数函数

unsignedfc(unsignedm,unsignedr){

returnfactorial(m)/(factorial(r)*factorial(m-r));

}

voidmain()//递归调用

{cout<<"C(4,2)="<

cout<<"C(6,4)="<

cout<<"C(8,7)="<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1