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

详细内容如下:

代码如下:

                                                            1.for循环
//for(表达式1(初始化部分);表达式2(判断);表达式3(循环))
//    推荐左闭右开区间,如for(i=1;i<10;i++),不推荐写成for(i=1;i<=10;i++)的左闭右闭型
//    判断部分一旦省略,即恒为真,死循环
//    for的三个部分都可以省略,但推荐不省略,否则逻辑会错误

//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不成立,跳过,最终只打印3次呵呵,实际应为9次
//        }
//    }
//    return 0;
//}

//例:打印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跳过此次循环后面的代码(只跳过此次循环)
//    //  //即跳过此次循环,不再执行循环的未执行部分(本次的continue),但下次仍需要执行之后的
//    //    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;
//}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力成为焦耳定律鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值