二、循环语句
1、while语句
语法结构
while(表达式){
循环语句;
}
注:在循环语句中break的作用是停止后期所有循环,continue的作用是终止本次循环,开始下一次循环的判断。
2、for语句
for(表达式1;表达式2;表达式3){
循环语句;
}
表达式1为初始化部分,用于初始化循环变量,当表达式1为空时直接进入循环;
表达式2 为条件判断部分,用于判断循环是否终止,当表达式2为空时为死循环;
表达式3为调整部分,用于循环条件的调整 。
注:建议使用“前闭后开”来限定区间范围。
for(i=0; i<10; i++){
a[i]=i;
}
3、do while语句
do{
循环语句;
}while(表达式);
循环体至少执行一次,while之后记得加分号。
二分查找函数循环实现范例:
int bin_search(int arr[], int left, int right, int key)
{
int mid = 0;
while(left<=right){
mid = (left+right)>>1;
if(arr[mid]>key)
{
right = mid-1;
}
else if(arr[mid] < key)
{
left = mid+1;
}
else
{
return mid;//找到了,返回下标
}
}
return -1;//找不到
}
函数
一、库函数
C语言基础库中的函数,在添加头文件后可直接调用。
二、自定义函数
1、函数组成
由函数名、返回值类型、函数参数以及函数体组成。
实参:真实的传入函数的变量,在被调用时会发生临时拷贝,并非把原来的变量直接放入函数中,只是把实参的数据拷贝给形参。
形参:函数名括号后的变量,因为形参只有在被调用的时候才被实例化并分配空间(形参实例化),在被调用过后即被销毁,只在该函数中有效(局部变量),所以叫形参。
函数声明,要满足先声明后使用的原则,由返回值类型、函数名与函数参数组成(需要加分号), 当我们用到很多函数声明的时候,为了方便我们的调用,我们可以创建一个头文件.h(比如test.h),将函数声明放在头文件当中 ,在写头文件时,要注意加上#pragma once 。
//函数定义
double Add(double x, double y){
return x+y;
}
//函数声明
double Add(double x, double y);
2、函数调用
分为传值调用与传址调用,其中传址调用是把函数外部创建的内存地址传递给函数,可以真正与原值建立起联系,直接操纵函数外部的变量。
函数也可以进行嵌套调用以及链式访问。
嵌套调用样例:
#include <stdio.h>
void new_line()
{
printf("hehe\n");
}
void three_line()
{
int i = 0;
for(i=0; i<3; i++)
{
new_line();
}
}
int main()
{
three_line();
return 0;
}
3、函数递归
程序自身调用被称为递归,把复杂问题层层转化为与原问题类似的小问题,函数在调用自身的情况下存在不合法递归(即无限次的递归导致栈溢出)。
所以在使用递归的时候一定要有递归出口,否则会陷入死循环导致栈溢出!
样例:求n的阶乘
int factorial(int n)
{
if(n <= 1)
return 1;
else
return n* factorial(n-1);
样例(求斐波那契数列第n个的值):
//递归实现
int fibrec(int n){
if(n<=2) retuen 1;
else return fibrec(n-1)+fibrec(n-2);
}
//迭代实现
int fibite(int n){
int fir=1,sec=1,thd=2;
if(n<=2) return 1;
else{
while(n>2){
fir=sec;
sec=thd;
thd=fir+sec;
n--;
}
return thd;
}
}
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/2301_79847249/article/details/139710319