一、二维字符串数组排序、查找
多个字符串排序和整型浮点型数组排序的核心是一样的,都是使用选择排序、冒泡排序、插入排序。查找二分法查找。把一组字符串当成一个整体与某个字符串进行比较,使用strcmp(char *str1,char *str2)进行比较。
//查找
char c[10];
for(int i=0;i<5;i++)
puts(ch[i]);
printf("input string:");
gets(c);
//查找算法
int begin=0,end=(sizeof(ch)/sizeof(ch[0]))-1,flag=0;
printf("%d\n",end);
while (begin <= end){
int mid=(begin+end)/2;
if(strcmp(ch[mid],c)<0)
end=mid-1;
else if(strcmp(ch[mid],c)>0)
begin=mid+1;
else
break;
}
if(begin==end)
printf("yes\n");
else
printf("no\n");
二、函数
函数是完成指定功能的独立程序代码单元。C语言函数可以分为库函数和自定义函数。
函数生命周期是从函数调用开始到return结束,有些变量到函数结束就会释放该变量对应的空间。
函数构成结构
类型说明符 函数名(数据类型 形参1,数据类型 形参2,.....){
函数体//实现具体功能的代码部分
}
//实现2位数求和
int add(int num1,int num2){//返回类型 函数名 形参列表
int sum=num1+num2;//函数体,实现具体功能的代码
return sum;//返回类型与定义的类型要一样
}
库函数:在编程中为了重复使用而预先编写好的函数集合,这些函数通常被组织在库(library)中。当你需要使用这些函数的功能时,可以通过包含相应的头文件(使用 `#include` 指令)并将库链接到你的程序中来调用它们。在C语言中,标准库函数包括了如 `printf`、`scanf`、`strlen` 等常用的函数,这些函数定义在标准头文件中。
自定义函数:是用户自己设计一个函数,但是函数也有返回类型、函数名、形参列表。自定义函数一定要先确定好思路。首先要确定函数名,取名尽量与要实现的功能一致容易,能一眼看懂这个函数要实现的功能;其次、考虑函数需要用到哪些数据,对应的数据类型又是什么,不要形参写void;接下来处理数据、实现具体功能的代码;最后再考虑要不要输出结果,return返回数据,不需要返回数据可将返回类型设置为void。
自定义函数要注意函数定义的位置:
main()函数之前:
main()函数之后:需要在使用该函数调用之前,作函数声明。
//部分代码
int sum(int a,int b){//main之前创建好
return a+b;
}
int sum2(int a,int b);//声明函数原型
int main(void){
int a=sum(2,4);
int b=sum2(2,4);
printf("a=%d,b=%d\n",a,b);
return 0;
}
int sum2(int a,int b){//main之后,要先声明sum2
return a+b;
}
函数调用
1.调用函数之前,必须确保函数已经声明。函数声明告诉编译器函数的返回类型、名称以及参数列表。 对于标准库函数,通常通过包含相应的头文件来进行声明。
2.确保传递给函数的实际参数类型与函数声明中的形式参数类型相匹配。个数匹配:传递给函数的实际参数的数量必须与函数声明中的形式参数数量一致。顺序匹配:传递参数时应保持与函数声明中参数的顺序一致。
3. 如果函数有返回值,确保正确地处理返回值。如果返回值被忽略,可能会导致未定义的行为。 如果函数返回复杂的数据结构,确保正确地分配内存并释放内存。
4.函数调用是传值的,指针是传地址的。