Java教程

西安交大计算机考研软件工程编程题库(二十四)

本文主要是介绍西安交大计算机考研软件工程编程题库(二十四),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

西安交大计算机考研软件工程编程题库(二十四)

  • 鄙人今年备考,主要目的在于记录学习历程,望道友们勿喷~
  • 希望能做到每日一题~
  • 开始炼丹~

上篇链接:西安交大计算机考研软件工程编程题库(二十三)
下篇链接:西安交大计算机考研软件工程编程题库(二十五)


文章目录

  • 西安交大计算机考研软件工程编程题库(二十四)
  • 一、题目
  • 二、解答
    • 1.分析
    • 2.代码实现
    • 3.输出结果
  • 总结


一、题目

设计下面两个函数:

  • 函数readoctal(),读入八进制序列,转换成十进制正整数;
  • 函数writeoctal(),将十进制正整数转换成相应的八进制数字序列,并打印出来。

二、解答

1.分析

分析一波,本题的第二问可参考西安交大计算机考研软件工程编程题库(十八)这道题的实现方式。

  • 对于第一问八进制转十进制,先回忆一下数学上的计算方式,假设一个八进制数123,若想转换为十进制,只需要做计算1x82+2x81+3x80=83。
  • 为实现上式,需要完成的步骤有:数据拆分&乘以相应的8的n-1次幂,不知道看到数据拆分是否让道友们想到上一题递归拆分数据,这里可以继续套用上一题。

话不多说,实现一下。

Ps:不出意外鄙人的此系列文章都会用C实现,其他语言的道友见谅~。

2.代码实现

代码如下:

#include<stdio.h>
#include<math.h>
//递归实现十进制转八进制
void readoctal(int n, unsigned int radix){
    n = (unsigned int)n;
    if(n/radix){
        readoctal(n/radix, radix);
    }
    putchar('0' + n%radix);
}

//递归实现八进制转十进制
void writeoctal(int n, int result, int i){
    if(n/10 == 0){
        printf("%d", result+=(n*pow(8, i)));
    }
    else{
        result+=((n%10)*pow(8, i));
        writeoctal(n/10, result, ++i);
    }
}
int main(){
    int n8, n10;				//用于输入
    int result = 0, flag = 0;	//result用来存放结果,flag用于标记个位十位百位等(形参偷懒写成i了)
    
    //测试第一问
    printf("——————————第一问——————————\n");
    printf("请输入一个十进制数:\n");
    scanf("%d", &n10);
    printf("原始十进制数据为:%d\n", n10);
    printf("输出八进制数据为:");
    readoctal(n10, 8);
    
    //测试第二问
    printf("\n——————————第二问——————————\n");
    printf("请输入一个八进制数:\n");
    scanf("%d", &n8);
    
    printf("原始八进制数据为:%d\n", n8);
    printf("输出十进制数据为:");
    writeoctal(n8, result, flag);
    return 0;
}

3.输出结果

在这里插入图片描述


总结

本题如果没有之前一些题目的铺垫,可能会实现起来有一定难度,但经过前面的铺垫,写起来会轻松很多。本题鄙人写的有些随意,结果是没问题,但对于第二问的写法,个人认为不是特别满意,道友们适当借鉴,自行斟酌~


Ps:
一个小小的建议,如果写这道题的时候发现前面写过的一些经典方法产生了遗忘,建议适当回顾一下~

这篇关于西安交大计算机考研软件工程编程题库(二十四)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!