查看: 818|回复: 0

[原创图文] C语言学习第八天 函数的开发 函数开发练习

[复制链接]

19

主题

28

帖子

3

精华

高级会员

Rank: 12Rank: 12Rank: 12

学币
229
荣耀
0
rank
0
违规
0
发表于 2020-12-10 22:13:55 | 显示全部楼层 |阅读模式
本帖最后由 鸦领主 于 2020-12-10 22:13 编辑

一、函数的开发


1.函数的定义:

返回值类型     函数名      参数列表
   int cifang(int m, int n)          函数头:返回值类型 函数名(参数列表)
{                                                函数名可以自定义
    int i = 0;
    int k = 1;
    while ((i < n))           函数体:大括内输入你要实现的内容
    {
        k = k * m;
        i++;
    }
    return k;
}
列如:
#include<stdio.h>
int cifang(int m, int n)
{
    int i = 0;
    int k = 1;
    while (i < n) //i=0,n=6;0<6 循环6次
    {
        k = k * m; //循环一次k=1x3=3 ;循环二次k=3x3=9;循环三次k=9x3=27.......
        i++;
    }
    return k;//最后返回k最后得出的值
}
//上面是你定义的函数
int main()
{

    int y = cifang(5, 6);//这里直接调用这个函数带入俩个数值
    printf("结果是%d\n",y);//算出5的6次方
    int x = cifang(3, 4);//3和4是送入的实际参数,可以再次调用这个函数重复使用
    printf("结果是%d\n", x);

    return 0;
}

C语言学习第八天

C语言学习第八天


2.制作一些简单的函数
%c输出一个字符
a)判断一个字符是否为字母

#include<stdio.h>
int zimu(int i)
{
    if (i >= 'a' && i <= 'z')//判断输入的字符是否大于等于a,而且小于等于z
        return 1; //成立返回真
    else
        return 0;//不成立返回假
//4句简化成一句   return i >= 'a' && i <= 'z';
}
//上面为定义的函数
int main()
{
    int i = 'h';
    (zimu(i))? printf("你输入的%c是字母", i): printf("你输入的不是字母"); //返回真执行第句,返回假执行第二句

    return 0;
}

C语言学习第八天

C语言学习第八天

C语言学习第八天

C语言学习第八天


b)判断一个字符是否为0-9之间的数字
int shuzi(int i)
{
    if (i >= '0' && i <= '9')
        return 1;
    else
        return 0;
//4句简化成一句   return i >= '0' && i <= '9';
}
int main()
{
    int i = '3';
    (shuzi(i))? printf("你输入的%c是", i): printf("你输入的不是");

    return 0;
}

C语言学习第八天

C语言学习第八天



二、函数开发练习


1.编写一个函数,功能:测试带入的数字是否为素数;连续输入3个数字,判断这个3个数字分别是否为素数并打印。
#include<stdio.h>
#include<math.h>
int shusu(int i)
{
    int n = 2;
    int m = sqrt(i) + 1;
    while (m>=n)
    {
        if (i % n == 0)
            return 0; //如果程序执行到这里说明不是素数,直接返回假
        n++;
    }    
        return 1; //能执行到这里说明是素数,直接返回真
}
//上面是编写的函数
int main()
{
    int a, b, c;
    printf("请输入3个数字判断是否为素数:");
    scanf_s("%d%d%d",&a,&b,&c);
    (shusu(a))? printf("%d是素数\n", a): printf("%d不是素数\n", a);
    (shusu(b)) ? printf("%d是素数\n", b) : printf("%d不是素数\n", b);
    (shusu(c)) ? printf("%d是素数\n", c) : printf("%d不是素数\n", c);
    return 0;

}

C语言学习第八天

C语言学习第八天


2.编写一个函数,功能:打印出a到z之间的素数

#include<stdio.h>
#include<math.h>
int shusu(int i)
{
    int n = 2;
    int m = (int)sqrt(i) + 1;
    while (m>=n)
    {
        if (i % n == 0)
            return 0;
            
        n++;
    }    
    return 1;
}
//上面判断否为素数
//void不需要return
void fanwei(int a,int z)//接收俩个数字
{
    int i = 0;
    while (a<z)
    {
        if (shusu(a))//每循环一次送如shusu里面判断
        {
            printf("%d ", a); //再打印出来
            i++;
        }
        a++;
        
    }
    printf("\n共打印%d个素数", i);
}
int main()
{
    int i, n;
    printf("请输入:");
    scanf_s("%d%d", &i, &n);
    fanwei(i, n); //把俩个数字送入void fanwie
    return 0;
}

C语言学习第八天

C语言学习第八天

3、编写一个菜单函数
#include<stdio.h>
int caidan()
{
    puts("1、浏览所有数据");
    puts("2、添加数据");
    puts("3、删除数据");
    puts("4、修改数据");
    puts("0、退出程序");
    printf("===========\n");
    int i;
    printf("请选择:");
    scanf_s("%d", &i);
    return i;
    
}
//上面为函数内容
int main()
{
    while (caidan())//返回值为0退出循环不等于0一直循环
          ;  
    return 0;
}

C语言学习第八天

C语言学习第八天


