C语言之while循环
while循环能做什么???
- 先来个概念格式,while循环的一般形式为:
while(表达式){
语句块
}
意思是,先计算“表达式”的值,当值为真(非0)时, 执行“语句块”;执行完“语句块”,再次计算表达式的值,如果为真,继续执行“语句块”……这个过程会一直重复,直到表达式的值为假(0),就退出循环,执行 while 后面的代码。
看这段话你可能会有很多疑问,不过不重要,只要记住那个格式就行,因为上面那段话是官方阐述。通常将“表达式”称为循环条件,把“语句块”称为循环体,整个循环的过程就是不停判断循环条件、并执行循环体代码的过程。其实就是符合条件就进行大括号里的内容,不符合条件,无视它就好。
- 看个例子,用 while 循环计算1加到100的值:
#include <stdio.h>
int main(){
int i=1, sum=0;
while(i<=100){
sum+=i;
i++;
}
printf("%d\n",sum);
return 0;
}
运行结果:
5050
代码分析:
程序运行到 while 时,因为 i=1,i<=100 成立,所以会执行循环体;执行结束后 i 的值变为 2,sum 的值变为 1。
接下来会继续判断 i<=100是否成立,因为此时 i=2,i<=100 成立,所以继续执行循环体;执行结束后 i 的值变为 3,sum 的值变为3。
重复执行步骤 2)。
当循环进行到第100次,i 的值变为 101,sum 的值变为5050;因为此时 i<=100 不再成立,所以就退出循环,不再执行循环体,转而执行while循环后面的代码。
while 循环的整体思路是这样的:设置一个带有变量的循环条件,也即一个带有变量的表达式;在循环体中额外添加一条语句,让它能够改变循环条件中变量的值。这样,随着循环的不断执行,循环条件中变量的值也会不断变化,终有一个时刻,循环条件不再成立,整个循环就结束了。
如果循环条件中不包含变量,会发生什么情况呢?
- 循环条件成立时的话,while 循环会一直执行下去,永不结束,成为“死循环”。例如:
#include <stdio.h>
int main(){
while(1){
printf("1");
}
return 0;
}
- 运行程序,会不停地输出“1”,直到用户强制关闭。
- 循环条件不成立的话,while 循环就一次也不会执行。例如:
#include <stdio.h>
int main(){
while(0){
printf("1");
}
return 0;
}
- 运行程序,什么也不会输出。
下面来练习一下!!!
- 如果要打印1~100该咋办?这个问题可能很简单。
#include <stdio.h>
#include <stdlib.h>
int main()
{
system("color 0a");//输出的背景为黑底绿字,可删
int i=1;
while(i<=100){
printf("%d\n",i);
i=i+1;
}
return 0;
}
- 如果要到着输出100到1呢?
#include <stdio.h>
#include <stdlib.h>
int main()
{
system("color 0a");
int i=100;
while(i>0){
printf("%d\n",i);
i=i-1;
}
return 0;
}
- 如果要输出1~100的偶数呢?
#include <stdio.h>
#include <stdlib.h>
int main()
{
system("color 0a");
int i=2;
while(i<=100){
printf("%d\n",i);
i=i+2;
}
return 0;
}
- 再来个难的,输出1~100后再从100输到1。
#include <stdio.h>
#include <stdlib.h>
int main()
{
system("color 0a");
int i=1;
while(i<100){
printf("%d\n",i);
i=i+1;
}
while(i>0){
printf("%d\n",i);
i=i-1;
}
return 0;
}
所以,循环(Loop),就是重复地执行同一段代码,例如要计算 1+2+3+……+99+100 的值,就要重复进行99次加法运算。
通过上述对while有个基本了解,但如何用计算机输出1~100中所有不能被3整除的数,例如1,2,4,5……,97,98,100。
通过上述,其实可以让a从开始每次增加1就可以。如果想每次遇到3的倍数就不打印,只需每次对a进行判断就好,即当a为3或3的倍数就不输出,否则就输出。
那具体该如何做?
我们只需要通过if语句来判断变量a的值除以3的余数是否为0就可以了。如果余数不为0,说明变量a中的值不是3的倍数,就将变量a中的值打印出来;否则就说明变量a中的值是3的倍数,不能打印。
那么,怎么判断变量a中的值除以3的余数是否为0呢,需要使用“%”这个运算符。在第3章中我们介绍过,“%”读作mod,也可以称之为“取模”,作用就是获取余数。另外说一下“%”这个运算符的左右两边必须为整数。而“/”这个符号表示除号,作用是获取商,“/”这个运算符的左右两边既可以是整数也可以是小数。
代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=1;
while(a<=100){
if(a%3!=0){
printf("%d\n",a);
}
a++;
}
return 0;
}
- 如果要输出1~100中能被3整除但是不能被5整除的所有数,又该怎么办?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=1;
while(a<=100){
if(a%3==0 && a%5!=0){
printf("%d\n",a);
}
a++;
}
return 0;
}
- 更复杂的来了!现在我想知道1~100中有多少这样的数,请你写这样一个程序,输出1~100中所有7的倍数和末尾含7的数。
- 很简单,我们先参照以往的程序,利用while循环,让变量a从1递增到100,不过我们每次在输出变量a的值之前需要对变量a进行判断。根据题目的要求,如果变量a的值是7的倍数或者末尾含有7就打印出来。判断一个变量是否为7的倍数我们已经很熟悉了,只需要判断变量a除以7的余数是否为0就可以,即如果
a%7==0这个关系表达式成立就输出。那怎么判断变量a的值末尾是否含7呢?我们仔细想一想就会发现末尾含7的数其实就是这个数的个位为7,也就是这个数除以10的余数为7。发现这个规律就好办了,即在a%10==7这个关系表达式成立时输出就可以啦。 - 好了,现在有两个关系表达式
a%7==0和a%10==7,分别表示这个数是否为7的倍数以及末尾是否含7。这两个式子是“或者”的关系,只要有一个成立,就将这个数输出。这里的逻辑关系“或者”在C语言中的表示方法用“||”表示, - 所以,代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=1;
while(a<=100){
if(a%7==0 || a%10==7){
printf("%d\n",a);
}
a++;
}
return 0;
}
那如何求和呢?
- 可能你会说,一直加就好,比如在求1~100的和之前,我们先来解决如何求1+2+3的值。
没错,你可以这样写:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
a = 1+2+3;
printf("%d", a);
system("pause");
return 0;
}
- 但如果是1~100的话,这样不会很麻烦吗?可以换一种方式,比如:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
a = 0; //想一想为什么a的初始值要为0呢?
a = a+1;
a = a+2;
a = a+3;
printf("%d", a);
return 0;
}
你可能会说这样写岂不是更麻烦……但是我们发现在上面的这段代码中,a=a+1; a=a+2;a=a+3;这三句话,基本思想是相同的,第一次加1,第二次加2,第三次加3。我们可以把这三个语句用a=a+i;来表示。然后让变量i从1到3循环就可以了。
- 代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, i;
a = 0;
i = 1;
while(i< = 3)
{
a = a+i;
i = i+1;
}
printf("%d", a);
return 0;
}
- 如果需要计算1~100的和,我们只需将上面代码中i<=3修改为i<=100就可以了,代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, i;
a = 0;
i = 1;
while(i< = 100)
{
a = a+i;
i = i+1;
}
printf("%d", a);
return 0;
}
- 如果求1~100中所有7的倍数或者末尾含7的数的总和,又该怎么办呢?其实是一样的:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, i;
a = 0;
i = 1;
while(i<= 100)
{
if(i%7 == 0 || i%10 == 7) {
a = a+i;
}
i = i+1;
}
printf("%d", a);
return 0;
}
- 求1~100所有偶数的和
#include <stdio.h>
#include <stdlib.h>
int main(){
system("color 0a");
int i=0,a=0;
while(i<100){
a=a+i;
i=i+2;
}
printf("%d",a);
return 0;
}
- 输入一个整数n,求n的阶乘
#include <stdio.h>
#include <stdlib.h>
int main()
{
system("color 0a");
int i=1,a=1;
int n;
scanf("%d",&n);
while(i<=n){
a=a*i;
i=i+1;
}
printf("%d",a);
return 0;
}
- 请尝试编写一个两分钟的倒计时。形如:2:00 1:59 1:58 …… 1:00 0:59 0:58 …… 0:02 0:01 0:00
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
int i,j=0;
scanf("%d",&i);
while(i>=j){
system("cls");
printf("%2d:%2d\n",i/60,i-i/60*60);
Sleep(1000);
i--;
}
return 0;
}
- 打印三行,每行5个
“*”。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=1;
while(a<=15){
printf("*");
if(a%5==0){
printf("\n");
}
a++;
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=1,b;
while(a<=3){
b=1;
while(b<=5){
printf("*");
b++;
}
printf("\n");
a++;
}
return 0;
}
- 想一想,如果想要完成这样的图形该怎么办?
*
**
***
****
*****
- 具体代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=1,b;
while(a<=5){
b=1;
while(b<=a){
printf("*");
b++;
}
printf("\n");
a++;
}
return 0;
}
- 请尝试用while循环打印下面的图形:
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=1,b;
while(a<=5){
b=1;
while(b<=a){
printf("%d",a);
b++;
}
printf("\n");
a++;
}
return 0;
}
- 请尝试用while循环打印下面的图形:
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=0,b,c;
while(a<=5){
b=0;
while(b<=a){
c++;
b++;
printf("%d ",c);//这里有空格
}
printf("\n");
a++;
}
return 0;
}
C语言之while循环的更多相关文章
- C语言-for循环
for循环是C语言中的循环语句之一,它的一般形式为for(初值,条件表达式,步长){语句};初值通常是一个赋值语句, 它用来给循环控制变量赋初值: 条件表达式是一个关系表达式, 它决定什么时候退出循环 ...
- 怎么绘制C语言选择和循环语句的思维导图
C语言是一门非常基础的计算机语言,是大部分本科学生的公共专业,在C语言的学习中,选择和循环语句是至关重要的部分,利用思维导图可以有效节约时间并加深知识点记忆. 接下来就为大家介绍一下我用iMindMa ...
- C语言利用for循环打印菱形
C语言利用for循环打印菱形(高度为奇数) 这次用的方法是上下部分分开打印,先打印上部分,再打印下部分. 先举个简单的例子打印,再改进代码,登堂入室从而理解. 例:打印一个高度(高度必须为奇数)为 5 ...
- [08 Go语言基础-for循环]
[08 Go语言基础-for循环] 循环 循环语句是用来重复执行某一段代码. for 是 Go 语言唯一的循环语句.Go 语言中并没有其他语言比如 C 语言中的 while 和 do while 循环 ...
- JS脚本语言里的循环
js脚本语言: 循环:(循环操作某一个功能(执行某段代码)) 四要素: 循环初始值 循环条件 状态改变 循环体 for(穷举 迭代) while 举例:(穷举) 与7相关的数 <scr ...
- go语言中间的循环
在Go语言中只有很少的几个控制结构,它没有while或者do-while循环. 但是它有for.switch.if.而且switch接受像for那样可选的初始化语句.下面来认识一下他们 一.if语句 ...
- 电脑小白学习软件开发-C#语言基础之循环重点讲解,习题
写代码也要读书,爱全栈,更爱生活.每日更新原创IT编程技术及日常实用视频. 我们的目标是:玩得转服务器Web开发,搞得懂移动端,电脑客户端更是不在话下. 本教程是基础教程,适合任何有志于学习软件开发的 ...
- [转] Lisp语言:Do循环的使用
转自http://blog.csdn.net/keyboardota/article/details/8240250 有关Lisp语言中的Do循环,就像很多人说的一样,初看起来太奇怪了,不知道怎么理解 ...
- C语言中的循环语句练习
注:练习题目均出自<明解C语言 入门篇> 一.do语句 1,求多个整数的和及平均值 #include<stdio.h> int main(void) { ; //和 ; //整 ...
- C/C++——C语言跳出多重循环方法
c语言的break语句只能跳出离它最近的一层循环,但是我们有时候需要跳出多层循环,以下有几种跳出多重循环的方法: 1. 使用goto ; i < MAX1; i++) { ; j < MA ...
随机推荐
- 【[Offer收割]编程练习赛9 B】水陆距离
[题目链接]:http://hihocoder.com/problemset/problem/1478 [题意] [题解] 一开始把所有的水域的位置都加入到队列中去; 然后跑一个bfs. 第一次到达的 ...
- 2018-7-29-C#-强转会不会抛出异常
title author date CreateTime categories C# 强转会不会抛出异常 lindexi 2018-7-29 14:24:1 +0800 2018-4-4 16:24: ...
- 2003年NOIP普及组复赛题解
题目涉及算法: 乒乓球:简单字符串模拟: 数字游戏:区间DP: 栈:卡特兰数 麦森数:高精度.快速幂.数学. 乒乓球 题目链接:https://www.luogu.org/problem/P1042 ...
- uni-app学习记录06-Vuex简单使用
import Vue from 'vue' // 这里引入vuex import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Stor ...
- 1、Python 日期时间格式化输出
今天帮朋友写自动化脚本,又需要用格式化日期,又忘记怎么写了,还是写到自己博客里面,方便日后需要的时候看一眼吧.So,临时加一篇 Python 的文章. 1.Python的time模块 import t ...
- linux scull 中的读写代码
读和写方法都进行类似的任务, 就是, 从和到应用程序代码拷贝数据. 因此, 它们的原型 相当相似, 可以同时介绍它们: ssize_t read(struct file *filp, char u ...
- 用一篇文章了解ppi,dpr,物理像素,逻辑像素,以及二倍图
这篇文章能让你了解到什么是分辨率.dpr.dip.ppi (dpi相当于ppi,dpi用点表示物理像素密度,ppi是逻辑像素密度) 首先从最简单的ppi开始: 一部手机,有大有小,怎么知道手机的大小用 ...
- Codevs 四子连棋 (迭代加深搜索)
题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻的空格,这叫行棋一步,黑白双 ...
- RabbitMQ-Exchange交换器
交换器分类 RabbitMQ的Exchange(交换器)分为四类: direct(默认) headers fanout topic 其中headers交换器允许你匹配AMQP消息的header而非路由 ...
- jQuery验证码发送时间秒递减(刷新存储cookie)
<input id="sendEmail" type="button" name="sendEmail" onclick=" ...