书中第三章讲的是控制流,包括条件语句、if-else嵌套语句、switch分支结构和三个循环结构:while、 do-while语句、for循环;另外还有break、 continue语句、goto语句与标号,这里只记了其中一些简单的知识点。
3-1 binsearch函数-升序排列数组寻位置-if-else嵌套结构
#include <stdio.h>
//binsearch函数:在v[0]<=v[1]<=...v[n-1]中查找x
int binsearch(int x,int v[],int n)
{
int low,high,mid;
low = 0;
high = n-1;
while(low <= high){
mid = (low + high)/2;
if(x < v[mid])
high = mid-1;
else if(x > v[mid])
low = mid+1;
else
return mid;
}
return -1;
}
int main()
{
int i,x,v[100];
x = 15;
for(i = 0;i<=99;i++)
v[i] = 2*i+1;
printf("x在v中的位置为:%d\n",binsearch(x,v,99));
return 0;
}
注意点:
- 这是一个使用折半查找方法的函数,所查找数组必须为已经进行升序排列的数组
- 这里用到了else if语句,格式为:
if(表达式)
语句
else if(表达式)
语句
else if(表达式)
语句
else if(表达式)
语句
else
语句
- 其中各项else if语句均为可选,最后的else语句亦可省略
3-2 统计数字符及其他符号程序改-switch结构
#include <stdio.h>
int main()
{
int c,i,nwhite,nother;
int ndigit[10];
nwhite = nother = 0;
for(i=0;i<10;i++)
ndigit[i] = 0;
while((c = getchar()) != EOF){
switch(c){
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
ndigit[c-'0']++;
break;
case ' ':
case '\n':
case '\t':
nwhite++;
break;
default:
nother++;
break;
}
}
printf("各个数字出现次数:\n");
for(i=0;i < 10;i++)
printf("'%d' - %d\n",i,ndigit[i]);
printf("空白字符出现%d次,其他字符出现%d次\n",nwhite,nother);
return 0;
}
注意点:
- 这里用了switch分支结构,每个分支后必须加一句break语句,最后一个分支default分支也加上一个break语句的作用是在我们需要再向switch语句后面添加分支时可以避免犯错
3-3 reverse函数-字符串字符倒置-逗号运算符
#include <string.h>
void reverse(char s[])
{
int c,i,j;
for(i=0,j = strlen(s)-1;i<j;i++,j--)
c = s[i],s[i]=s[j],s[j]=c;
}
注意点:
- 这个函数与之前提到的行倒置打印程序一样能实现对应的效果,在这里比较特别的特点是将多个语句用逗号 ‘,’隔开放到for函数和一个语句结束符;前,这样可以实现单步操作囊括多步功能
- 上面提到的逗号运算符适用于一些特定的地方,有时逗号也会是分隔函数参数的逗号或者分隔声明中的变量的逗号,所以应该慎用