函数的学习

函数的引用

在主函数定义二维数组,在有参无返函数中实现杨辉三角
  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 void YangHui(int n,int arr[][n]);
  5 int main(int argc, const char *argv[])
  6 {
  7     int n;
  8     printf("请输入杨辉三角的行数");
  9     scanf("%d",&n);
 10     int a[n][n];
 11     YangHui(n,a);
 12     return 0;
 13 }
 14 void YangHui(int n,int arr[][n])
 15 {
 16     for(int i=0;i<n;i++)
 17     {
 18         for(int j=0;j<=i;j++)
 19         {
 20             if(i==j||j==0)
 21             {
 22                 arr[i][j]=1;
 23             }
 24             else
 25             {
 26                 arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
 27             }                                                 
 28             printf("%-4d",arr[i][j]);
 29         }
 30         printf("\n");
 31     }
 32 }
效果图

在主函数定义二维数组并输入,在有参有返函数中计算二维数组的第二大值
  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 int second_max(int line,int row,int arr[line][row]);
  5 int main(int argc, const char *argv[])
  6 {
  7     //计算与最大值不同的第二大值
  8     int line,row;
  9     printf("请输入行数");
 10     scanf("%d",&line);
 11     printf("请输入列数");
 12     scanf("%d",&row);
 13     int a[line][row];
 14     for(int i=0;i<line;i++)
 15     {
 16         for(int j=0;j<row;j++)
 17         {
 18             printf("请输入%d行%d列的值:",i+1,j+1);
 19             scanf("%d",&a[i][j]);
 20         }
 21     }
 22     int second=second_max(line,row,a);
 23     printf("第二大值为:%d\n",second);
 24 
 25 
 26     return 0;
 27 }
 28 int second_max(int line,int row,int arr[line][row])
 29 {
 30     int min=arr[0][0];
 31     int max=arr[0][0];
 32     for(int i=0;i<line;i++)
 33     {
 34         for(int j=0;j<row;j++)
 35         {
 36             if(min>arr[i][j])                                                                                                                                                                       
 37             {
 38                 min=arr[i][j];
 39             }
 40             if(max<arr[i][j])
 41             {
 42                 max=arr[i][j];
 43             }
 44         }
 45     }
 46     int second_max=min;
 47     for(int i=0;i<line;i++)
 48     {
 49         for(int j=0;j<row;j++)
 50         {
 51             if(second_max<arr[i][j]&&arr[i][j]!=max)
 52             {
 53                 second_max=arr[i][j];
 54             }
 55         }
 56     }
 57     return second_max;
 58 }
效果图

在主函数中定义两个字符串并输入,在有参无返函数中实现字符串拷贝
  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 void Strcpy(char a[],char b[]);
  5 int main(int argc, const char *argv[])
  6 {
  7     char a[40]="";
  8     char b[20]="";
  9     printf("请输入数组a的内容");
 10     gets(a);
 11     printf("请输入数组b的内容");
 12     gets(b);
 13     Strcpy(a,b);
 14     printf("拷贝后a:\n");
 15     puts(a);
 16     return 0;
 17 }
 18 void Strcpy(char a[],char b[])
 19 {
 20     int i;
 21     for( i=0;b[i]!='\0';i++)
 22     {
 23         a[i]=b[i];
 24     }
 25     a[i]='\0';
 26 }
 27   
效果图

在主函数中定义两个字符串并输入,在有参无返函数中实现字符串链接
  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 void Strcat(char a[],char b[]);
  5 int main(int argc, const char *argv[])
  6 {
  7     //自定义函数实现链接
  8     char a[40]="";
  9     char b[20]="";
 10     printf("请输入数组a的内容");
 11     gets(a);
 12     printf("请输入数组b的内容");
 13     gets(b);
 14     Strcat(a,b);
 15     printf("链接后a:\n");
 16     puts(a);
 17     return 0;
 18 }
 19 void Strcat(char a[],char b[])
 20 {
 21     int i;
 22     for( i=0;a[i]!='\0';i++);
 23     for(int j=0;b[j]!='\0';j++)
 24     {
 25         a[i]=b[j];
 26         i++;
 27     }
 28     a[i]='\0';
 29 }
 30     
效果图

