循环结构程序的设计
goto语句和if语句构成循环
- goto 语句标号;
- 注意:语句标号与goto语句同处与一个函数中,但可以不在同一个循环层
#include <studio.h>
main()
{
int i,sum=0;
i=1;
loop: //语句标号:
if(i<=100)
{
sum=sum+1;
i++;
goto loop;//跳转到语句标号处
}
printf("%d\n",sum);
}
while语句构成循环
while(循环条件)
循环体
- break:直接跳出循环体,永久终止循环 ,对用if和goto语句构成的循环不起作用,
- 若为多层循环,则执行一次break,只能向外跳一层
- continue:跳出本次尚未执行的语句,进入下次循环判断条件
计算1-10的值
#include <studio.h>
main()
{
int i,sum=0;//循环变量初始化
i=1;
while(i<=10)//只要表达式为真,就继续循环
{
sum=sum+1;
i++;
}
printf("%d\n",sum);
}
输出从0开始的偶数
#include <studio.h>
main()
{
int i=0,n;
printf("请输入数字:");
scanf("%d",&n);
while(n--)
printf("%d",i++*2)
}
密码输入和确认
死循环判断输入缓冲区为空
#include <studio.h>
main()
{
int ret=0;
char password[20]={0}
printf("请输入密码:");
scanf("%s",password);//输入函数 123456回车确认,在输入缓冲区取走123456,剩下\n
printf("请确认密码(Y/N)")//未等待
ret=getchar();//输入函数,在输入缓冲区取走\n
if(ret=='Y')
{
printf("确认成功")
}
else
{
printf("确认失败")//于是打印出\n的ACLLa码10
}
}
修改后
#include <studio.h>
main()
{
int ret=0;
int ch=0;
char password[20]={0}
printf("请输入密码:");
scanf("%s",password);//输入密码存放在password函数中123456 ABCD回车确认,在输入缓冲区取走123456,剩下\nABCD\n
while(nr=getchar()!='\n');
{
//不需要做事情,只需循环判断等待为\n
}
printf("请确认密码(Y/N)")//等待中
ret=getchar();//重新输入密码
if(ret=='Y')
{
printf("确认成功")
}
else
{
printf("确认失败")
}
编写代码,演示多个字符从两端移动,向中间汇聚
#include <studio.h>
#include <string.h>
main()
{
char arr1[]="hello word"
char arr2[]="##########"
int left=0;//左下标
int right =strlen(arr1)-1 //右下标
while(left<=right)
{
arr2[left] =arr1[left];
arr2[right] =arr1[right];
printf("%s\n",arr2);
left++;
right--
}
}
do-while语句构成循环
先执行循环体中的语句,然后判断表达式是否为真,如果为真,继续循环,如果为假,则终止循环
打印1-10 的值
#include <studio.h>
main()
{
int i=0;
do
{
printf("%d\n",i);
i++;
}
while(i<=10);
}
for语句构成循环
for(表达式1初始化循环变量;表达式2条件判断部分;表达式3循环条件的调整)
循环语句;
注意情况:
- 表达式1和表达式2和表达式3均可以省略,但“;”不能省略
- 省略表达式1;表示不对循环控制变量赋初值
- 省略表达式2:若不做其他处理,则成为死循环
- 省略表达式3,则表示不对循环控制变量进行操作
简单打印1-10的值
#include <studio.h>
main()
{
int i=0;
for(i=1;i<=10 ;i++)//for语句
{
printf("%d\n",i);
}
return 0;
}
变种情况1缺少表达式1
#include <studio.h>
main()
{
int i=0;
int j=0;
for(;i<=10;i++)//for语句
{
//当i从0 → 1时,j循环10次,此时j=10
//当i从1 → 2时,j由于省略循环变量赋初值,无法从10初始为0,故无法循环
for(;j<=10;j++)
{
printf("你好\n");
}
}
return 0;
}
//当省略表达式1(循环变量赋初值)时,只能输出10次
变种情况2,表达式2(循环条件的缺失)
for(i=0,j=0;j=0;i++,j++)
{
//不循环,j=0意思为j为假
//死循环。当j=!0时j为真
}
计算n的阶乘
#include <studio.h>
int i;
int sum=1;
main()
{
printf("请输入n的数字")
scanf("&d",sum)
for(i=1;i<=sum;i++)//for语句
{
sum=sum*i
}
printf("%d\n",sum);
return 0;
}
在一个有序数组中查找具体的某些数字的下标
#include <studio.h>
main()
{
int arr[] ={1,2,3,4,5,6,7,8,9,10}
int m=5;
int changdu=sizeof(arr)/sizeof(arr[0]);//求数组长度
for(i=1;i<changdu;i++)
{
if(m==arr[i])//当数组元素和m相等时
{
printf("找到了。下标是;%d\n",i);
}
}
if(i==arr[i])//当循环次数等于数组长度时
printf("未找到\n");
return 0;
}
用 折半查找完成上题
#include <studio.h>
main()
{
int arr[] ={1,2,3,4,5,6,7,8,9,10}
int m=6;
int changdu=sizeof(arr)/sizeof(arr[0]);//求数组长度
int left =0;//左下标
int right=changdu -1;//右下标
for(i=1;i<changdu;i++)
int changdu =(left+right)/2
{
if(arr[changdu]>m)//当数组元素和m相等时
{
right =changdu -1;
//假设查询范围为1~10,下标中间值8大于6,
//当中间值大于查询值时,就相当于8~10绝对不可能有,
//接下来该查询,左下标~查询中间值+1的距离
}
else if(arr[changdu]<m)
{
left =changdu+1
//假设查询范围为1~10,下标中间值4小于6,
//当中间值小于查询值时,就相当于1~4绝对不可能有,
//接下来该查询,查询中间值+1~右下标的距离
}
printf("找到了\n",changdu);
break;
}
}
if(left>right)
{
}
return 0;
}
花神博客生涯之C语言(4)结束了哦~
接下来会持续更新(⊙o⊙)!