详细内容如下:
代码如下:
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; }