在主函数中定义一个字符串并输入,在有参有返函数中是atoi
  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 int Atoi(char a[]);
  5 int main(int argc, const char *argv[])
  6 {
  7     char a[40]="";
  8     printf("请输入数组a的内容");
  9     gets(a);
 10     int num=Atoi(a);
 11     printf("%d\n",num);
 12     return 0;
 13 }
 14 int Atoi(char a[])
 15 {
 16      int i=0;
 17      while(a[i]==' ')
 18          i++;
 19      //记录符号的下表
 20      int j=i;
 21    //定义一个变量接受数字
 22       int sum=0;
 23      //判断是否为正负号
 24       if(a[i]=='+'||a[i]=='-')
 25       {
 26           i++;
 27       }
 28       //循环字符串
 29       while(a[i]!='\0')
 30       {
 31           //判断是否为数字
 32           if(a[i]>='0'&&a[i]<='9')
 33           {
 34               //如果是是数字由公式反推整个数字
 35               sum=sum*10+(a[i]-'0');                                                                                
 36           }
 37           else
 38           {
 39               //不是数字就跳出循环
 40               break;
 41           }
 42           i++;
 43       }
 44       //判断第一个不是空格的下表是否为符号
 45       if(a[j]=='-')
 46           //是负号就输出负的值
 47           sum=-sum;
 48       else
 49           //其他情况输出正常输出sum
 50             sum=sum;
 51       return sum;
 52 ;
 53 }
 54 
效果图

在主函数定义二维数组并输入,在有参无返函数中实现二维数组转置
  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 void Trans(int n,int m,int arr[n][m],int a[m][n]);
  5 int main(int argc, const char *argv[])
  6 {
  7     int n,m;
  8     printf("请输入数组的行数:");
  9     scanf("%d",&n);
 10     printf("请输入数组的列数:");
 11     scanf("%d",&m);
 12     int arr[n][m];
 13     int a[m][n];
 14     Trans(n,m,arr,a);
 15     return 0;
 16 }
 17 void Trans(int n,int m,int arr[n][m],int a[m][n])
 18 {
 19 
 20     for(int i=0;i<n;i++)
 21     {
 22         for(int j=0;j<m;j++)
 23         {
 24             printf("请输入arr[%d][%d]",i,j);
 25             scanf("%d",&arr[i][j]);                                              
 26         }
 27     }
 28     for(int i=0;i<m;i++)
 29     {
 30             for(int k=0;k<n;k++)
 31             {
 32                 a[i][k]=arr[k][i];
 33                 printf("%d",a[i][k]);
 34             }
 35             puts("");
 36     }
 37 }
效果图

在主函数定义一维数组并输入,在有参有返函数中计算一维数组的第二小值
  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 int second_min(int n,int arr[n]);
  5 int main(int argc, const char *argv[])
  6 {
  7     //自定义函数实现输出与最大值不同的第二大值
  8     int n;
  9     printf("请输入数组长度");
 10     scanf("%d",&n);
 11     int a[n];
 12     for(int i=0;i<n;i++)
 13     {
 14         printf("请输入数组元素%d的值",i);
 15         scanf("%d",&a[i]);
 16     }
 17     int second=second_min(n,a);
 18     printf("第二小值为%d\n",second);                                             
 19     return 0;
 20 }
 21 int second_min(int n,int a[n])
 22 {
 23     int max=a[0];
 24     int min=a[0];
 25     for(int i=0;i<n;i++)
 26     {
 27         if(max<a[i])
 28             max=a[i];
 29         if(min>a[i])
 30             min=a[i];
 31     }
 32     int second=max;
 33     for(int i=0;i<n;i++)
 34     {
 35         if(second>a[i]&&a[i]!=min)
 36             second=a[i];
 37     }
 38     return second;
 39 }
效果图

函数的递归

递归计算各个位数字的乘积
  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 int fun(int n);
  5 int main(int argc, const char *argv[])
  6 {
  7     //函数递归实现数字上各位乘积
  8     int n;
  9     printf("请输入数字:\n");
 10     scanf("%d",&n);
 11     int num=fun(n);
 12     printf("各位数字的乘积为%d\n",num);
 13     return 0;
 14 }
 15 int fun(int n)
 16 {
 17     if(n>=0&&n<=9)
 18     {
 19         return n;
 20     }
 21     else
 22     {
 23         return n%10*fun(n/10);
 24     }
 25 }     
效果图

思维导图

  • 24
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值