查看: 1099|回复: 2

[原创图文] 逆向学习第9天_函数编写练习

[复制链接]

17

主题

32

帖子

2

精华

高级会员

Rank: 12Rank: 12Rank: 12

学币
258
荣耀
0
rank
0
违规
0
发表于 2020-10-19 16:45:14 | 显示全部楼层 |阅读模式
本帖最后由 Guido 于 2020-10-19 16:45 编辑

1、测试完以下系统函数完成之后,试图编写以下函数:
A)isdigit,isalpha,isalnum等
B)toupper,tolower等(参考MISDN Sample)
注意:为了防止与系统函数冲突,将函数第一个字母大写。
#include<stdio.h>
//isdigit判断是否是十进制0~9的数字,若是返回真,若不是返回假。
int Isdigit(int a)
{
        if (a>= '0'&&a<= '9')
                return 1;
        return 0;
}

int main()
{
        char c = '9';
                int n;
        n=Isdigit(c);
        while(n)
        {
                printf("是0~9的数字");
                return 0;
        }
        printf("不是0~9的数字");
        return 0;
}        
#include<stdio.h>
//isalpah判断是否是字母(无所谓大小写),若是返回真,若不是返回假。
int Isalpha(int a)
{
        if (a >= 'a'&&a <= 'z'|| a >= 'A'&&a <= 'Z')
                return 1;
        return 0;
}

int main()
{
        char c = 'x';
        int n;
        n = Isalpha(c);
        while (n)
        {
                printf("是字母");
                return 0;
        }
        printf("不是字母");
        return 0;
}
#include<stdio.h>
//isalpah判断是否是字母或数字(无所谓大小写,若是返回真,若不是返回假。
int Isalnum(int a)
{
        if (a >= 'a'&&a <= 'z' || a >= 'A'&&a <= 'Z'||a>='0'&&a<='9')
                return 1;
        return 0;
}

int main()
{
        char c = 'x';
        int n;
        n = Isalnum(c);
        while (n)
        {
                printf("是字母或数字");
                return 0;
        }
        printf("不是字母或数字");
        return 0;
}
#include<stdio.h>
//toupper将小写字母转换为大写字母
int Toupper(int a)
{
        int b;
        if (a >= 'a'&&a <= 'z')
        {
                b=a - 32;
                return b;
        }
        return 0;
}

int main()
{
        char c = '0';
        int n;
        n = Toupper(c);
        printf("%c", n);
                return 0;
}
#include<stdio.h>
//tolower将小写字母转换为大写字母
int Tolower(int a)
{
        int b;
        if (a >= 'A'&&a <= 'Z')
        {
                b = a + 32;
                return b;
        }
        return 0;
}

int main()
{
        char c = 'D';
        int n;
        n = Tolower(c);
        printf("%c", n);
        return 0;
}


2、编写一个函数,用来测试带入的数字是否为素数,函数的格式为:int IsPrime(int n)当带入n的数字是素数时,返回值是1,.否则返回值是0;在main函数中调用IsPrime函效进行测试,连续输入3个数字,判断这个3个数字分别是否为素数并打印;
#include<stdio.h>

int IsPrime(int n)
{
        int i = 2;
        int m = n / 2 + 1;
        while (i < m)
        {
                if (n%i == 0)
                        break;
                i++;
        }
        if (i < m)
                return 0;
        return 1;
}


int main()
{
        int a, b, c;
        scanf_s("%d%d%d", &a, &b, &c);
        if (IsPrime(a))
                printf("%d是素数\n", a);
        else
                printf("%d不是素数\n", a);
        if (IsPrime(b))
                printf("%d是素数\n", b);
        else
                printf("%d不是素数\n", b);
        if (IsPrime(c))
                printf("%d是素数\n", c);
        else
                printf("%d不是素数\n", c);
        return 0;
}

3、编写一个函数打印出从x到y之间的素数:void PrintPrime(int x,int y);在PrintPrime中循环调用IsPrime函数实现;在main函数输入2个不同的数字传给PrintPrime的x和y参数;
#include<stdio.h>

