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