C语言自学第六课——循环

一、while循环

1. 简单while循环

例如:输出0-20之间的整数:
在这里插入图片描述
在这里插入图片描述

2. 通用形式

while(expression)
    statement;

注意:statement部分可以是以;结尾的简单语句,也可以是以 {} 括起来的复合语句。

二、 getchar()和putchar()

定义:单字符输入/输出函数(输入/输出函数简称I/O函数)。

1. 缓冲区

C语言程序是如何处理键盘输入的呢?
分为缓冲输入和无缓冲输入:
在这里插入图片描述

2. getchar()函数

输入字符。ch = getchar();效果和scanf(“%c” , &ch);效果一样。
getchar()函数输入时有缓冲区。

例如:确认密码程序
在这里插入图片描述
此时无法输入Y/N,因为在scanf()函数读完后,缓冲区内存在\n未被读取,紧接着getchar()函数将留在缓冲区内的\n读取,代码结束。

修改:
在这里插入图片描述
在scanf()函数后多加个getchar()函数,用于拿走缓冲区内留的\n。

3. putchar()函数

输出字符。putchar(ch);效果和printf(“%c” , ch);效果一样。

例如:输入和输出相同字符。
在这里插入图片描述

4. EOF

(1)定义

用getchar()读取文件,检测到文件结尾时将返回一个特殊值,即EOF(end of file)。通常,EOF定义在stdio.h文件中,且值为-1。

注意:EOF作为一个值,标志着检测到文件结尾,并不是一个符号。

(2)echo_eof.c程序

#include<stdio.c>
int main()
{
    int ch;
    //char类型变量只能表示0-255的无符号整数,但EOF的值是-1,所以用int。
    //且getchar()作为单字符输入函数,其实际返回值的类型也是int。
    while((ch=getchar())!=EOF)
        putchar(ch);
    return 0;
}

echo_ecof.c程序能把用户输入的内容拷贝到屏幕上,并在读到EOF时停止。

三、do while循环

1.定义

出口条件循环:do while循环,即在循环的每次迭代之后检查测试条件,这会保证该循环至少执行一次

2. 通用形式

do
    statement
while (expression);

例如:图1中while循环输入的 “输出0-20之间的整数:”该如何用do while循环表达?
在这里插入图片描述

四、for循环

1. 定义

2. 通用形式

for(initialize;test;update )
     statement;

initialize:初始化
test:测试条件
update:更新调整

注意:三个表达式也可以是不同的变量。

例如:图1中while循环输入的 “输出0-20之间的整数:”该如何用for循环表达?
在这里插入图片描述

3. break和continue在for循环中

(1)break

在这里插入图片描述

(2)continue

在这里插入图片描述
注意:continue语句在for循环中与while循环中略有不同。在for循环中,执行到continue后跳转道update(即本例题中的num++),然后继续循环直至结束。

4. 语句省略

for循环可以省略一个或多个表达式,只要整个循环中包含能结束循环的语句即可。

(1)initialize语句省略

例如:打印“嘻嘻”

未省略initialize语句:
在这里插入图片描述
打印“嘻嘻”数=3(i=0、1、2)*3(j=0、1、2)=9个

省略initialize语句:
在这里插入图片描述
打印“嘻嘻”数=1(i=0)*3(j=0、1、2)=3个

所以,初学阶段,尽量不省略initialize语句,避免发生错误。

(2)test语句省略

省略test表达式被视为恒为真。

5. for循环建议

(1)不可在for循环体内修改循环变量,防止其失去控制;
for循环中()内update语句已经是循环变量了,不要在statement语句内再修改循环变量;

(2)建议for语句的循环控制变量的取值采取“前闭后开区间”的写法。(只是建议,不是要求)

五、运算符

1. 其他赋值运算符

scores += 2 与 scores = scores + 20 相同;
scores -= 2 与 scores = scores - 2 相同;
scores *= 2 与 scores = scores * 2 相同;
scores /= 2 与 scores = scores / 2 相同;
scores %= 2 与 scores = scores % 2 相同。

六、练习

注意练习方法
先在脑海中(或者纸上)写出思路(可图解),再根据语法规则写代码。
如果不会需要学习别人的代码,先理清别人的思路,再按照学到的思路(或者加上自己的见解)写代码。

练习1:求n的阶乘(n!)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int i = 1;
	int n = 0;
	int num = 1;
	scanf("%d",&n);//别忘了加上&符号!!!
	while (i<=n)
	{
		num *= i;//num*=i 与 num=num*i 相同
		i++;
	}
	printf("%d",num);
	return 0;
}

练习2:求1! + 2! + 3! + … … + 10!

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int i = 1;
	int num1 = 1;
	int num2 = 0;
	for (i = 1; i <= 10;i++)
	{
		num1 *= i;
		num2 += num1;
	}
	printf("%d", num2);
	return 0;
}

练习3:编写代码,演示多个字符从两端移动,向中间汇聚。

#include <stdio.h>
#include <string.h>
#include <windows.h>

int main()
{
	char arr1[] = "Welcome to Jelly's Channel";//引入两个数组arr1和arr2
	char arr2[] = "##########################";
	int left = 0;//数组最左边第一个的下标是0
	int right = strlen(arr1) - 1;//strlen()函数是求数组长度的函数,需要引头文件<string.h>

	while (left<=right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s",arr2);//%s是字符串的转换说明
		Sleep(500);//Sleep()函数意为在屏幕上停留时间,单位毫秒(本题中是睡眠0.5s),需要引头文件<windows.h>
		system("cls");//system()函数意为清空屏幕(本题中以达到动态滚动的效果)
		left++;
		right--;
	}
	printf("%s", arr2);//使最后呈现的效果保留在屏幕上
	return 0;
}
  • 26
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值