int IsPrime(int n)
{
        int i = 2;
        int m = n / 2 + 1;
        while (i < m)
        {
                if (n%i == 0)
                        break;
                i++;
        }
        if (i < m)
                return 0;
        return 1;
}

void PritPrime(int x, int y)
{
        int sum=0;
        if (x < y)
        {
                while (x < y)
                {
                        if (IsPrime(x))
                        {
                                printf("%d  ", x);
                                sum++;
                        }
                        x++;
                }
        }
        else
                printf("输入区间无效\n");
        printf("\n共%d个素数", sum);
}





int main()
{
        int a, b;
        scanf_s("%d%d", &a, &b);
                PritPrime(a, b);

        return 0;
}

4、编写一个函数打印出从x之后n个的素数:void PrintPS(int x,int n);要求PrintPS循环调用IsPrime函数实现,在main函数输入2个数字传递PrintPS的x和n参数
#include<stdio.h>

int IsPrime(int n)
{
        int i = 2;
        int m = n / 2 + 1;
        while (i < m)
        {
                if (n%i == 0)
                        break;
                i++;
        }
        if (i < m)
                return 0;
        return 1;
}

void PritPS(int x, int n)//打印出X之后的Y个素数
{
        while (n)
        {
                if (IsPrime(x))
                {
                        printf("%d  ", x);
                        n--;
                }
                        x++;
        }
}





int main()
{
        int a, b;
        scanf_s("%d%d", &a, &b);
        PritPS(a, b);

        return 0;
}

5、编写一个菜单函数:int Menu()
使用puts打印菜单:要求整齐好看

1、浏览所有数据
2、添加数据
3、删除数据
4、修改数据
0、退出程序
===========
请选择:

将输入的数值作为返回值返回给主调函数,在main函数中循环调用这个Menu函数。当返回的数值是0时结束循环,退出进程。
#include<stdio.h>
#include<stdlib.h>
int menu()
{
        system("cls");
        puts("1、浏览所有数据");
        puts("2、添加数据");
        puts("3、删除数据");
        puts("4、修改数据");
        puts("0、退出程序");
        puts("========================");
        puts("请选择");
        int n;
        scanf_s("%d", &n);
        if (n >= 0 && n <= 4)
                return n;
        else
        {
                printf("输入无效\n");
                system("pause");
        }
        return 1;
}


int main()
{
        while (menu())
        {
                menu();
        }
        return 0;
}


6、编写一个函数求两个数字的最大公约数:int divisor(int a,int b)
     再编写一个函数求两个数字的最小公倍数:int multiple(int a,int b)
     在main函数中分别输入两个数字来调用以上两个函数,打印出最大公约数和最小公倍数。
#include<stdio.h>
int divisor(int a,int b)
{
        int n;
        a < b ? n = a : n = b;
        while (n)
        {
                if (a%n == 0 && b%n == 0)
                {
                        printf("%d与%d的最大公约数为%d\n", a, b,n );
                        return n;
                }
                n--;
        }
        printf("%d与%d的最大公约数为%d\n", a, b, 1);
        return 0;
}

int multiple(int a, int b)
{
        int n;
        int i = 2;
        a > b ? n = a : n = b;
        while (n < a*b)
        {
                if (n%a == 0 && n%b == 0)
                {
                        printf("%d与%d的最小公倍数是%d", a, b, n);
                        return 0;
                }
                n++;
        }
        printf("%d与%d的最小公倍数是%d", a, b, a*b);
        return 0;
}


int main()
{
        int a;
        int b;
        scanf_s("%d%d", &a,&b);
        divisor(a, b);
        multiple(a, b);
        return 0;
}



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

点评

可以可以。  详情 回复 发表于 2020-10-21 19:53
论坛交流群:672619046

17

主题

32

帖子

2

精华

高级会员

Rank: 12Rank: 12Rank: 12

学币
258
荣耀
0
rank
0
违规
0
 楼主| 发表于 2020-10-21 19:53:18 | 显示全部楼层
roger 发表于 2020-10-21 19:32
最好带上运行结果,这样方便以后复习

可以可以。
学逆向论坛-免费的逆向学习论坛
微信扫一扫即可使用手机论坛
快速回复 返回顶部 返回列表