您现在的位置是:首页 >技术杂谈 >C真的不难学,不信就看下我关于循环的理解网站首页技术杂谈
C真的不难学,不信就看下我关于循环的理解
人生就是日复一日地不断的重复,既有相同的事情,也有相似的事情,却无论如何也无法回到最初。要想在生活的每一时刻都能有新的发现,恐怕只是一个美好的愿望。
下面将会给大家介绍程序中的重复流程——循环。
do语句
C语言中提供了3中循环执行语句,首先我们来看下do循环。
do语句
输入一个整数,显示它是奇数还是偶数。然后询问是否重复同样的操作,并按要求处理。
代码如下:
#include<stdio.h>
int main()
{
int ret = 0;
do
{
int n = 0;
printf("请输入一个整数:");
scanf("%d", &n);
if (n % 2 == 0)
{
printf("输入的数是一个偶数
");
}
else
{
printf("输入的数是一个奇数
");
}
printf("要重复一次嘛?【Yes……0/No……9】");
scanf("%d", &ret);
} while (ret==0);
return 0;
}
以上就是do语句的使用,下面是结构流程图
do是”执行“的意思,while是”在……期间“的意思。根据do语句的处理流程,只要在()中的表达式的判断结果不是0,语句就会循环执行。
另外do语句循环的对象语句称为循环体。
本程序中do语句的循环体是{和}之间的复合语句(程序块),执行流程如下图:
本程序的情况下,如果读取到的变量的值为0,那么控制表达式ret0的判断结果就为1。因为1不等于0,所以复合语句的循环体就会再次被执行。
如果读取到的变量的值不为0,那么控制表达式ret0的判断结果就为0,do语句就结束了。
复合语句(程序块)中的声明
上述例子中的n是在do语句中的复合语句部分进行声明的。需要注意的是,仅在复合语句中使用的变量通常要再复合语句中声明。
注意:
仅仅在复合语句中使用变量要在该复合语句中进行声明。
读取一定范围内的值
使用do语句的话,从键盘读取的数值是有限制的。代码如下;
#include<stdio.h>
int main()
{
int hand = 0;
do
{
printf("请选择出什么拳【0……石头/1……剪刀/2……布】");
scanf("%d", &hand);
} while (hand<0||hand>2);
printf("你选择了");
switch (hand)
{
case 0:
printf("石头。
");
break;
case 1:
printf("剪刀。
");
break;
case 2:
printf("布。
");
break;
}
return 0;
}
如果读取的数值是0,1,2这些”合法的值“,就会显示”石头“”剪刀“”布“。而如果输入3或者-1这样的非法的值,就会提醒再次输入。
德摩根定律
对各条件取非,然后将逻辑与变为逻辑或、逻辑或变为逻辑与,然后再取其否定,结果和原条件一样。这就是德摩根定律。表示如下图:
求多个数的和及平均值
不停地输入整数,显示其和及平均值。
代码如下:
#include<stdio.h>
int main()
{
int sum = 0;
int cnt = 0;
int retry = 0;
do
{
int t = 0;
printf("请输入一个整数:");
scanf("%d", &t);
sum = sum + t;
cnt = cnt + 1;
printf("是否继续?<Yes……0/No……9>");
scanf("%d", &ret);
} while (retry==0);
printf("和为%d,平均值为%.2f
", sum, (double)sum / cnt);
return 0;
}
只要retry的值为0,就继续进行循环。
下面是求和的过程图:
复合赋值运算符
这样的称为复合赋值运算符。这里的@指代前面提到的各种运算符。
使用复合赋值运算符,计算输入的值的和以及平均值,代码如下:
#include<stdio.h>
int main()
{
int sum = 0;
int cnt = 0;
int retry = 0;
do
{
int t = 0;
printf("请输入一个整数:");
scanf("%d", &t);
sum += t;
cnt++;
printf("是否继续?<Yes……0/No……9>");
scanf("%d", &retry);
} while (retry==0);
printf("和为%d,平均值为%.2f
", sum, (double)sum / cnt);
return 0;
}
后置递增运算符和后置递减运算符
上述程序中使用的++是后置运算符,使用该运算符的表达式a++,能够是操作数的值仅增加1。这种只增加1的情况,我们称为递增。
如上表,是操作符的数值减1的–运算符是后置递减运算符。
两个运算符的功能如下图:
使用复合赋值运算符和后置递增运算符、后置递减运算符,能够使程序更加简洁、更易读。
while语句
和上面介绍的do语句不同,再循环体执行之前对循环的继续条件进行判断的是while语句。
while语句
输入一个整数数值,显示它开始递减到0的每个整数的程序如下:
#include<stdio.h>
int main()
{
int n = 0;
printf("请输入一个整数:");
scanf("%d", &n);
while (n>=0)
{
printf("%d", n);
n--;
}
printf("
");
return 0;
}
这里为了实现递减使用了while语句,结构如下图;
while语句会在表达式达到0之前循环其中的语句。程序的流程图如下:
用递减运算符简化程序代码
#include<stdio.h>
int main()
{
int n = 0;
printf("请输入一个正整数:");
while (n>=0)
{
printf("%d", n--);
}
printf("
");
return 0;
}
数据递增
显示出从0开始递增到输入的整数的各个整数。代码如下;
#include<stdio.h>
int main()
{
int i = 0;
int n = 0;
printf("请输入一个正整数:");
scanf("%d", &n);
while (i<=n)
{
printf("%d", i++);
}
return 0;
}
限定次数的循环操作
输入一个正数后,并排连续显示出该整数的个数*,代码如下:
#include<stdio.h>
int main()
{
int n = 0;
printf("正整数:");
scanf("%d", &n);
while (n-->0)
{
putchar('*');
}
printf("
");
return 0;
}
假设输入的值等于15为例,首先对while语句的控制表达式n–>0进行判断。–是后置递减运算符,所以会对n的值是否大于0进行判断。
字符常量和putchar函数
在while语句执行的过程中,putchar('‘);被执行;像’‘这样,使用单引号括起来的字符称为字符常量,字符常量是int类型。
字符常量’'和字符串常量""的区别如下:
do语句和while语句
在执行过程中是有区别的:
do语句的循环体至少执行一次,而while语句的循环体则有可能一个也不会执行。
另外在判断时候继续执行的时间方面,do语句和while语句也完全不相同。
逆向显示整数值
输入一个非负整数,并进行逆向显示。
代码如下:
#include<stdio.h>
int main()
{
int n = 0;
do
{
printf("请输入一个正整数:");
scanf("%d", &n);
if (n<=0)
{
puts("a请不要输入一个非正整数。");
}
} while (n<=0);
while (n>0)
{
printf("%d", n % 10);
n /= 10;
}
return 0;
}
下面是执行过程;
for语句
比起使用while语句,使用for语句实现循环会使程序更加简洁、易读。
for语句
递增显示从0到输入正整数为止的各个整数。
代码如下:
#include<stdio.h>
int main()
{
int i = 0;
int n = 0;
printf("请输入一个正整数:");
scanf("%d", &n);
for ( i = 0; i <= n; i++)
{
printf("%d ", i);
}
return 0;
}
程序变得更加的简洁了。for语句的结构图如下;
- 作为”预处理“,判断并执行A部分。
- 如果作为”继续条件“的B部分控制表达式不为0,则执行语句(循环体)。
- 执行语句后,判断并执行作为”收尾处理“或”下一个循环的准备处理“的C部分返回到2中。
使用for语句实现固定次数的循环
输入一个整数连续显示出该整数整数个*
代码如下:
#include<stdio.h>
int main()
{
int n = 0;
int i = 0;
printf("请输入一个整数:");
scanf(("%d", &n));
for ( i = 1; i <=n; i++)
{
putchar('*');
}
putchar("
");
return 0;
}
本程序中的for语句也可以替换为如下形式:
for(i=0;i<n:i++)
{
putchar('*');
}
for循环和while循环的执行区别:
输入规定个数个整数并显示出它们的合计值和平均值(使用for语句)
代码如下:
#include<stdio.h>
int main()
{
int i = 0;
int sum = 0;
int num = 0;
int temp = 0;
printf("输入多少个整数:");
scanf("%d", &num);
for ( i = 0; i < num; i++)
{
printf("No.%d", i + 1);
scanf("%d", &temp);
sum += temp;
}
printf("合计值:%d
", sum);
printf("平均值:%.2f
", (double)sum / num);
return 0;
}
偶数的枚举
下面是我编写的一段程序,实现输入一个整数值,显示该整数值以下的正偶数,代码如下:
#include<stdio.h>
int main()
{
int i = 0;
int n = 0;
printf("请输入整数值:");
scanf("%d", &n);
for ( i = 2; i <= n; i+=2)
{
printf("%d ", i);
}
putchar('
');
return 0;
}
for语句中的i+=2部分中使用了复合赋值运算符+=,其作用是将右操作数的值加左操作数的值。
因为是将变量i加2,所以每次循环时i的值都会加2。
约数的枚举
编写一段程序,实现输入一个整数值,显示该整数值的所有约数,代码如下:
#include<stdio.h>
int main()
{
int i = 0;
int n = 0;
printf("整数值:");
scanf("%d", &n);
for ( i = 1; i <= n; i++)
{
if (n%i==0)
{
printf("%d ", i);
}
}
printf("
");
return 0;
}
for语句中,变量i的值是从1到n递增的。
如果n除以i的余数为0(即n能被i整除),则判断i是n的约数,并显示它的值。
表达式语句和空语句
请看下面的代码,感觉这段代码是要显示变量n个*
for(i=1;i<=n;i++);
putchar('*');
但是,无论n是怎样的值,结果都只显示一个*。
原因在于i++)后面的分号。只包含一个分号的语句,称为空语句,执行代码的时候什么也不会发生。
循环语句
以上说到的do语句、while语句、for语句,都是循环执行流程的语句。这就是循环语句。
多重循环
将循环语句的循环体作为循环语句,就可以进行二重、三重循环。这样的循环称为多重循环。
二重循环
实际上,在一个程序中还可以嵌套另一个循环。所根据嵌套的循环的多少,有二重循环、三重循环等。它们统称为多重循环。
使用二重循环显示九九乘法表,代码如下:
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for ( i = 1; i <= 9; i++)
{
for ( j = 1; j <=i ; j++)
{
printf("%d*%d=%d ", i, j, i * j);
}
printf("
");
}
return 0;
}
运行结果:
外侧的for语句的作用是使变量i的值从1到9递增。其中循环分别对应乘法表的第一行、第二行、……第九行。即纵方向的循环。
各行中执行的内侧的for语句的作用使变量j的值从1到9递增,这是各行中的横方向的循环。
使用break语句强制结束循环
在多重循环中执行break语句时,仅仅会跳出内侧的循环语句,而不会直接跳出所有的循环如下代码所示:
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for (i = 1; i <= 9; i++)
{
for (j = 1; j <= i; j++)
{
if (i*j>=40)
{
break;
}
printf("%d*%d=%d ", i, j, i * j);
}
printf("
");
}
return 0;
}
代码运行;
当i*j的值大于等于40时直接跳出内层循环。
显示图形
下面我们来显示长方形,代码如下:
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
int width = 0;
int height = 0;
printf("请输入长宽:");
scanf("%d %d", &width, &height);
for ( i = 0; i < height; i++)
{
for ( j = 0; j < width; j++)
{
printf("*");
}
printf("
");
}
return 0;
}
程序的组成元素和格式
关键字
在C语言中,像if和else这样的标识符被赋予了特殊的意义。这种具有特殊意义的标识符称为关键字,它们是不能作为变量名使用的。
分隔符
一种有13中分隔符,就是又来分割的。
常量和字符串常量
字符常量、整数常量、浮点数常量和字符串常量都是程序的构成要素。
总结
以上就是关于C中的循环控制,其实这样看起来C也不是很难。