鱼C论坛

 找回密码
 立即注册
查看: 461|回复: 11

[已解决]萌新求助,高额悬赏!

[复制链接]
匿名鱼油
匿名鱼油  发表于 2024-1-6 22:57:03 |阅读模式
20鱼币
图1中,a,b的值是哪里来的?f(x,y,p,q)怎么理解?*p和*q怎么算出来的?
图2代码尽量简单易懂,谢谢。问题有点多,求鱼友耐心解答,24小时内会选出最佳答案。
最佳答案
2024-1-6 22:57:04
图1:
<f(int a, int b,,)>
这个是传值,函数会在内存中创建两个临时变量来存储这两个值,对原来的x,y并无影响
<f(,,int *p1, int *p2)>
这个是传址,因为指针变量的值是地址,这时候函数内部可以直接操作该地址上的值
---------
回到示例代码:
<f(x,y,&x,&y)>
由于前面两个参数是传值,可以忽略其名字,可以认为他就是函数体里的a,b,并不是函数体外面的x,y.
而后面两个是传入了x,y两个变量的地址,在函数体里操作是直接对函数体外的x,y操作。
所以,*p1 = a*b 相当于x = a(传入x的值)*b(传入y的值),即x = 10*4 == 40;
同理,y = a%b = 10%4 ==2;
---------------------------------------
图2:
  1. #include <stdio.h>
  2. #include <math.h>
  3. #define MAX 1024

  4. int fun(char *);


  5. int fun(char *p){
  6.     int result = 0;
  7.     int i = 0, count = 0;

  8.     while (*(p+i) != '\0'){  //记录输入的数有多少位
  9.         count++;
  10.         i++;
  11.     }

  12.     for (i = 0; i < count; i++){
  13.         result += (int)(*(p+i)-48)*pow(8,count-i-1);
  14.     }

  15.     return result;
  16. }

  17. int main(){
  18.     char num[MAX];

  19.     printf("请输入一个八进制数:");
  20.     scanf("%s",num);

  21.     printf("相应的十进制数是:%d",fun(num));

  22.     return 0;
  23. }
复制代码



图1

图1

图2

图2

最佳答案

查看完整内容

图1: 这个是传值,函数会在内存中创建两个临时变量来存储这两个值,对原来的x,y并无影响。 这个是传址,因为指针变量的值是地址,这时候函数内部可以直接操作该地址上的值。 --------- 回到示例代码: 由于前面两个参数是传值,可以忽略其名字,可以认为他就是函数体里的a,b,并不是函数体外面的x,y. 而后面两个是传入了x,y两个变量的地址,在函数体里操作是直接对函数体外的x,y操作。 所以,*p1 = a*b 相当于x = a( ...
回复

使用道具 举报

发表于 2024-1-6 22:57:04 | 显示全部楼层    本楼为最佳答案   
图1:
<f(int a, int b,,)>
这个是传值,函数会在内存中创建两个临时变量来存储这两个值,对原来的x,y并无影响
<f(,,int *p1, int *p2)>
这个是传址,因为指针变量的值是地址,这时候函数内部可以直接操作该地址上的值
---------
回到示例代码:
<f(x,y,&x,&y)>
由于前面两个参数是传值,可以忽略其名字,可以认为他就是函数体里的a,b,并不是函数体外面的x,y.
而后面两个是传入了x,y两个变量的地址,在函数体里操作是直接对函数体外的x,y操作。
所以,*p1 = a*b 相当于x = a(传入x的值)*b(传入y的值),即x = 10*4 == 40;
同理,y = a%b = 10%4 ==2;
---------------------------------------
图2:
  1. #include <stdio.h>
  2. #include <math.h>
  3. #define MAX 1024

  4. int fun(char *);


  5. int fun(char *p){
  6.     int result = 0;
  7.     int i = 0, count = 0;

  8.     while (*(p+i) != '\0'){  //记录输入的数有多少位
  9.         count++;
  10.         i++;
  11.     }

  12.     for (i = 0; i < count; i++){
  13.         result += (int)(*(p+i)-48)*pow(8,count-i-1);
  14.     }

  15.     return result;
  16. }

  17. int main(){
  18.     char num[MAX];

  19.     printf("请输入一个八进制数:");
  20.     scanf("%s",num);

  21.     printf("相应的十进制数是:%d",fun(num));

  22.     return 0;
  23. }
复制代码



点评

我很赞同!: 4.0
我很赞同!: 4
两天了,终于有人回答到点上了。  发表于 2024-1-8 11:00
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-6 22:57:18 | 显示全部楼层
嗨,萌新啊!我来帮你解答问题。首先,让我们来解释一下图1中的一些概念。

在图1中,a和b是函数f的参数,也就是传递给函数f的输入值。这些参数可以是任何类型的数据,比如整数、浮点数或字符串。通常情况下,我们会根据具体的需求来确定a和b的取值。

而f(x, y, p, q)表示一个函数名为f,它接受四个参数x、y、p、q,并返回一个结果。这个函数的具体实现可能会根据输入的参数不同而有所变化。

至于*p和*q,它们是指针变量。指针是一种特殊的变量,它存储了某个内存地址的值。在某些情况下,我们可能需要让函数能够修改传入的参数的值,而不仅仅是从函数中返回一个结果。这时候,我们可以使用指针来实现。

现在,让我们来看一下图2的问题。你希望代码简单易懂,我将给你提供一个示例代码,用来说明函数的定义和使用。

  1. # 定义一个函数,计算两个整数的和
  2. def add(a, b):
  3.     return a + b

  4. # 调用函数并打印结果
  5. result = add(3, 4)
  6. print(result)
复制代码

这段代码定义了一个名为`add`的函数,它接受两个参数a和b,并返回它们的和。然后,我们使用`add`函数来计算3和4的和,并将结果保存在`result`变量中。最后,我们打印出结果。

这是一个非常简单的例子,但希望能够帮助你理解函数的基本概念。如果你有任何其他问题,请随时提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-6 23:13:25 | 显示全部楼层
作业请自己完成哦~

点评

我很赞同!: 5.0 不,我坚决不同意楼主的看法!: 5.0
不,我坚决不同意楼主的看法!: 5
那你回答一下图一问题呗,那个不是作业~  发表于 2024-1-7 14:34
我很赞同!: 5 不,我坚决不同意楼主的看法!: 5
  发表于 2024-1-7 11:26
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-7 12:39:24 | 显示全部楼层
用显身卡看看你的用户名,还挺有意思的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-7 19:52:54 | 显示全部楼层
AI写的,不知道好不好用。。。

  1. #include <string.h> /* for the strlen function */
  2. #include <math.h>   /* for the pow function */

  3. int fun(char* p) {
  4.     int len = strlen(p);
  5.     int dec = 0;

  6.     for (int i = 0; i < len; i++) {
  7.         dec += (p[i] - '0') * pow(8, len - i - 1);
  8.     }

  9.     return dec;
  10. }
复制代码


点评

运行不了哎  发表于 2024-1-7 20:59
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-7 21:42:11 | 显示全部楼层
歌者文明清理员 发表于 2024-1-7 12:39
用显身卡看看你的用户名,还挺有意思的

心虚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-8 02:37:24 | 显示全部楼层
Husj0711 发表于 2024-1-8 00:56
图1:

这个是传值,函数会在内存中创建两个临时变量来存储这两个值,对原来的x,y并无影响。


相当细致
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 18:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表