复习C部分:1.for循环 2.do while循环语句 3.在一个有序数组中查找某个数,例如在1~10之间找7(例题包含计算n的阶乘+打印1~10的奇数+二分法)

简介: 复习C部分:1.for循环 2.do while循环语句 3.在一个有序数组中查找某个数,例如在1~10之间找7(例题包含计算n的阶乘+打印1~10的奇数+二分法)

详细内容如下:

2a012fdec8484e289190478b1d0606c1.png

a974c65aef744e59a874174c7831290f.png

代码如下:


                                                           1.for循环

//for(表达式1(初始化部分);表达式2(判断);表达式3(循环))

//    循环部分;           执行逻辑:表达式2+循环部分+表达式3

//注:尽量不要在循环部分内写入表达式3部分的循环

//    推荐左闭右开区间,如for(i=1;i<10;i++)

//    判断部分一旦省略,即恒为真,死循环

//    for的三个部分都可以省略,但推荐不省略,否则逻辑会错误,如下


//例:打印1-10的奇数


//#include<stdio.h>
//int main()
//{
//    int i = 1;
//    for (i = 1; i < 10; i += 2)
//    {
//        printf("%d ", i);
//    }
//    return 0;
//}
//ps:break和continue循环
//break跳出大循环
//#include<stdio.h>
//int main()
//{
//    //int i = 0;
//    //for (i = 1; i < 11; i++)
//    //{
//    //    if (5 == i)
//    //        continue;//continue跳过此次循环后面的代码(只跳过此次循环)
//    //  //即跳过此次循环,不再执行循环的未执行部分,执行表达式3
//    //    printf("%d ", i);//1 2 3 4 6 7 8 9 10
//    //}
//
//    int j = 0;
//    for (j = 1; j < 10; j++)
//    {
//        if (5 == j)
//            break;//break跳过整个循环,不执行表达式3
//        printf("%d ", j);//1 2 3 4
//    }
//    return 0;
//}
//for初始部分省略导致错误
//#include<stdio.h>
//int main()
//{
//    int i = 0;
//    int j = 0;
//    for (; i < 3; i++)
//    {
//        for (; j < 3; j++)
//        {
//            printf("呵呵 ");//呵呵 呵呵 呵呵
//            //因为i=0;会进入j=0的三次循环,打印三次呵呵,之后i=1,再次进入j的循环,
//            //此时没有初始化部分,即j=3仍成立,就跳过for的j循环,变成i=2,.....最终i=3
//            //与i<3不成立,跳过,为三次
//        }
//    }
//    return 0;
//}

 35.do while循环语句----循环体至少执行一次


打印1-4
//#include<stdio.h>
//int main()
//{
//    int i = 1;
//    do
//    {
//        printf("%d ", i);//1 2 3 4 5 6 7 8 9 10
//        i++;
//    } while (i<=10);
//    return 0;
//}
//有break时
//#include<stdio.h>
//int main()
//{
//    int i = 1;
//    do
//    {
//        if(5==i)
//           break;//直接跳过整个循环
//        printf("%d ", i);//1 2 3 4
//        i++;
//    } while (i <= 10);
//    return 0;
//}
//有continue时
//#include<stdio.h>
//int main()
//{
//    int i = 1;
//    do
//    {
//        if (5 == i)
//            continue;//跳过此次循环break之后的部分,直接卡在死循环
//        printf("%d ", i);//1 2 3 4(死循环)
//        i++;
//    } while (i <= 10);
//    return 0;
//}

/练习:1.计算n的阶乘

//思路:1.产生1~n逐个递增且乘以自身的数字,2.乘自身


//#include<stdio.h>
//int main()
//{
//    int i = 0;
//    int ret = 1;
//    int n = 0;
//    scanf("%d", &n);
//    for (i = 1;i<=n; i++)
//    {
//        ret*=i;
//    }
//    printf("%d", ret);
//    return 0;
//}
//计算1!+2!+....+10!
//#include<stdio.h>
//int main()
//{
//    int i = 0;
//    int ret = 1;
//    int n = 0;
//    int sum = 0;
//    for (n = 1; n <= 10; n++)
//    {
//        int ret = 1;//计算n的阶乘之前把ret初识为1
//        for (i = 1; i <= n; i++)
//        {
//            ret *= i;
//        }
//        sum += ret;
//    }
//    printf("%d", sum);
//    return 0;
//}
简单方法:思路:3!=3*2!  2!=2*1!...
//#include<stdio.h>
//int main()
//{
//    int i = 0;
//    int ret = 1;
//    int sum = 0;
//    for (i = 1; i <= 3; i++)
//    {
//        ret *= i;//ret=i*i
//        sum += ret;//sum=sum+ret=(i+1)+i*i
//    }
//    printf("%d\n", sum);
//    return 0;
//}

//练习:在一个有序数组中查找某个数,例如在1~10之间找7

//思路:二分法:

// 设目标值为k,编写一组有序数组,然后找到最左,最右两个数下标,

// 求最左边,最右边两值的平均值mid,mid与k大小比较,(用if),

//如果mid<k,left=mid+1,如果mid>k.right=mid-1;如果mid==k,则找到了

//一次找不到,所以用while循环(while多用于无差别多次循环),前提是left<right

//直到left=right,while不成立


#include<stdio.h>
int main()
{
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    int left = 0;
    int sz = sizeof(arr) / sizeof(arr[1]);
    int right = sz - 1;
    int k = 7;
    while (left <= right)
    {
        int mid = left + right;
        if (arr[mid]<k)
        {
            left=mid + 1;
        }
        else if(arr[mid]>k)
        {
            right=mid - 1;
        }
        else
        {
            printf("找到了,下标是:%d", arr[mid]);
            break;
        }
        if (left > right)
        {
            printf("找不到\n");
        }
    }
    return 0;
}


相关文章
|
7月前
|
机器学习/深度学习 C语言
函数递归与迭代附n的阶乘+顺序打印一个整数的每一位数+求第n个斐波那契数
函数递归与迭代附n的阶乘+顺序打印一个整数的每一位数+求第n个斐波那契数
57 0
|
C语言
C语言:杨氏矩阵中查找某数(时间复杂度小于O(N))
题目: 有一个数字矩阵(二维数组), 矩阵的每行从左到右是递增的, 矩阵从上到下是递增的, 请编写程序在这样的矩阵中查找某个数字是否存在, 要求:时间复杂度小于O(N)。
264 1
|
7月前
|
C语言
二分查找法的区间判断【C语言】
二分查找法的区间判断【C语言】
|
算法 测试技术 C#
C++二分算法的应用:乘法表中第k小的数
C++二分算法的应用:乘法表中第k小的数
|
C语言
【C语言刷题】调整奇数偶数顺序、有序序列合并以及有序序列判断
【C语言刷题】调整奇数偶数顺序、有序序列合并以及有序序列判断
66 0
字符串的逆序(循环和递归两种解法)
字符串的逆序(循环和递归两种解法)
203 0
05a for循环实践-查找水仙花数
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。
96 0
C语言经典实例:21-30例:插入排序、希尔排序1、快速排序、希尔排序2、递归法、完数、斐波那契数列、公约数和公倍数、判断水仙花数统计单词个数
C语言经典实例:21-30例:插入排序、希尔排序1、快速排序、希尔排序2、递归法、完数、斐波那契数列、公约数和公倍数、判断水仙花数统计单词个数
C语言经典实例:21-30例:插入排序、希尔排序1、快速排序、希尔排序2、递归法、完数、斐波那契数列、公约数和公倍数、判断水仙花数统计单词个数