April 06 循环语句
第一题:判断循环语句执行几次
代码01:
int main()
{
int i = 0;
int j = 0;
for (i = 0, j = 0; j = 0; i++, j++)
{
j++;
printf("输出第%d\n", i);
}
printf("循环执行几次??\n");
return 0;
}
答案01:
判断语句j=0,直接就是恒假,不执行语句,不信话可以换成j=1试试,嘿嘿
代码02:
//判断打印几次
int main()
{
int i = 0;
int j = 0;
for (; i < 10; i++)
{
for (; j < 10; j++)
{
printf("此段代码最深结构处打印几次,即思考代码的时间复杂度::\n");
}
}
return 0;
}
答案02:
十次,i=0第一次时,j循环就到了10,之后j恒等于于10,所以只有十次
代码03:
//问此段输出代码执行几次???
int main()
{
int i = 0;
for (; ;)
{
printf("hhhhhhh");
}
}
答案03
死循环,因为for语句中的条件表达式不写省略时,就默认恒为真,所以死循环,04学习中提过的。
第二题:计算n的阶乘
代码
int main()
{
int i = 1;
int n=0;
int mul = 1;
printf("请输入任意整数:\n");
scanf("%d", &n); //scanf键盘输入函数
for (i = 1; i <= n; i++)
{
if (i==0)
{
printf("mul恒等于==%d\n", i);
}
else
{
mul = mul*i;
printf("阶数==%d\n",i);
printf("阶乘mul==%d\n", mul);
}
}
return 0;
}
结果
第三题:计算n的阶乘之和,n=10
代码
int main()
{
int i = 1;
int n = 0;
int mul = 1;
int sum=0;
printf("请输入任意整数:\n");
scanf("%d", &n); //scanf键盘输入函数
for (i = 1; i <= n; i++)
{
if (i == 0)
{
printf("mul恒等于==%d\n", i);
}
else
{
mul = mul * i;
sum = mul + sum;
printf("阶数 == %d\n", i);
printf("阶乘mul == %d\n", mul);
printf("和==%d\n", sum);
}
}
return 0;
}
结果
第四题:在数组中查找到7
代码
//遍历法
int main()
{
int arr[10] = { 1,2,3,4,5,5,6,7,8,9 };
int i;
for (i = 0; i <= 10; i++)
{
if (arr[i] == 7)
printf("列序数== %d\n", i);
}
printf("算法复杂度为=O(n)\n");
return 0;
}
结果
第五题:用二分法减低算法复杂度
代码
int main()
{
int arr[] = { 0,1,2,3,4,5,6,7,8,9,10 }; //不写数组长度,通过数组内容自动分配长度
int i = 0; //放头下标,也就是位序变量
int j = 0; //放尾下标
int m = 0;//中间位序
int find = 7;//查找的值
//1.先计算数值长度,确定最后下标数,为二分法准备
j = sizeof(arr) / sizeof(arr[0])-1;
//sizeof 关键字计算数组长度,即数组总字节byte 除以 单个数据元素字节 = 元素个数
//2.二分法,就是每次都从中间猜数,所以现在我们找数组中间位置,
//但是要注意:数组长度是奇数,好理解且方便定位 位序,
//如果是偶数就要想想这么解决了这个不可以整除的两数之和了
for (i, j; i<=j;)//当前序大于后序跳出循环
{
m = (i + j) / 2;
printf("m一次二分\n");
//3.比较中间数与目标数的大小
//中间的小时
if (arr[m] < find)
{
i = m+1;
printf("前序变化一次\n");
}
//中间的大时
else if (arr[m] > find)
{
j = m-1;
printf("后序变化一次\n");
}
else if (arr[m] == find)
{
printf("找到了,可以跳出循环了\n");
printf("位序==%d,值==%d\n", m, arr[m]);
break;
}
//m = (i + j) / 2;
//printf("m一次二分\n");
}
printf("i=%d,j=%d,m=%d\n", i, j, m);
printf("没有找到数据,失败::\n");
return 0;
}
结果
第六题:演示两个字符互换
代码
//引用strlen库函数
/* 演示两个字符互换 April 09 */
int main()
{
int i = 0;//前下标
int j = 0;//后下标
char n;
char arr01[] = {'#','#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#' ,'#' ,'#','\0'}; //16个,
char arr02[] = "welcome to bit!";//15个,实际上还有一个终止符 \0,所以这里面一共有十六个元素
//j = sizeof(arr01) / sizeof(arr01[0]) - 2;//减二是为了排除这个\0对元素替换的影响
j = strlen(arr01) - 1;//用库函数,计算长度,到\0符号停止且\0不算入长度
printf("j==%d\n", j);
for (i,j;i<=j;i++,j--)//前序大于后序跳出循环
{
arr01[i] = arr02[i];
arr01[j] = arr02[j];
printf("arr01==%s\n", arr01);
scanf("%c", &n);//用输入函数打断,感受变化
}
return 0;
}