#include <stdio.h>
#include <string.h>
int a = 10;
int b = 20;
int max = 0;
int getmax(int a,int b)
{
return(a>b)?(a):(b);
}
int main()
{
max=getmax(a,b);
printf("%d\n",max);
return 0;
}
在c语言中一般分为两种库函数和自定义函数
#include <stdio.h>
#include <string.h>
int a = 0;
int b = 0;
int sum = 0;
add(int a,int b)//注意没有void
{
sum = a + b;
return sum;
}
int main()
{
add(a,b);
printf("%d\n",sum);
return 0;
}
两者相加的函数
strcpy函数的用法strcpy(改变的,不变的)
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "bit";
char arr2[] = "*******";
strcpy(arr2,arr1);
printf("%s\n",arr2);
return 0;
}
因为原来里面有斜杠零,这样的话读到\0
还有一个函数叫memset
memory 内存
memset(字符,要替换的东西,个数)
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "hello world";
memset(arr1,'*',5);
printf("%s\n",arr1);
return 0;
}
自定义函数
比较两个数之间的大小
#include <stdio.h>
#include <string.h>
int a = 10;
int b = 20;
int max = 0;
int getmax(int a,int b)
{
if(a > b)
return a;
else
return b;
}
int main()
{
max=getmax(a,b);
printf("%d\n",max);
return 0;
}
#include <stdio.h>
#include <string.h>
int a = 10;
int b = 20;
int getmax(int a,int b)
{
return(a>b)?(a):(b);
}
int main()
{
getmax(a,b);
return 0;
}
viod表示没有返回值
int*表示解函数,
*pa,
#include<stdio.h>
void Swap2(int *px, int *py)
{
int tmp = 0;
tmp = *px;
*px = *py;
*py = tmp; }
int main()
{
int num1 = 1;
int num2 = 2;
Swap2(&num1, &num2);
printf("Swap2::num1 = %d num2 = %d\n", num1, num2);
return 0;
}
上面的叫传址调用,在函数里面改变函数总体的的值只可以通过指针的方法
区分好传值和传地址的区别
形参相当于实参的一次拷贝。
#include <stdio.h>
int binaray_search(int arr[],int k,int sz)
{
int left = 0;
int right = sz - 1;
while(left<=right)
{
int mid = (left + right)/2;
if (arr[mid]<k)
{
left = mid+1;
}
else if(arr[mid] >k)
{
right = mid +1;
}
else
{
return mid;
}
}
return -1;
}
int main ()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int k = 7;
int sz = sizeof(arr)/sizeof(arr[0]);
int ret = binaray_search(arr,k,sz);
if(ret == -1)
{
printf("找不到指定数字");
}
else
{
printf("找到了,下标是%d\n",ret);
}
return 0;
}
数组不可以直接传参,最好在主函数中把一切安排好
void add(int* p)
{
(*p)++;
}
int main()
{
int num = 0;
add(&num);
printf("num = %d\n",num);
add(&num);
printf("num = %d\n",num) ;
add(&num);
printf("num = %d\n",num);
}
++的优先级比*p高所以*p要加括号才可
函数的递归
void hello()
{
printf("hello world\n");
}
void acc()
{
hello();
}
int main()
{
acc();
return 0;
}
int main() { printf("%d\n", printf("%d", printf("%d", 43))); return 0; }
递归
主要思考方式在,把大事化小
递归常见的错误,栈溢出
当吧栈区的地方全部给用完了,就会报错
int my_string(char*str)
{
int count = 0;
while(*str!='\0')
{
count++;
str++;
}
return count;
}
int main()
{
char arr[] = "bit";
int len = my_string(arr);
printf("%d\n",len);
return 0;
}
注意调用的时候return后面要加count才可返回调用后面的东西
int my_string(char*str)
{
if(*str!='\0')
return 1+my_string(str + 1);
else
return 0;
}
int main()
{
char arr[] = "bit";
int len = my_string(arr);
printf("%d\n",len);
return 0;
}
//使用递归的手法