C函数,它以k的指数形式打印数字n,表示2<=k<=16例如,对于n=200和k=8,打印为;200=3*8**2+;1*8**1“; #包括 #包括 无效foo(整数n,整数k){ int-rez=1; 特伦努特尼雷斯酒店; int最高值_exp=0; if(k16){ printf(“不正确”); 返回NULL; } 而(rez
你的任务是将数字从基数10转换为其他基数(即从基数2转换为基数16) 本质上C函数,它以k的指数形式打印数字n,表示2<=k<=16例如,对于n=200和k=8,打印为;200=3*8**2+;1*8**1“; #包括 #包括 无效foo(整数n,整数k){ int-rez=1; 特伦努特尼雷斯酒店; int最高值_exp=0; if(k16){ printf(“不正确”); 返回NULL; } 而(rez,c,function,math,C,Function,Math,你的任务是将数字从基数10转换为其他基数(即从基数2转换为基数16) 本质上 n=coef(xp)*b^(xp)+coef(xp-1)*b^(xp-1)+…+coef(1)*b^(0)+coef(0)*b^(0) 其中,以下为非负整数: n是给定的数字 coef(t)表示指数为t的系数 b是您要转换到的基础,并且 xp是最高指数 这种方法是通过重复的除法和余数运算来实现的。在伪代码中: 对于i=xp到0,包括: coef=n/b**i/'/'是整数除法,**'是指数运算 n=n%b**i/
n=coef(xp)*b^(xp)+coef(xp-1)*b^(xp-1)+…+coef(1)*b^(0)+coef(0)*b^(0)
其中,以下为非负整数:
是给定的数字n
表示指数为t的系数coef(t)
是您要转换到的基础,并且b
是最高指数xp
对于i=xp到0,包括:
coef=n/b**i/'/'是整数除法,**'是指数运算
n=n%b**i/'%'是余数运算
如果系数>0:
如果i!=xp:
打印“+”
恩迪夫
打印系数,“*”,b,“*”,i
恩迪夫
外循环
由此可以在C中实现一个相当简单的实现。请注意,您可能希望缓存b**i
的值,这样它就不会被多次计算,并且您首先需要一个函数来执行计算(我建议您自己编写一个)因为C不提供求幂运算符,除了二进制数
关于您目前编写的代码,有几点评论:
- 当
函数不接受任何参数时,它的标准规定定义之一是main
——不要偏离这一点,除非您试图为特定的实现调用一些实现定义的行为intmain(void){…}
- 从返回类型为
的函数返回void
是未定义的行为(来自C99标准6.8.6.4): 带有表达式的NULL
语句不得出现在返回类型为return
的函数中void
- 相反,您想要的是
(并更改函数返回的值的类型)并在调用函数中处理它,或者调用返回EXIT\u FAILURE;
,导致正常进程终止,在EXIT(EXIT\u FAILURE);
中声明stdlib.h
EXIT\u故障
和
;或者,一个简单的无表情EXIT
也可以返回;
- 相反,您想要的是
未初始化且未使用trenutnirez
- 通常,在写入标准输出时,您希望附加一个换行符,这意味着将
附加到\n
的格式字符串中,或者简单地使用printf
,这将自动为您执行此操作put
- 考虑在顶部声明所有函数原型:这很有用,因为当您有多个函数时,您不必担心哪个函数排在第一位,以便所有函数都“可见”(例如,如果您现在在
下面添加求幂函数,您应该将其重命名为更合适的函数,它将不知道新函数的签名)foo
void
的函数中返回NULL。这不是问题所在,它是这样工作的,但我总是可以将它注释掉,谢谢您的注释:)是的,它不会解决问题,因此使用OT(主题外)引用,但您无论如何都不应该这样做,所以是的,注释是一种方式;)您的代码打印的唯一内容是NEVALJA
无论这意味着什么。因此,请澄清。程序应该做什么?在您当前所做的工作之后,您必须找到应用于k的每一次幂的系数,从hightest_exp.Factor[highest_exp]=rez/power(k,highest_exp)开始,然后对余数和最高的_exp-1执行相同的操作。这可以通过递归、函数、循环来完成。由您定义设计。
#include <stdio.h>
#include <math.h>
void foo (int n, int k){
int rez=1;
int trenutnirez;
int highest_exp=0;
if (k<2 || k>16){
printf ("INCORRECT");
return NULL;
}
while (rez<n){
rez*=k;
highest_exp++;
}
rez=n;
highest_exp--;
}
int main (){
foo(200,8);
return 0;
}