1、C语言的语法结构
- 顺序结构
- 分支结构
- 循环结构
1.1 分支语句
1.1.1if语句
-
f语句用于根据条件选择执行语句
-
else不能独立存在且总是与它最近的if匹配
-
else语句后可以连接其他if语句
-
if语句中零值比较的注意点
- bool型变量应该直接出现于条件中,不用进行比较
bool b = true; if(b) { //statement 1 } else { //statement 2 }
-
变量和0值比较时,0值应该出现在比较符号左边
int i = 1; if( 0 == i )//避免赋值与比较混淆,方便系统直接找到错误 { //statement 1 } else { //statement 2 }
-
float型变量不能直接进行0值比较,需要定义精度
#define EPSINON 0.000000001 float f = 0.0; if( ( -EPSINON <= f ) && (f <= EPSINON) ) { //statement 1 } else { //statement 2 }
1.1.2 switch语句
-
switch语句对应单个条件多个分值的情形
-
case语句分支一般情况下要有break,否则会导致分支重叠
-
default语句有必要加上,以处理特殊情况
switch( expression ) { case CONST_1: // code block break; case CONST_2: // code block break; default: // code blcok }
-
switch语句的特殊用法,利用分支重叠的特性,输入年月日,计算是这一年的第几天
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{
int year,mon,day;
scanf("%d%d%d",&year,&mon,&day);
switch(mon)
{
case 12:
day+=30;
case 11:
day+=31;
case 10:
day+=30;
case 9:
day+=31;
case 8:
day+=31;
case 7:
day+=30;
case 6:
day+=31;
case 5:
day+=30;
case 4:
day+=31;
case 3:
if(year%4==0&&year%100!=0||year%400==0)
{
day+=29;
}
else
{
day+=28;
}
case 2:
day+=31;
case 1:
printf("%d\n",day);
}
return 0;
}
-
case语句中的值只能是整型或字符型
-
case语句的排列顺序
- 按字母或数字顺序排列各条语句
- 正常情况放在前面,一次情况放在后面
- default语句只用于处理真正的默认情况
1.2 循环语句
1.2.1 while循环语句
** 循环语句的基本工作方式**
- 通过条件表达式判断是否执行循环体
- 条件表达式遵循if语句表达式的原则
1.2.2 do,while, for的区别
- do语句先执行后判断,循环体至少执行一次
- while语句先判断后执行,循环体可能不执行
- for语句先判断后执行,相比while更简洁
1.2.3 do … while语句的循环方式
do
{
// loop
}
while( condition );
1.2.4 while语句的循环方式
while( condition )
{
// loop
}
1.2.5 for语句的循环方式
for( i = 0; condition; i++ )
{
// loop
}
1.2.6 break和continue的区别
- break表示终止循环的执行
- continue表示终止本次循环,进入下次循环执行
1.2.7 do语句中break的用法
int func(int n)
{
int i = 0;
int ret = 0;
int* p = (int*)malloc(sizeof(int) * n);
do
{
if( NULL == P ) break;
if( n < 5 ) break;
if( n > 100 ) break;
for( i = 0; i < n; i++ )
{
p[i] = i;
printf("%d\n", p[i]);
}
ret = 1;
}while(0);
free(p);
return ret;
}
任何条件下都可以执行==free§==函数释放内存,防止内存泄露
2、总结
- for循环先进行判断在进入循环体
- for循环适合于循环次数固定的场合
- while循环先进行判断在进入循环体执行
- while循环适合于循环次数不定的场合
- do … while循环先执行循环体在进行条件判断
- do … while循环至少执行一次循环体
3、语法结构的应用
3.1 九九乘法表
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int i = 0;
int j = 0;
for(i = 1; i < 10; i++)
{
for(j = 1; j <= i; j++ )
{
printf("%d * %d = %d ", j, i, i*j);
}
puts("\n");
}
return 0;
}
3.2 求出所有的水仙花数
- 水仙花数是指个位的三次方+十位的三次方+百位的三次方等于数字本身
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{
int i = 100;
while(i<1000)
{
int g = i%10; //个位
int b = i%100/10; //十位
int c = i/100; //百位,求个位、十位和百位,一定要放在循环里面
if(g*g*g+b*b*b+c*c*c==i)
{
printf("%d是一个水仙花数\n",i);
}
i++;
}
return 0;
}