搜索
查看: 1087|回复: 5
打印 上一主题 下一主题

小学生的救星 圆的计算器

[复制链接]
跳转到指定楼层
楼主
发表于 2014-1-18 10:37:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
昨天刚学完 引用  练习一下~

  1. #include<iostream>
  2. #include<string>
  3. const double PUBLIC_PAI = 3.14; // 方便调试
  4. using namespace std;
  5. const double &YUAN_C(double &YUAN_C_R) //引用 节约内存
  6. {
  7.         return PUBLIC_PAI * (YUAN_C_R + YUAN_C_R);
  8. }
  9. const double &YUAN_S(double &YUAN_S_R)
  10. {
  11.         return PUBLIC_PAI * YUAN_S_R * YUAN_S_R;
  12. }
  13. int main()
  14. {
  15.         int MAIN_I;
  16.         double MAIN_R_D,MAIN_SUM;
  17.         string MAIN_STR,MAIN_SUM_STR;
  18.         system("color 0a");
  19.         label1:
  20.         cout << "欢迎使用圆的计算器" << endl;
  21.         cout << "请输入半径或直径的值" << endl;
  22.         cin >> MAIN_R_D;
  23.         cout << "你刚才输入半径的值就输入“半径”,输入直径的值就输入“直径”" << endl;
  24.         cin >> MAIN_STR;
  25.         if( MAIN_STR == "直径")
  26.                 MAIN_R_D = MAIN_R_D / 2;
  27.         cout << "你要求什么?(周长 或 面积)" << endl;
  28.         cin >> MAIN_SUM_STR;
  29.         if(MAIN_SUM_STR == "周长")
  30.                 MAIN_SUM = YUAN_C(MAIN_R_D);
  31.         else if (MAIN_SUM_STR == "面积")
  32.                 MAIN_SUM = YUAN_S(MAIN_R_D);
  33.         system("cls");
  34.         cout << "你输入的半径的值是 " << MAIN_R_D << endl;
  35.         cout << "你要求的" << MAIN_SUM_STR << "的值是 " << MAIN_SUM << endl;
  36.         cout << "继续计算请输入 1 ,退出请输入 2"<< endl;
  37.         cin >> MAIN_I;
  38.         if (MAIN_I == 1)
  39.         {
  40.                 system("cls");
  41.                 goto label1;
  42.         }
  43.         else if (MAIN_I == 2)
  44.         {
  45.                 system("pause");
  46.                 return 0;       
  47.         }
  48. }
复制代码


对比一下 引用传递和按值传递

按值传递(C\C++)
在主函数 传递 给 函数1时
函数1 会创建一个新的变量
两个变量 值是相同的 地址是不同的


引用传递 (C++)
在主函数 传递 给 函数1时
函数1 不会创建一个新的变量
而是引用 主函数里的变量
两个变量 值是相同的 地址也是相同的
虽然有两个变量名

欢迎大神们多多指导
沙发
 楼主| 发表于 2014-1-18 11:46:41 | 只看该作者
最后那个goto是用来继续计算的
板凳
发表于 2014-1-18 14:42:13 | 只看该作者
有问题。
永远不要用goto
还有,using namespace std只是教材上的用法
std只是为了省空间
地板
 楼主| 发表于 2014-1-19 13:15:58 | 只看该作者
4399APPLE 发表于 2014-1-18 14:42
有问题。
永远不要用goto
还有,using namespace std只是教材上的用法

谢谢点评

那我用

  1. using std::cout;
复制代码


还是直接在代码里写

  1. std::cout
复制代码


5#
发表于 2014-1-20 19:50:25 | 只看该作者
这样写是错误的

首先,不该返回一个局部变量的引用,否则行为是未定义的
局部变量在函数返回后就销毁了,系统可以回收掉那部分内存

其次,这样做不一定会节约内存,double占8字节,64位环境下地址也要8字节

另外风格方面,全大写字母一般用来表示常量
6#
发表于 2014-6-1 20:35:09 | 只看该作者
我有一个更好的,链接:http://www.ahalei.com/thread-4901-1-1.html
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表