-->
当前位置:首页 > 题库 > 正文内容

函数题:输入任意进制的自然数

Luz4年前 (2022-01-18)题库896
请编写函数,用循环方法输入任意进制的自然数。

#### 函数原型

c
int ScanRdx(int *num, int rdx);


说明:参数 num 为指示整型变量的指针,rdx 为数制(2 ~ 36)。函数将以 rdx 进制的形式输入自然数。若 rdx > 10,则用字母 Aa ~ Zz 来表示值为 10 ~ 35 的数字,字母大小写任意。若输入正确,则保存自然数至 num 所指变量中,函数值为 1(真),否则不保存自然数,函数值为 0(假)。

- 允许输入前导空白字符(包括:空格、回车、换行、水平制表、垂直制表、换页等)。
- 自然数至少输入一位数字,否则视为错误。
- 遇到非法字符立即结束输入,并将该字符退回缓冲区,留待后面的输入函数读取。

#### 裁判程序

c
#include <stdio.h>
#include <ctype.h>

int IsRdxDigit(char sym, int rdx);
int ScanRdx(int *num, int rdx);

int main()
{
int n = -1, r;
char c;
scanf("%d", &r);
if (ScanRdx(&n, r))
{
printf("%d\n", n);
}
else
{
puts("Error!");
}
c = getchar();
printf("%c\n", c);
return 0;
}

int IsRdxDigit(char sym, int rdx)
{
...(略)...
}

/* 你提交的代码将被嵌在这里 */


#### 输入样例1
in
15
5a5G


#### 输出样例1
out
1280
G



#### 输入样例2
in
16
16Dx


#### 输出样例2
out
365
x



要求:不调用 scanf 函数。

提示:

(1) 利用前面练习中编写的 IsRdxDigit 函数判断 rdx 进制数字。

(2) 可利用 C 库函数中的isspace 函数判断空白字符。

(3) 可利用 C 库函数中的 ungetc 函数将最近读取的字符退回缓冲区,使后面的输入能读到它。

---

关联习题:判断任意数制的数字字符。






答案:若无答案欢迎评论

参考答案


int ScanRdx(int *num, int rdx)
{
int val = 0;
int ok = 0;
char sym = getchar();
while (isspace(sym))
{
sym = getchar();
}
while (IsRdxDigit(sym, rdx))
{
val = val * rdx + (isdigit(sym) ? sym - '0' : toupper(sym) - 'A' + 10);
ok = 1;
sym = getchar();
}
ungetc(sym, stdin);
if (ok)
{
*num = val;
}
return ok;
}

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。