二分查找法
int main(void) //二分法查找
{
int a[] = {1,2,3,7,8,9,4,5,6};
int len = sizeof(a) / sizeof(a[0]);
int n = 7;
int i,j;
for(i = 1;i < len;++i)//插入法排序
{
int t;
t = a[i];
j = i;
while(j > 0 && a[j - 1] > t)
{
a[j] = a[j - 1];
--j;
}
a[j] = t;
}
for(i = 0;i < len;++i)
{
printf("%d\n",a[i]);//先排序,并检验排序结果是否正确
}
int begin,end,mid;
begin = 0;
end = len -1;
while(begin <= end)
{
mid = (begin + end) / 2;
if(a[mid] > n)
{
end = mid -1;
}
else if(a[mid] < n)
{
begin = mid + 1;
}
else
{
break;
}
}
//判断“break”,循环结束的原因(1.找到n,循环结束。2.未找到n,循环结束)
if(begin <= end)
{
printf("found\n");
}
else
{
printf("not found\n");
}
return 0;
}
字符数组
1.定义:
字符数组是用来存放字符数据的数组,其定义方式与其他类型数组类似,例如char c[10];
。
2.初始化
可以逐个字符赋给数组中各元素,例如char c[10] = {'1','2',......};
。
如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。
如果花括号中提供的初值个数大于数组长度,按语法错误处理;若初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余元素自动定为空字符'\0'
。
可以用字符串常量来使字符数组初始化,例如char c[] = "Hello World";
,此时数组c的长度会自动定为字符串的长度加1(因为字符串常量的最后由系统加上一个'\0'
作为结束标志)。
3.字符串和字符串结束标志:
在C语言中,字符串是作为字符数组来处理的,例如char str[] = "China";
,字符串中的字符是逐个存放到数组元素中的。
为了测定字符串的实际长度,C语言规定了一个字符串结束标志'\0'
,当遇到字符'\0'
时,表示字符串结束。
系统对字符串常量也自动加一个'\0'
作为结束符,例如"C Program"
在内存中占10个字节,最后一个字节为'\0'
。
字符数组并不要求它的最后一个字符为'\0'
,甚至可以不包含'\0'
,但为了便于处理字符串,通常会人为地加上一个'\0'
。
4.字符数组的输入输出
可以逐个字符进行输入输出,使用格式符%c
,如scanf("%c", &c[i]);
和printf("%c", c[i]);
。
也可以整个字符串进行输入输出,使用格式符%s
,但要注意输出时不包括'\0'
,且输入的字符串长度应小于字符数组的定义长度。
5.字符串处理函数
1.puts函数输出字符串,遇到'\0'
结束输出并换行。
int main(void)
{
char s[100] = "Hello";
puts(s);
return 0;
}
2.gets函数从终端输入字符串到字符数组,以回车键结束输入。
get(s):可能会发生越界访问。
scanf("%s",s) :(回车、空格符、换行)之后程序提前终止。
fgets(s,sizeof(s)/sizeof(s[0]),stdin):将回车也作为有效字符输入,导致结果出现liang'ge'huan'ha
3.strcat函数连接两个字符串,将第二个字符串接在第一个字符串后面。
int main(void)
{
char s1[100] = "Hello";
char s2[100] = "World!";
strcat(s1, s2);
/*
int i = 0;
while(s1[i])
{
++i;
}
int j = 0;
while(s2[j])
{
s1[i++] = s2[j++];
}
s1[i] = 0;
*/
puts(s1);
return 0;
}
4.strcpy函数复制字符串,strcpy
将整个字符串复制
int main(void)
{
char s1[100] = "Hello World!";
char s2[100] ;;
int i = 0;
/* while(s1[i] != '\0')
{
s2[i] = s1[i];
++i;
}
s2[i] = '\0';*/
strcpy(s2, s1);
puts(s2);
return 0;
}
5.strcmp函数比较两个字符串,根据比较结果返回正数、负数或0。
int main(void)
{
char s1[100] = "World";
char s2[100] = "Hello";
char s3[100] = "China";
char max[100];
if(strcmp(s1, s2) > 0)
{
strcpy(max, s1);
}
else
{
strcpy(max, s2);
}
if(strcmp(max, s3) < 0)
{
strcpy(max, s3);
}
puts(max);
return 0;
}
6.strlen函数测量字符串的实际长度,不包括'\0'
。
统计字符串个数
int main(void)
{
int i = 0;
char s[100] = "Hello World!";
printf("%lu\n",strlen(s));
return 0;
}