4.编写一个函数,求俩个数的最大公约数(2,3,6都能被12和18整除那么最大公约数是6)
#include<stdio.h>
int yueshu(int a,int b)
{
    int m = a > b ? b : a;  //求出最小的数字
    while (m>0) //从最小的数字开始探测
    {
        if (a % m == 0 && b % m == 0) //能同时被a或者b整除
        {
            printf("%d和%d的最大公约数是:%d", a, b, m);
            return m;
        }
        m--; //比如12到11,10,9.....找出第一个能被整除的数字
    }
    
}
int main()
{
    yueshu(18, 12);
    
}

C语言学习第八天

C语言学习第八天
思路:如从12开始向下探测11,10,9,8,7...找出第一个能被a和b同时整除的数

4.编写一个函数,求俩个数的最小公倍数(6、15两数的公倍数有30、60、90、……,6及15两数之最小公倍数为30)
#include<stdio.h>
int yueshu(int a,int b)
{
    int m = a > b ? a : b; //求出最大的数字
    while (m)//从某个数开始一直向上探测
    {
        if (m %a  == 0 && m % b == 0)//直到找出能同时被a或者b整除
        {
            printf("%d和%d的最小公倍数是:%d", a, b, m);
            return m;
        }
        m++;//比如36,37,38...直到找出可以同时整除a和b的数
    }
    
}
int main()
{
    yueshu(18, 12);
    
}

C语言学习第八天

C语言学习第八天

思路:如从36开始向上探测37,38,39...找出第一个能同时整除a和b的数

5.代码融合在一起
为了看着不乱我们将代码分为多个cpp
(隔页调用需要声明:将要调用的函数的函数头复制到本页加个;)

main.cpp
#include<stdio.h>
int caidan();

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

菜单.cpp
#include<stdio.h>
#include<Windows.h>
void Testbeishu();
void Testgongyue();
void Testsushu();
int caidan()
{
    system("cls");
    int a;
    puts("1、求最大公约数");
    puts("2、求最小公倍");
    puts("3、判断是否为素数");
    puts("0、退出程序");
    puts("===============");
    printf("请选择:");
    scanf_s("%d", &a);
    switch (a)
    {
    case 1:
        Testgongyue();
        break;
    case 2:
        Testbeishu();
        break;
    case 3:
        Testsushu();
        break;
    case 0:
        return a;
    default:
        printf("输入的数字无效\n");
        system("pause");
        break;
    }
    return a;
}

case要用.cpp;
#include<stdio.h>
#include<Windows.h>
int gongyue(int a, int b);
int beishu(int a, int b);
int sushu(int a);
void Testgongyue()
{
    while (1)
    {
        system("cls");
        int a, b;
        printf("你选择了求最大公约数\n请输入俩个数字求最大公约:");
        scanf_s("%d%d", &a, &b);
        if (a == 0&&b==0)
            return;
        printf("%d和%d的最大公约数是%d\n", a, b, gongyue(a, b));
        system("pause");
    }
}
void Testbeishu()
{
    while (1)
    {
        system("cls");
        int a, b;
        printf("你选择了求最小公倍数\n请输入俩个数字求最小公倍:");
        scanf_s("%d%d", &a, &b);
        if (a == 0 && b == 0)
            return;
        printf("%d和%d的最小公倍数是%d\n", a, b, beishu(a, b));
        system("pause");
    }
}
void Testsushu()
{
    while (1)
    {
        system("cls");
        int a;
        printf("输入0返回到选项列表\n");
        printf("你选择了判断是否为素数\n请输入一个数判断是否为素数:");
        scanf_s("%d", &a);
        if (a == 0)
            return;
        (sushu(a)) ? printf("%d是素数\n", a) : printf("%d不是素数\n", a);
        system("pause");
    }
}

最大公约数.cpp
#include<stdio.h>
int gongyue(int a, int b)
{
    int m=(a > b) ? b : a;
    while (m>0)
    {
        if (a % m == 0 && b % m == 0)
            return m;
        m--;
    }

}

最小公倍数.cpp
#include<stdio.h>
#include<stdio.h>
int beishu(int a, int b)
{
    int m = (a > b) ? a : b;
    while (m)
    {
        if (m % a == 0 && m % b == 0)
            return m;
        m++;
    }

}

素数.cpp
#include<stdio.h>
#include<math.h>
int sushu(int a)
{
    if (a % 2 == 0&&a!=2)
        return 0;
    if (a == 1)
        return 0;
    int i = 2;
    int m = (int)sqrt(a) + 1;
    while (i<m)
    {
        if (m % i == 0)
            return 0;
        i++;
    }
    return 1;
}
或者可以创建一个头文件把声明全部放进去

C语言学习第八天

C语言学习第八天

C语言学习第八天

C语言学习第八天

C语言学习第八天

C语言学习第八天

F10单步跟踪,F11进菜单函数

C语言学习第八天

C语言学习第八天

C语言学习第八天

C语言学习第八天

C语言学习第八天

C语言学习第八天

C语言学习第八天

C语言学习第八天

C语言学习第八天

C语言学习第八天

6.软件运行流程
将地址固定的方法:

C语言学习第八天

C语言学习第八天
链接器→高级→将随机基址改为否,固定改为是

C语言学习第八天

C语言学习第八天
栈是循环使用的,当返回到main函数,栈将不会使用,下次再调用其他函数时还是同样的空间

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