1.在主函数定义二维数组,在有参无返函数中实现杨辉三角
程序代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 void Y_H(int n,int arr[n][n]);
5 int main(int argc, const char *argv[])
6 {
7 int n;//定义n,终端输入
8 printf("enter n:");
9 scanf("%d",&n);
10 int arr[n][n];//定义二维数组,杨辉三角行列相等
11 Y_H(n,arr);//调用函数Y_H
12 return 0;
13 }
14 void Y_H(int n,int arr[n][n])
15 {
16 for(int i=0;i<n;i++)//外循环,行
17 {
18 for(int j=0;j<=i;j++)//内循环,列
19 {
20 if(j==0||i==j)//第一列为1,行列相等时为1
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 }
运行结果:
2.在主函数定义二维数组并输入,在有参无返函数中计算二维数组的第二大值
程序代码:
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 int arr[3][4];//定义二维数组
8 int line=sizeof(arr)/sizeof(arr[0]);//计算行
9 int row=sizeof(arr[0])/sizeof(arr[0][0]);//计算列
10 for(int i=0;i<line;i++)//循环输入
11 {
12 for(int j=0;j<row;j++)
13 {
14 scanf("%d",&arr[i][j]);
15 }
16 }
17 Second_max(line,row,arr);//调用函数,传参
18 int s=Second_max(line,row,arr);//接函数返回值
19 printf("second=%d\n",s);
20 return 0;
21 }
22 int Second_max(int line,int row,int arr[line][row])//有参有返函数,接参
23 {
24 int max=arr[0][0],min=arr[0][0];//定义最值
25 int maxi=0,maxj=0;//定义最值下标
26 for(int i=0;i<line;i++)//循环比较大小,求最值,外行
27 {
28 for(int j=0;j<row;j++)//内列
29 {
30 if(max<=arr[i][j])//判断最大值
31 {
32 max=arr[i][j];//最大
33 maxi=i;maxj=j;//最值下标
34 }
35 if(min>arr[i][j])//判断最小
36 min=arr[i][j];//最小
37 }
38 }
39 int second=min;//定义第二大值为最小
40 for(int i=0;i<line;i++)//循环比较,外行
41 {
42 for(int j=0;j<row;j++)//内列
43 {
44 /* if(max==arr[i][j])//如果不用下标来判断,使用最大值判断
45 * 当有两个相等最大值,就会输出第三大值
46 continue; 第二次运行结果
47 */
48 if(maxi==i&&maxj==j)
49 continue;
50 if(second<arr[i][j])//判断第二大值,大于所有值(除最大值)
51 //先判断遇到最大值,结束,再循环(continue)
52 second=arr[i][j];
53 }
54 }
55 return second;//返回值
56 }
运行结果:
3.在主函数中定义两个字符串并输入,在有参无返函数中实现字符串拷贝
程序代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 void my_strcpy(char a[10],char b[10]);//函数声明
5 int main(int argc, const char *argv[])
6 {
7 char a[10]="";//定义两个字符串
8 char b[10]="";
9 printf("enter a :");
10 gets(a);
11 printf("enter b :");
12 gets(b);
13 my_strcpy(a,b);//调用函数,传参
14 return 0;
15 }
16 void my_strcpy(char a[10],char b[10])//自定义函数,接参
17 {
18 int i=0;
19 for(i=0;b[i]!='\0';i++)//循环赋值,遇到'\0'结束
20 {
21 a[i]=b[i];
22 }
23 a[i]='\0';//'\0进不去循环,单独赋值
24 puts(a);
25 }
运行结果:
4.在主函数中定义两个字符串并输入,在有参无返函数中实现字符串连接
程序代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 void my_strcat(char a[20],char b[10]);//函数声明
5 int main(int argc, const char *argv[])
6 {
7 char a[20]="";//定义两个字符串,终端输入
8 char b[10]="";
9 printf("enter a :");
10 gets(a);
11 printf("enter b :");
12 gets(b);
13 my_strcat(a,b);//调用函数,传参
14 return 0;
15 }
16 void my_strcat(char a[20],char b[10])//自定义函数,接参
17 {
18 int i=0,j=0;
19 for(i=0;a[i]!='\0';i++);//计算目标字符串的最后一位下标(\0),就是连接点
20 for(j=0;b[j]!='\0';j++)
21 {
22 a[i+j]=b[j];
23 }
24 a[i+j]='\0';//'\0'循环进不去,赋值
25 puts(a);
26 }
运行结果:
5.在主函数中定义一个字符串并输入,在有参有返函数中实现atoi
程序代码:
id my_atoi(char a[10]);//声明函数
5 int main(int argc, const char *argv[])
6 {
7 char a[10]="";//定义字符串,终端输入
8 printf("enter a :");
9 gets(a);
10 my_atoi(a);//调用函数,传参
11 return 0;
12 }
13 void my_atoi(char a[10])//自定义函数,接参
14 {
15 int i=0;
16 for(i=0;a[i]==' ';i++);//跨过空格,i空格后面的一位
17 int j=i;//定义j=i,判断+-号要用到
18 if(a[i]=='+'||a[i]=='-')//判断+、-,继续向后循环
19 {
20 i++;
21 }
22 int sum=0;
23 while(a[i]!='\0')//循环i(符号)后的函数
24 {
25 if(a[i]>='0'&&a[i]<='9')//判断0-9
26 {
27 sum=sum*10+(a[i]-'0');//计算0-9字符组成的数字,-'0'(32)
28 }
29 else
30 break;
31 i++;
32 }
33 if(a[j]=='-')//判断j点处符号的正负
34 sum=-sum;
35 printf("sum=%d\n",sum);
36 }
运行结果:
6.在主函数定义二维数组并输入,在有参无返函数中实现二维数组转置
程序代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 void rev(int line,int row,int arr[2][3]);//声明函数
5 int main(int argc, const char *argv[])
6 {
7 int arr[2][3];//定义二维数组,终端输入
8 int line=sizeof(arr)/sizeof(arr[0]); //计算行
9 int row=sizeof(arr[0])/sizeof(arr[0][0]); //计算列
10 for(int i=0;i<line;i++) //循环输入
11 {
12 for(int j=0;j<row;j++)
13 {
14 scanf("%d",&arr[i][j]);
15 }
16 }
17 rev(line,row,arr);//函数调用,传参
18 return 0;
19 }
20 void rev(int line,int row,int arr[2][3])//自定义,被调函数,接参
21 {
22 int b[3][2];//定义二维数组
23 for(int i=0;i<line;i++)//循环逆置,赋值
24 {
25 for(int j=0;j<row;j++)
26 {
27 b[j][i]=arr[i][j];
28 }
29 }
30 for(int i=0;i<row;i++)//循环输出
31 {
32 for(int j=0;j<line;j++)
33 {
34 printf("%-4d ",b[i][j]);
35 }
36 printf("\n");
37 }
38 }
运行结果:
7.在主函数定义一维数组并输入,在有参有返函数中计算一维数组的第二小值
程序代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 int second_min(int n,int arr[]);//函数声明
5 int main(int argc, const char *argv[])
6 {
7 int n;//定义n,终端输入n个数
8 printf("enter n :");
9 scanf("%d",&n);
10 int arr[n];
11 // int len=sizeof(arr)/sizeof(arr[0]);//计算长度,len即为n,用len还需传len
12 for(int i=0;i<n;i++)//循环输入n个数
13 {
14 printf("enter %d num:",i+1);
15 scanf("%d",&arr[i]);
16 }
17 second_min(n,arr);//函数调用,传参
18 int s=second_min(n,arr);//接收返回值
19 printf("min_second=%d\n",s);
20 return 0;
21 }
22 int second_min(int n,int arr[])//自定义函数,被调函数,接参
23 {
24 int min=arr[0],max=arr[0],j=0;
25 for(int i=0;i<n;i++)//循环比较,最值
26 {
27 if(min>arr[i])//最小值
28 {
29 min=arr[i]; j=i;//保留i的值,下标判断,防止两个相等的最小值
30 }
31 if(max<arr[i])
32 max=arr[i];//最大值
33 }
34 int second=max;//定义second,并最大值赋给,进行比较
35 for(int i=0;i<n;i++)//循环比较
36 {
37 if(i==j)//i=j,最小值(排除最小值)
38 continue;//遇到最小值跳过,继续下一次循环
39 if(second>arr[i])//arr[i]始终小于second
40 second=arr[i];//循环和second比较,second越来越小,又不能等于最小值
41 } //second为第二小
42 return second;
43 }
运行结果:
8.递归计算各个位数字的乘积(2315——>2*3*1*5)
程序代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 int fun(int num);
5 int main(int argc, const char *argv[])
6 {
7 int num;//定义数字,终端输入
8 printf("enter num:");
9 scanf("%d",&num);
10 if(num!=0)//对num判断,为0,输出sum=0,否则调函数
11 {
13 int sum=fun(num);//接收返回值
14 printf("sum=%d\n",sum);
15 }
16 else
17 printf("sum=0\n");
18 return 0;
19 }
20 int fun(int num)//自定义函数,被调函数,接参
21 {
22 if(num==0)//递归出口,递归边界(if(n>=0&&n<=9))
23 {
24 return 1;//返回1 (return n;)
25 }
26 else
27 {
28 return num%10*fun(num/10);//递归前进段,递归公式
29 } //不能sum,累乘
30 }
31 /*
32 * int num=1234;//主函数
33 * int sum=1;
34 * while(num!=0)//递归出口,递归边界
35 * {
36 * sum*=num%10;//循环体和自调结合——>递归前进段,递归公式
37 * num/=10; //
38 * }
39 * */
运行结果:
流程图: