实例题(C++)

例1:一个简单的计算器

例:编程一个简单的计算器功能,实现简单的加、减、乘、除表达式的计算。

对于分支较多的情况,C++提供switch语句。switch语
句也叫开关语句、多分支语句,它计算一个表达式的值,
根据结果的不同,执行不同的分支处理语句。
算法描述:
用num1,num2,op分别表示输入的表达式的两个操
作数和一个运算符。
如果op=‘+’,则result=num1+num2,输出result;
如果op=‘-’,则result=num1-num2,输出result;
如果op=‘’,则result=num1num2,输出result;
如果op=‘/’,则
如果num2=0,显示“除数为0”
否则,计算result=num1/num2,输出result;
其他,显示“运算符错误”。
源程序:

#include<iostream>  //包含输入输出头文件
#include<cmath>
using namespace std;  //指定名字空间
int main()
{ double num1,num2;
char op;     //声明字符变量,存放操作符
double result ;   //声明变量,存放计算机结果
char caption1[20]="Error,Divided by 0!";
char caotion1[20]="Invalid opereator!";
cout<<"Please input the expression:";
cin>>num1>>num2;
swith(op)
{ case'+':  result=num1+num2;
cout<<num1<<op<<num2<<"="<<result<<endl;
break;   //中断
case'-':  result=num1-num2;
cout<<num1<<op<<num2<<"="<<result<<result<<endl;
break;   //中断
case '*': //是乘号
result=num1*num2; //计算积
cout<<num1<<op<<num2<<"="<<result<<endl;
break;
case '/': //是除号
if(fabs(num2)<1.0e-8) //除数为0 {
cout<<caption1<<endl; } 
else { //除数不为0
result=num1/num2; //计算商
cout<<num1<<op<<num2<<"="<<result<<endl; }
break;
default : //以上情况都不是
cout<<caption2<<endl; }
return 0;
} 

总结:

  1. swith的条件是整型表达式;
  2. fab()是求绝对值的函数,它包含在cmath头文件中;
  3. 在每一个case处理的最后都有一个break语句。

例2:寻找自幂数

n为1时,自幂数称为独身,0,1,2,3,4,5,6,7,8,9都是自幂数。
n为2时,没有自幂数。
n为3时,自幂数称为水仙花数,153就是一个水仙花数。
n=4, 称为四叶玫瑰数。
n=5, 称为五角星数。
n=6, 称为六合数。
n=7, 称为北斗七星数。
n=8, 称为八仙数。
n=9, 称为九九重阳数。
问题分析:

  1. n位自幂数,各位数字的n次方的和加起来还等于这个数。
  2. 两个要点,一是怎样找出“各位”,二是n次方的计算。  n次方的计算有一个数学函数可用,pow(x,n)。 
  3. 找出各位,举例来说,153,找个位,可用153%10=3;找十位呢?(153/10)%10=5,依次类推。直接求余,就是最低位的数字,除10,原来的十位就成为新的最低位,重复这一过程,就可以求出各位,直到这个数成为0。 
  4. 还有一个问题要解决,就是构造n位数。0是最小的一位数,10的1次方是最小的两位数,10的平方是最小的三位数,那么,10的n-1次方就是最小的n位数。
    算法描述:
    ①输入位数n
    ②计算n位数的起始值和终止值
    start=10^(n-1), end=10^n -1, i=start
    ③如果i>end转⑨
    ④m=1,sum=0
    ⑤如果m=0,转⑦
    ⑥a=m%10, sum=sum+d^n,m=m/10,转⑤
    ⑦如果sum=i,显示i.
    ⑧i=i+1,转③
    ⑨结束

源程序:

#include <iostream> //包含需要的头文
 #include<cmath> //数学函数需要的头文件using namespace std; //名字空间int main() {int n; //表示数的位数int start,end; //表示n位数的起始值和终止值int m; //待分解各位的数,即待判断的数int digit; //某个数位的值int sum; //各位数的n次方的和  int i; //循环变量,待检验的数

cout<<"求n位自幂数,请输入位数:"; //提示信息
 cin>>n; //输入位数while(n>0){ //大于0时计算
 start=pow(10,n-1); //n位数的起始值
 end=pow(10,n)-1; //n位数的终止值
 cout<<n<<"位自幂数:"; //输出说明信息for(i=start;i<=end;i++){ //从起始值到终止值逐个检验
 m=i; //将i赋给m  //检验过程中m的值会改变,而i的值不变
 sum=0; //各位数的n次方和,检验前赋

while(m!=0){ //m开始为待检验的数  digit=m%10; //取最低位数字
 sum=sum+pow(digit,n); //n次方,再求和
 m=m/10; //去掉个位,刚才的十位成为新个位}//上面的循环结束时sum就是各位数字的n次方的和if(sum==i){ //逻辑表达式的值为true时,表示是自幂数
 cout<<i<<" "; //显示该数}} 

cout<<endl; //换行
 cout<<“求n位自幂数,请输入位数:;
 cin>>n; //再输入一个n表示位数} //while循环
 cout<<endl;return 0;} 

思路扩展:

本例应掌握的技巧, 一是如何分离各位数字, 二是如果一种计算会破坏(或改变)某个变量的值,而这个原始值在后
面的计算中还会使用,那就先将其赋值给另一个变量,使用新变量作“破坏性”计算,随时可以通过原来的变量获得原始值。
这实际是计算机科学中常用的一种“冗余”的思想,要获得某种保障,有意使用更多的时间、空间

猜你喜欢

转载自blog.csdn.net/Yangye_1018/article/details/106602346
今日推荐