C语言 函数简介及综合练习

本文介绍了C语言中的函数,包括常用和特殊函数的使用,并提供了多个实践练习,如生成随机数、判断素数和回文数、计算阶乘等。同时,探讨了函数传参和递归的概念,给出了找数组最大值、排序和递归实现斐波那契数列等例子。
摘要由CSDN通过智能技术生成

函数:

函数是一段具有某项功能的代码的集合,是C语言中管理代码的最小单位
函数把代码分成一个个函数,可以方便管理和调用代码

函数分类:
    标准库函数:
        C语言标准委员会为C语言以函数形式提供的一套基础功能,被封装在一个libc.so
        库里,使用时需要包含头文件,函数名(参数)即可调用标准库函数

注:在一部分编译器中,没有加头文件的情况下一部分函数依旧能够正常运行,但编译器会发出warning警告,这是因为这部分编译器自动包含了这一部分函数的功能,如gcc就是不需要添加的。
例:
在没有加入头文件stdio.h和ctype.h的情况下直接运行如下代码

int main(int argc,const char* argv[])
{
   
    printf("%d",toupper('a'));
}

结果得:
在这里插入图片描述

如图所示,编译器对printf和toupper两个函数发出了警告,但是在警告的下方,依旧通过printf打印出了toupper返回的’a’转为’A’后所对应的ACSII码值65
此处仅做特殊情况展示,平常的编程过程中头文件应做到引用齐全

常用或特殊函数例举:

        int atoi(const char *nptr);
        long atol(const char *nptr);
        long long atoll(const char *nptr);
        功能:把字符串转换为整数

        #include <ctype.h>
        int isalnum(int c);
        功能:判断c是不是数字、字母字符
        int isalpha(int c);
        功能:判断c是不是字母字符
        int isdigit(int c);
        功能:判断c是不是数字字符
        int islower(int c);
        功能:当c是小写字母字符时返回真
        int isupper(int c);
        功能:当c是大写字母字符时返回真
        int toupper(int c);
        功能:把字符转换成大写字符
        int tolower(int c);
        功能:把字符转换成小写字符
        

        #include <stdlib.h>
        int abs(int j);
        功能:返回j的绝对值

        以下函数被封装在libm.so库中 <math.h> 编译时需要加上-lm才可正常运行
        #include<math.h>
        double pow(double x, double y);
        功能:求x的y次幂
        double fabs(double x);
        功能:求浮点型数据的绝对值
        double sqrt(double x);
        功能:返回x的平方根
        double floor(double x);
        功能:返回小于等于x的最大整数
        double ceil(double x);
        功能:返回大于等于x的最小整数

        #include <time.h>
        time_t time(time_t *t);
        功能:返回自1970-1-1 0:0:0 到当前时间过了多少秒
            time(NULL)

        #include <stdlib.h>
        int system(const char *command);
        功能:调用系统命令
        int rand(void);
        功能:返回一个随机整数
        void srand(unsigned int seed);
        功能:种随机种子

练习1: 获取10个范围[100,1001)的随机数
公式:
[a,b)
rand()%(b-a)+a
由题目得
rand()%(1001-100)+100

#include <stdio.h>
#include <stdlib.h>	//调用rand函数
#include <time.h>	//调用time函数

int main(int argc,const char* argv[])
{
   
        srand(time(NULL));	//将随机数种子设为time返回值(为1970-1-1 0:0:0至今的秒数),这样能更大程度上接近真随机,但是执行过于频繁打印出的数据还是同一组
        for(int i = 0; i<10; i++)
        {
   
            printf("%d\n",rand()%901+100);
        }
}

练习2: 随机出一注双色球彩票号码,不能重复 红球六个:1-33 蓝球一个:1-16

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc,const char* argv[])
{
   
        srand(time(NULL));
        int arr[6] = {
   },n = 0;	//arr数组存储红球,n用于存储已经生成的红球的个数
        for(int i = 0; i<6; i++)
        {
   
            int flag = 1;
            arr[i] = rand()%6+1;
            for(int j = 0;j<n; j++)
            {
   
                if(arr[j] == arr[i])	//判断是否重复
                {
   
                    i--;
                    flag = 0;
                    break;
                }
            }
            if(flag)
            {
   
                n++;
                printf("红球%d号:%d\n",i+1,arr[i]);
            }
        }
        printf("蓝球:%d\n",rand()%16+1);
}

    系统函数:
        是操作系统以函数接口形式提供的一套功能,这些功能:
            内存管理、信号处理、文件io、文件管理、进程管理、进程通信、线程管理、线程同步、网络通信(最重要的是网络通信)
    第三方库函数:
        由第三方提供的,一些开源或者收费的代码
        MD5 验证密码的第三方库
        JSON 序列化和反序列化
        glog 日志记录

    自定义函数:
        为了更好地管理代码,减少冗余把代码封装成函数
        注意:一个函数尽量控制在50行以内,要求一个函数一个功能

        函数声明:函数声明的目的是为了告诉其他代码该函数的调用格式
            返回值类型 函数名(类型1 形参名,类型2 形参名2,...);
            1、C语言中,函数名全部小写,用下划线分隔
            2、如果不需要参数时,建议在括号内写void,不要空着
            3、如果不需要返回值,也要在函数前写void,但是函数体中的return不能
               返回数据

            隐式声明:
                当调用函数之前没有声明和定义,编译器会猜测函数的格式,参数列表会
                根据调用时提供的实参(数据)来猜测,返回值会猜测成int类型。
                但是隐式声明应该是需要尽量避免的

            注:函数定义如果在函数调用之前,可以省略函数声明

        函数定义:
            返回值类型 函数名(类型1 形参1,类型2 形参2,...)
            {
                函数体
                return val;
            }

        函数调用:
            函数名(实参1,实参2,...);
            注意:返回值会放在调用的位置,可以立即打印显示,或者可以用变量记录下来

综合练习:
1、实现一个函数,判断整数是否是素数,调用该函数显示出100~10000之间所有的素数

#include <stdio.h>
#include <stdbool.h>	//引入stdbool.h以使用bool类型

bool is_prime(int p)	//判断是否是素数的函数
{
   
    for(int i = 2; i<=p/2; i++)
    {
      
        if(0 == p%i) return false;
    }   
    return true;
}

int main(int argc,const char* argv[]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值