| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1911 人关注过本帖
标题:建议计算器源代码里面有几个不理解的问题请指教!
只看楼主 加入收藏
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
结帖率:81.82%
收藏
已结贴  问题点数:20 回复次数:8 
建议计算器源代码里面有几个不理解的问题请指教!
不理解的地方时下面程序用红色标记的地方。请详细解释一下为什么printf输出的是&string,&Ary_10?难道Ary_10是数组??可以酱紫定义?还是说itoa函数有什么特殊的,能详细说一下吗?




#include <stdio.h>  
#include <math.h>  
#include <stdlib.h>  
//预处理指令  
int main(void)  
{  
        double bNumber, Number, Result;                //给加减乘除定义的变量  
        int No;                //选项的定义变量  
        double a, b, c, x1, x2, Rad;                //给一元一次方程定义的变量  
        int Ary_10;                                        //定义进制的变量  
        char string[32];                //二进制变量定义  
   
        system ("title: www.clang.cc");               
   
        while(1)  
        {  
                //界面  
                printf ("┏ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┓\n");  
                printf ("┇请选择你要计算的方法:                         ┇\n");  
                printf ("┣ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┫\n");  
                printf ("┇  加法请按_1    进制转换_5                    ┇\n");  
                printf ("┇  减法请按_2    求一元二次方程_6              ┇\n");  
                printf ("┇  乘法请按_3                                  ┇\n");  
                printf ("┇  除法请按_4               退出_0             ┇\n");  
                printf ("┗ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┛\n");  
                printf ("Please write down the number:");  
                scanf ("%d",&No);  
   
                if (No == 1)  
                {  
                        //        加法  
                        printf ("        请输入被加数:");  
                        scanf ("%lf",&bNumber);  
                        printf ("        请输入加数:");  
                        scanf ("%lf",&Number);  
                        Result = bNumber + Number;  
                        printf (" 结果是: %lf\n\n",Result);  
                }  
                else if (No == 2)  
                {  
                        //        减法  
                        printf ("        请输入被减数:");  
                        scanf ("%lf",&bNumber);  
                        printf ("        请输入减数:");  
                        scanf ("%lf",&Number);  
                        Result = bNumber - Number;  
                        printf (" 结果是: %lf\n\n",Result);  
                }  
                else if (No == 3)  
                {  
                        //        乘法  
                        printf ("        请输入被乘数:");  
                        scanf ("%lf",&bNumber);  
                        printf ("        请输入乘数:");  
                        scanf ("%lf",&Number);  
                        Result = bNumber * Number;  
                        printf (" 结果是: %lf\n\n",Result);  
                }  
                else if (No == 4)  
                {  
                        //        除法  
                        printf ("        请输入被除数:");  
                        scanf ("%lf",&bNumber);  
                        printf ("        请输入除数:");  
                        scanf ("%lf",&Number);  
                        Result = bNumber / Number;  
                        printf (" 结果是: %lf\n\n",Result);  
                }  
                else if (No == 5)  
                {  
                        //进制转换的代码  
                        printf("请输入需要转换的十进制数:");  
                        scanf("%d", &Ary_10);  
                        itoa (Ary_10, string ,2);  
                        printf("二进制: %s\n", &string);  
                        printf("八进制: %o\n", &Ary_10);  
                        printf("十六进制: %x\n", &Ary_10);  
                }  
                else if (No == 6)  
                {  
                        //求一元二次方程的解的代码  
                        printf("请输入一元一次方程的a,b,c三个数:");  
                        scanf("%lf%lf%lf",&a,&b,&c);  
                        Rad = b*b - 4*a*c;  
                        if (Rad > 0)  
                        {  
                                x1 = -b + sqrt(Rad) / (2*a);  
                                x2 = -b - sqrt(Rad) / (2*a);  
                                printf("有两个解 x1 = %lf, x2 = %lf\n", &x1, &x2);  
                        }  
                        else if (Rad == 0)  
                        {  
                                x1 = -b / (2*a);  
                                printf("只有一个解 x1 = %lf\n", &x1);  
                        }  
                        else  
                        {  
                                printf("无解\n");  
                        }  
                }  
                else if (No == 0)  
                {  
                        //        退出程序  
                        break;  
                }  
                else  
                {  
                        //        输入的选项不对  
                        printf("  请输入正确的数字。\n\n");  
                }  
                system ("pause");        //按任意键继续  
                system ("cls");                //清屏  
        }  
        return 0;  
        getchar();  
}  
搜索更多相关主题的帖子: 计算器 include 源代码 double 
2016-07-22 16:16
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
在线等哦,谢谢回帖的好人。
2016-07-22 16:17
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
别沉啊,下班的师傅们看一眼吗
2016-07-22 16:28
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:5 
就是printf的格式化输出吧
2016-07-22 16:30
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
回复 4楼 吹水佬
那为什么要加个‘&’,这个是输出数组时才加的啊?Ary_10定义时不是数组吧?
2016-07-22 16:34
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:5 
  
printf("二进制: %s\n", &string); //这里加不加“&”都能正确输出。string提供字符串的首地址。&string直接读取字符串的首地址
printf("八进制: %o\n", &Ary_10);  //这里加上“&”明显就错了。
printf("十六进制: %x\n", &Ary_10);  //同上

[此贴子已经被作者于2016-7-22 19:11编辑过]

2016-07-22 17:12
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
收藏
得分:5 
“&”是c语言的取地址运算符。
在程序中定义变量时,变量只要一声明,就会给他分配一块内存来保存这个变量,而“&”就是保存这个变量的内存的地址(相当于给内存编号)

比如输入函数 scanf() 里的变量前都有 &

自己也是小白。。。说错勿喷。

电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-22 17:49
zx315
Rank: 5Rank: 5
来 自:广东
等 级:职业侠客
威 望:2
帖 子:86
专家分:378
注 册:2016-7-13
收藏
得分:5 
程序代码:
char a[] = "abc";
printf("%x\n", a);
printf("%x\n", &a);


对于上面的代码来说,打印结果是相同的,但 a 与 &a 是不一样的指针类型,只是它们都指向同一个地址,所以当使用 printf 时都会打印字符串 "abc" (printf 会打印参数中所有的字符,直到遇到 EOF 为止)

关于 a 和 &a 的不同,a 是指向数组第一个元素的指针,而 &a 是指向整个数组的指针,可参考下面的代码片段:

程序代码:
char a[] = "abc";
printf("%x\n", a);
printf("%x\n", &a);

// a 指向数组的第一个元素 a[0]
char *p1 = a;
printf("%x\n", p1);
printf("%x\n", *p1);

// &a 指向整个数组,一个含有 4 个 char 元素的数组
char (*p2)[4] = &a;
printf("%x\n", p2);
printf("%x\n", *p2);



Read The Fucking Source Code~
2016-07-23 10:55
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
回复 5楼 弟大勿勃
可是我编译程序时都正确呢...
2016-07-25 09:18
快速回复:建议计算器源代码里面有几个不理解的问题请指教!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015000 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved