在C语言知识体系中,
数据类型 ---》 点
运算符 ---》 线
逻辑结构 ---》 面
函数 ---》 体
=========================== 1.函数(Function)的含义 ===========================
C语言中的函数分类:
// 子函数作用:计算2个数的和
int func_sum(int n1, int n2)
{
int n3 = n1+n2;
return n3; // 结束当前函数,返回调用处
}
// int:返回值。
// func_sum:函数名
// (int n1, int n2):形参列表(形式参数)
// {...}:函数体
备注:
(一般函数位于第2本,或第3本)
可使用man -f printf,查看当前函数位于哪本手册。
=========================== 2.自定义函数的使用 ===========================
一般形式:
备注:
返回值、形参列表中,可以使用空类型 void
出现原因:隐式声明。
解决方法:在使用前进行函数声明。
出现原因:红框内的函数未定义。
解决方法:把缺失的函数编写完成即可。
出现原因:缺失了分号;
=========================== 3.递归函数===========================
特点:
例子:阶乘问题。
5! = 5*4*3*2*1
6! = 6*5*4*3*2*1 = 6*5!
a.结束条件
func_jc(1) = 1 --->当n等于1时,结果直接返回1
b.算式的前一式和后一式存在等式关系。
6! = 6*5!
func_jc(6) = 6*func_jc(5);
结论---> func_jc(n) = n*func_jc(n-1);
#include <stdio.h>
// 子函数作用:计算2个数的和
int func_sum(int n1, int n2)
{
int n3 = n1+n2;
return n3; // 结束当前函数,返回调用处
}
// int:返回值。
// func_sum:函数名
// (int n1, int n2):形参列表(形式参数)
// {...}:函数体
int main()
{
int a=100, b=200;
int c = func_sum(a, b); // 子函数的调用。(a, b)称为实参的传参(实际参数的传递)
printf("c: %d\n", c);
return 0; // 直接结束程序
}
#include <stdio.h>
// 函数的声明
// 传递1个int,计算它平方,返回int
int func_square(int a);
// 传递2个int,计算他们的差值,返回int
int func_sub(int a, int b);
// 打印函数
void func_print(void);
int main()
{
func_print();
int a=10, b=5;
// int c1 = func_square(a);
// int c2 = func_square(b);
// int c = func_sub(c1, c2);
// printf("square: %d\n", c);
int c = func_sub(func_square(a), func_square(b));
printf("square: %d\n", c);
return 0;
}
// 打印函数
void func_print(void)
{
printf("hello\n");
printf("hello\n");
printf("hello\n");
printf("hello\n");
printf("hello\n");
printf("hello\n");
printf("hello\n");
printf("hello\n");
}
// 传递1个int,计算它平方,返回int
int func_square(int a)
{
return a*a;
}
// 传递2个int,计算他们的差值,返回int
int func_sub(int a, int b)
{
return a-b;
}
#include <stdio.h>
// 递归计算传参的阶乘
int func_jc(int n)
{
// a.结束条件
if(n == 1)
return 1;
// b.算式的前一式和后一式存在等式关系。
return n*func_jc(n-1);
}
int main()
{
int a = 4;
int num = func_jc(a);
printf("%d\n", num);
return 0;
}
2.c
#include<stdio.h>
void donut(int a);
void gear(int a,int b);
void stuff_it(double a,double *b);
int main()
{
int a,b;
double c;
double *d;
donut( a);
gear( a, b);
stuff_it(c,&c);
return 0;
}
void donut(int a){
for (int i = 0; i < a; i++)
{
printf("0\t");
}
}
void gear(int a,int b){
int c;
return c;
}
void stuff_it(double a,double *b){
return *b=a;
}
#include<stdio.h>
void max( int a,int b ,int c)
{
int max;
if(a>b){
max=a;
if(a>c) max=a;
else max=c;
}
if(b>c){
max=b;
if(b>a) max=b;
else max=a;
}
if(c>a){
max=c;
if(c>b) max=c;
else max=b;
}
printf("最大值是:%d\n",max);
}
int main()
{
printf("输入3个整型数");
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
max(a,b,c);
printf("\n");
return 0;
}
4.c
#include <stdio.h>
float my_power(float a,int b)
{
int sum1 = 1;
float sum2 = 1.0;
if( b > 0 )
{
for( int i = 0; i < b; i++ )
{
sum1 *= a;
}
return sum1;
}
else if( b == 0)
return 1;
else
{
for( int i = 0; i < -b ; i++)
{
sum2 *= (float)1.00 / a;
}
return sum2;
}
}
int main()
{
int N;
float a,sum;
printf("输入mypower(___,___)内两个数\n");
scanf("%f %d", &a, &N);
sum = my_power(a,N);
printf("输出结果:%.6f\n",sum);
return 0;
}
#include<stdio.h>
#include <strings.h>
#include <string.h>
void link(char a[],char b[]) {
// strlen(): 获取指定字符串的长度(不含'\0')
char t[strlen(a)-1 + strlen(b) +1];
// 去掉'\n' 加上'\0'
int i;
for(i=0; i<strlen(a)-1; i++)
{
t[i] = a[i];
}
int j;
for(j=0; j<strlen(b)+1; j++, i++)
{
t[i] = b[j];
}
printf("合并后: %s", t);
}
int main()
{
char a[100],b[100];
printf("输入第一个字符串\n");
fgets(a, 100, stdin);
//scanf("%s",&a);
printf("输入第二个字符串\n");
// scanf("%c",&b);
fgets(b, 100, stdin);
// printf("%s",b);
link(a,b);
return 0;
}
6.c
#include <stdio.h>
#include <stdlib.h>
void Fibonacci(int n){
int a = 1;
int b = 1;
int c = 0;
printf("Fibonacci:\n");
for (int i = 0; i < n - 2;i++)
{
c = a + b;
a = b;
b = c;
printf("%d\t", c);
}
}
int main()
{
int n ;
printf("输入一个数计算Fibonacci\n");
scanf("%d", &n);while(getchar()!='\n');
Fibonacci(n);
printf("\n");
return 0;
}
7.c
#include <stdio.h>
void remoSpace(char character[]);
int main()
{
printf("请输入带空格的字符串:");
char character[120];
fgets (character , 50 , stdin);
remoSpace(character);
printf("%s",character);
return 0;
}
void remoSpace(char character[])
{
int i = 0, j = 0;
for( i = 0;character[i] != '\0';i++)
{
if(character[i] == ' ')
{
for( j = i; character[j] != '\0'; j++)
{
character[j] = character[j+1];
}
i--;
}
}
}