Guido 发表于 2020-10-19 16:45:14

逆向学习第9天_函数编写练习

本帖最后由 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;
}


roger 发表于 2020-10-21 19:32:27

最好带上运行结果,这样方便以后复习

Guido 发表于 2020-10-21 19:53:18

roger 发表于 2020-10-21 19:32
最好带上运行结果,这样方便以后复习

可以可以。
页: [1]
查看完整版本: 逆向学习第9天_函数编写练习