C语言的语法结构

1、C语言的语法结构

  1. 顺序结构
  2. 分支结构
  3. 循环结构

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;
} 

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值