查看: 683|回复: 0

[原创图文] 逆向学习第11天_作业练习及内存跟踪

[复制链接]

17

主题

32

帖子

2

精华

高级会员

Rank: 12Rank: 12Rank: 12

学币
242
荣耀
0
rank
0
违规
0
发表于 2020-10-21 20:50:43 | 显示全部楼层 |阅读模式
本帖最后由 Guido 于 2020-10-22 21:23 编辑

1.在不同源文件中编写一些函数:例如:
int divisor(int a,int b)
int multiple(int a,int b)
int IsPrime(n)
等等,主函数可以跨文件访问这些函数;

2.编写一个菜单函数:int Menu()
使用puts打印菜单:要求整齐好看
1、求最大公约数
2、求最小公倍数
3、查着素数
0、退出程序.
=============
请选择:
将输入的数值作为返回值返回给主调函数,当返回的数值是0时结束循环,退出进程。当输入的1-3的数字时,快文件访问一些上一题中的真实功能的函数;

3、使用画图软件,对第2题中的多层次的函数调用进行入栈过程绘画。将每个函数所用到的变量和形式参数,在绘图软件中标示出他们的位置;
//求两个数的最大公约数,存在则返回最大公约数
#include<stdio.h>
int divisor(int a,int b)//
{
        puts("您选择求最大公约数,请输入两个数值");
        scanf_s("%d%d", &a, &b);
        int n;
        a<b?n = a : n = b;//从较小值开始递减,求公约数
        while (n)
        {
                if (a%n == 0 && b%n == 0)
                {
                        printf("%d与%d的最大公约数是%d\n\n", a, b, n);
                        return 0;
                }
                n--;
        }
        printf("%d与%d的最大公约数是%d\n\n", a, b, 1);
        return 1;
}
//判断一个数是否是素数,是的话返回1,不是的话返回0
#include<stdio.h>
#include<math.h>
int IsPrime(int a)
{
        puts("您选择了查看素数,请输入数值");
        scanf_s("%d", &a);
        int i = 2;
        int n = (int)sqrt(a) + 1;
        if (a / 2 == 0)
        {
                return 0;
        }
        while (i < n)
        {
                if (a%i == 0)
                {
                        break;
                }
                i++;
        }
        if (i < n)
        {        printf("%d不是素数\n\n", a);
                return 0;
        }
        else
        {
                printf("%d是素数\n\n", a);
                return 1;
        }
}
#include<stdio.h>
#include"type.h"
int Menu()
{
        int a=1, b=1;
        int n=1;
        puts("1、求最大公约数");
        puts("2、求最小公倍");
        puts("3、查看素数");
        puts("0、退出程序");
        puts("===============");
        puts("请选择");
        scanf_s("%d", &n);
        switch (n)
        {
                case 1:
                        divisor(a,b);
                        return n;
                        break;
                case 2:
                        multiple(a, b);
                        return n;
                        break;
                case 3:
                        IsPrime(a);
                        return n;
                        break;
                case 0:
                        return n;
                        break;
                default:
                                puts("输入无效,请重新输入");
        }
        return n;
}
//求两个数的最小公倍数,返回值为其最小公倍数
#include<stdio.h>
int multiple(int a, int b)
{
        puts("您选择了求最小公倍数,请输入两个数值");
        scanf_s("%d%d", &a, &b);
        int n;                                        //m中存储最小公倍数
        a > b ? n = a : n = b;//从两者中较大的值开始递增,依次寻找其最小公倍数
        while (n%a != 0 || n%b != 0)
        {
                n++;
        }
        printf("%d与%d的最小公倍数是%d\n\n", a, b, n);
        return n;
}
#include<stdio.h>
#include"type.h"
int IsPrime(int a, int b);
int IsPrime(int a);
int multiple(int a, int b);
int main()
{
        /*divisor(7, 12);*/
        /*IsPrime(33);*/
        /*multiple(7, 8);*/
                while (Menu());
        return 0;
}

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

2.在内存中跟踪并用表格表示出入栈出栈的过程

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

逆向学习第11天_作业练习及内存跟踪

温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
学逆向论坛-免费的逆向学习论坛
微信公众号
快速回复 返回顶部 返回列表