函数(1)1-16

本文介绍了如何在C语言中封装strlen、strcpy、strcmp和strcat函数,并通过main函数调用。此外,还展示了如何使用递归实现阶乘和斐波拉契数列的计算。
摘要由CSDN通过智能技术生成

一、C语言函数知识思维导图

二、作业

对strlen、strcpy、strcmp、strcat进行函数封装并在main函数中调用(分文件存放)

1、01_main.c文件(main函数文件)

 #include <stdio.h>                      
 #include <string.h>                     
 #include"./01_function.h"               
 int main(int argc, const char *argv[])  
 {                                       
    char str1[40]="";                               
    char str2[40]="";                               
    printf("请输入字符串str1和字符串str2:");       
    scanf("%s %s",str1,str2);                       
    strlen1(str1);                                  
    printf("\n");                                   
    strcmp1(str1,str2);                             
    printf("\n");                                   
    strcpy1();                                      
    printf("\n");                                   
    strcat1(str1,str2);                             
                                                    
    return 0;                                       
}                                                   
                                                    

2、01_function.h(头文件:函数的声明)

#ifndef _FUNCTION_H //如果没有定义过_function_h  
#define _FUNCTION_H //那么定义_function_h        
void strcat1(char str1[],char str2[]);           
void strlen1(char str1[]);                       
void strcmp1(char str1[],char str2[]);           
void strcpy1();                                  
                                                 
#endif                                           
                                                 

3、function.h(功能函数文件)

#include <stdio.h>                 
#include <string.h>                
//strlen                                           
                                                   
void strlen1(char str1[])                          
{                                                  
    int i=0;                                       
    for(i=0;str1[i]!='\0';i++)                     
    {                                              
                                                   
    }                                              
    printf("%d",i);                                
}                                                  
                                                   
//strcmp                                             
                                                     
void strcmp1(char str1[],char str2[])                
{                                                    
    int i,j;                                         
    for(i=0;str1[i]!='\0';i++)                       
    {                                                
                                                     
    }                                                
    for(j=0;str2[j]!='\0';j++)                       
    {                                                
                                                     
    }                                                
    if(i>j)                                          
        printf("字符串1大于字符串2\n");              
    else if(i<j)                                     
        printf("字符串1小于字符串2\n");              
    else                                             
        printf("字符串1与字符串2相等\n");            
}                                                    

//strcpy                                         
                                                 
void strcpy1()                                   
{                                                
    char str1[40] = "";                          
    char str2[40] = "";                          
    int i,j;                                     
    printf("请输入str1:");                       
    scanf("%s",str1);                            
    for(i=0;str1[i]!='\0';i++)                   
    {                                            
         str2[i] = str1[i];                      
    }                                            
    printf("%s\n",str2);                         
}                                                

//strcat                                                 
                                                         
void strcat1(char str1[],char str2[])                    
{                                                        
    int i,j;                                             
    i=strlen(str1);                                      
    for(j=0;str2[j]!='\0';j++)                           
    {                                                    
            str1[i] = str2[j];                           
            i++;                                         
    }                                                    
    printf("%s\n",str1);                                 
                                                         
}                                                        
                                                         

三、练习

1、利用递归求4的阶乘

2、利用递归求斐波拉契数列的第二十项的值

#include <stdio.h>
int factorial(int n)  //阶乘
{
    if(1 == n)
    {
        return 1;
    }
    else
    {
        return n*factorial(n-1);
    }

}

int fibonacci(int n)
{
                                                                                   
    if(n<=2)
    {
        return 1;
    }
    else
    {
        return fibonacci(n-1)+fibonacci(n-2);
    }
}

int main(int argc, const char *argv[])
{
    //1、求菲波拉契数列前20项和
    int n;
    printf("请输入项数:");
    scanf("%d",&n);
    int sum = fibonacci(n);
    printf("菲波拉契数列的前%d项和为:%d\n",n,sum);
    //2、求4的阶乘
    printf("请输入阶乘的阶数:");
    scanf("%d",&n);
    int mul = factorial(n);
    printf("%d的阶乘为%d\n",n,mul);
    return 0;
}
                                                                                   
                                                                                   


//运行结果
ubuntu@ubuntu:07_test$ gcc recursion.c
ubuntu@ubuntu:07_test$ ./a.out
请输入项数:20
菲波拉契数列的前20项和为:6765
请输入阶乘的阶数:4
4的阶乘为24

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值