语句和程序块
- 语句以”;” 结尾
- 用一堆花括号”{“和”}”把一组声明括在一起就构成了一个复合语句,右括号用以结束程序块,其后不需要分号
if-else、switch语句
就说说switch语句吧,老不用,都快忘了
switch语句是一种多路判定语句,它测试表达式是否与一些常量整数值中的某一个值匹配,并执行相应的分支动作,形式如下
switch (表达式)
{
case 常量表达式: 语句序列
case 常量表达式: 语句序列
default : 语句序列
}
while循环与for循环
- 在写程序时到底选用 while还是for循环?如
while ( (c=getchar())==' ' || c=='\n' || c=='\t')
for (i=0; i<n; i++)
其中由于 while中没有初始化或重新初始化的操作,使用while 语句会更自然些,而for语句中需要执行简单的初始化和变量递增,使用for语句会更合适些,下面看一个例子:aoti函数的编写
#include <ctype.h>
int atoi(char s[])
{
int i,n,sign;
for (i=0; isspace(s[i]); i++); //跳过空白符
sign = s[i]=='-'?-1:1;
if (s[i]=='+' || s[i]=='-')
++i; //跳过符号
for (n=0; isdigit(s[i]); i++) //可以把n的初始化放在这里
n = 10*n + (s[i]-'0');
return sign*n;
}
标准库中提供了一个更完善的函数strtol,它将字符串转换为长整型数。
下面看一个简单的程序,for语句中,可将多个表达式放在各个语句成分中,比如同时处理两个循环控制变量。
void reverse(char s[])
{
int i,j,c;
for (i=0,j=strlen(s)-1; i<j; i++,j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
do while循环
经验表明do-while循环用的比while和for循环用的少,下面看一个例子,将数字转换为字符串保存起来
void itoa(int n, char s[])
{
int i,sign;
if ( (sign=n) < 0)
{
n = -n;
}
i = 0;
do
{
s[i++] = n%10 + '0';
}while( (n /= 10) > 0);
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
}
break和continue语句
这个区别一般都知道,这里不细说,break看一下例子,下面的trim函数用于删除字符串末尾的空格符、制表符、换行符。
void trim(char s[])
{
int i;
for (i=strlen(s)-1; i>=0; --i)
{
if (s[i]!=' ' && s[i]!='\t' && s[i]!='\n')
break;
}
s[i+1] = '\0';
}