C语言循环、数组和函数

循环

while循环

#include <stdio.h>

int main()
{
	int i=10; 
	while(i)
	{
		printf("%d\n",i--);
	}
}

while类似for循环的精简版本,for负责循环次数明确的情况,while循环负责只循环条件而不确定循环次数的情况。

while(表达式)
{
	表达式结果为真执行循环体。
}
for(; [] ;)
{

}	

do while循环

do while是一种先执行循环体,再判断循环条件的一种循环,循环体至少执行一次,而for和while的循环体可能一次都不执行。

do{
	循环体;
}while(表达式);
#include <stdio.h>

int main()
{
	int i=0;
	do{
		printf("%d\n",i++);
	}while(i<10);
}

跳转语句

goto标签

  • goto可以跳转到函数内的任意位置,既可以几前,也可以向后。
  • goto是一种非常灵活、强大但也非常危险的语句,因为goto可能会破坏已经设计好的分支和循环,很多公司都禁止使用goto。
  • 在驱动编程中,goto有它无代码替代的作用,当驱动程序出现异常时,goto语句非常适合用来释放资源。
#include <stdio.h>

int main()
{
	int i = 0;
loop:
	printf("%d\n",i++);
	if(i<10)	goto loop;
}

break

  • 在switch语句中可以关闭执行开关。
  • 在循环语句可以跳出一层循环。
#include <stdio.h>

int main()
{
	for(int i=0; i<10; i++)
	{
		for(int j=0; j<10; j++)
		{
			printf("%d %d\n",i,j);
			if(j>5)
			{
				break;
			}
		}
	}
}

continue

结束本次循环(循环体中continue后的语句不再执行),进入下一次循环(循环并没有结束)。

注意:break,continue 可以提高程序的运行效率。
#include <stdio.h>

int main()
{
	for(int i=0; i<10; i++)
	{
		if(i%2)
		{
			continue;
		}
		printf("%d\n",i);
	}
}

return

  • 把一个数据返回给函数的调用者。
  • 终止函数的执行。

数组

数组就是变量的集合,是一种指定义变量的方法。

一维数组

  • 一维数组:把变量排成一排。

  • 定义:类型 数组[数量];

      int arr[5] <=> int n1,n2,n3,n4,n5;
      数组的变量,值也是不确定的,为了安全需要初始化。
    
  • 使用:数组名[编号];

      arr[0],arr[1],arr[2],arr[3],arr[4];
      编号也叫下标,范围:0~数量-1。
    
    #include <stdio.h>
    
    int main()
    {
    	int arr[] = {1,2,3,4,5,6,7,1,1,1,1,1,1,1};
    	for(int i=0; i<sizeof(arr)/sizeof(arr[0]); i++)
    	{
    		printf("%d\n",arr[i]);
    	}
    }
    
  • 遍历:配合循环语句,使用循环变量当作数组的编号。

    #include <stdio.h>
    
    int main()
    {
    	int arr[10];
    	for(int i=0; i<100000; i++)
    	{
    		printf("%d\n",arr[i]);
    	}
    }
    
  • 初始化:类型 数组[数量] = {v0,v1,v2,v3…};

      1、如果初始化数据不够,编译器会自动补零。
      2、如果初始化数据过多,编译器会丢弃多余的数据并给出警告。
      3、对数组初始化时,数组的数量可以省略,编译器会统计出初始化数据的个数然后再告诉数组。
    
    #include <stdio.h>
    
    int main()
    {
    	int arr[10];
    	arr[11] = 10010;
    	printf("%d\n",arr[11]);
    	printf("开始初始化...\n");
    	for(int i=0; i<=10; i++)
    	{
    		arr[i] = 0;
    	}
    	printf("初始化结束...\n");
    }
    

数组越界

  • C语言中数组可以越界,没有语法错误(不能检查,也不想检查)。
  • 数组越界使用时访问的是它之后的内存(可能是其它变量,也可能是其它数组,也有可能无主的,也有可能属于操作系统)。
  • 数组越界的后果:
    1、产生脏数据。
    2、一切正常。
    3、段错误 (核心已转储)。

二维数组

  • 二维数组:把变量排一个方阵

  • 定义:类型 数组名[行数][列数];

      int arr[3][4];
      [][][][]
      [][][][]
      [][][][]
    
  • 使用:数组名[行编号][列编号],编号从零开始。

      arr[0][0],arr[0][1],arr[0][2],arr[0][3]
      arr[1][0],arr[1][1],arr[1][2],arr[1][3]
      arr[2][0],arr[2][1],arr[2][2],arr[2][3]
    
  • 遍历:配合双层for,外层循环负责遍历行,内层循环负责遍历列。

    #include <stdio.h>
    
    int main()
    {
    	int arr[3][4];
    	for(int i=0; i<3; i++)
    	{
    		for(int j=0; j<4; j++)
    		{
    			printf("%d ",arr[i][j]);
    		}
    		printf("\n");
    	}
    }
    
  • 初始化:数组名[行编号][列编号] = {{v0,v1,v2},{v0,v1,v2},{v0,v1,v2}};

变长数组

变长数组:数组的长度在编译时可以先不确定,在运行期间根据实际情况进行计算,当执行到数组定义语句时,就必须确定下来,再能再改变。

  • 优点:可根据实际情况确定数组的长度,达到节约内存的目的。

  • 缺点:不能初始化。

      #include <stdio.h>
    
      int main()
      {
      	int len = 0;
      	printf("请输入数组的长度:");
      	scanf("%d",&len);
      	int arr[len];
      
      	printf("len=%d,数组的长度:%d\n",len,sizeof(arr)/sizeof(arr[0]));
      }
    

函数

函数是C语言中管理代码的最小单位(把若干行代码集合在一起形成一个整体),一个函数就相当于一段具有某项功能的代码。

函数的分类:

  • 标准库函数:C语言标准委员会为C语言提供了一些基本功能,把这些基础功能分别封装成函数,包装成一个库(libc.so);

  • 输入输出:scanf/printf/getchar/putchar/gets/puts

  • 字符串:strlen/strcat/strcpy/strcmp/strstr

  • 数学:sqrt/pow

       注意:编译时需要 参数-lm
    
  • 时间:time.h

      time(NULL) 获取到自1970年1月1日00:00::00到现在一共过了多少秒。
    
  • 内存:malloc/free

  • other:
    stdlib.h
    rand/srand/system

      伪随机:把所有符号整数打乱顺序存储到计算机中,rand可以获取到一个无符号整数,rand默认从第一个位置获取。
      srand设置获取随机数的位置。	
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main()
    {
    	srand(time(NULL));
    	for(int i=0; i<10; i++)
    	{
    		int num = rand()%900+100;
    		printf("%d\n",num);
    	}
    }
    
  • 系统函数:操作系统提供的一些功能,以函数形式使用(但不是函数),系统API。

  • 第三方库函数:
    JSON
    MD5
    XML
    openCV
    openGL
    Qt/MFC

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值