C语言典型例题51

《C程序设计教程(第四版)——谭浩强》


例题4.3 while循环与do……while循环的比较


代码:

(1)while语句

#include <stdio.h>
int main()
{
	int sum=0;
	
//	char ch='';
	while(1)
	{
		sum=0;//每一次输入结束后数的和重置
		int i=0;
		printf("请输入你想从___开始加到10:\n");
		scanf("%d",&i);
		while(i<=10)
		{
			sum=sum+i;
			i++;
		}
	
		printf("和为%d\n",sum);
		
		printf("【温馨提示】如果想要退出计算,请按‘x’键;如不想退出,请忽略这条提示!\n");
		int ch = 0;
		getchar();
		ch=getchar();
		
		if(ch == 'x')
		{
			printf("!!!已退出!!!");
			break;
		}
	}
	
	return 0;
}

(2)do……while语句

#include <stdio.h>
int main()
{
	while(1)
	{
		int sum = 0;
		
		int i=1;
		printf("请输入对于从n到10中的求和中的n\nn=");
		scanf("%d",&i);
		
		do
		{
			sum=sum+i;
			i++;
		}while(i<=10);
		printf("求和的结果为%d\n",sum);
		sum=0;
		
		printf("【温馨提示】请决定是否要停止计算,如要停止,请按“x”键;如不想,请忽略本次提示!!!\n");
		int ch='0';
		getchar();
		ch=getchar();
		if(ch=='x')
		{
			printf("!!!已停止计算并跳出计算!!!\n");
			break;
		}
		
		
	}
	
	return 0;
}

(3)总和

//《C程序设计教程(第四版)——谭浩强》
//例题4.3 while循环与do……while循环的比较

//#include <stdio.h>
//int main()
//{
//	int sum=0;
//	
	char ch='';
//	while(1)
//	{
//		sum=0;//每一次输入结束后数的和重置
//		int i=0;
//		printf("请输入你想从___开始加到10:\n");
//		scanf("%d",&i);
//		while(i<=10)
//		{
//			sum=sum+i;
//			i++;
//		}
//	
//		printf("和为%d\n",sum);
//		
//		printf("【温馨提示】如果想要退出计算,请按‘x’键;如不想退出,请忽略这条提示!\n");
//		int ch = 0;
//		getchar();
//		ch=getchar();
//		
//		if(ch == 'x')
//		{
//			printf("!!!已退出!!!");
//			break;
//		}
//	}
//	
//	return 0;
//}

#include <stdio.h>
int main()
{
	while(1)
	{
		int sum = 0;
		
		int i=1;
		printf("请输入对于从n到10中的求和中的n\nn=");
		scanf("%d",&i);
		
		do
		{
			sum=sum+i;
			i++;
		}while(i<=10);
		printf("求和的结果为%d\n",sum);
		sum=0;
		
		printf("【温馨提示】请决定是否要停止计算,如要停止,请按“x”键;如不想,请忽略本次提示!!!\n");
		int ch='0';
		getchar();
		ch=getchar();
		if(ch=='x')
		{
			printf("!!!已停止计算并跳出计算!!!\n");
			break;
		}
		
		
	}
	
	return 0;
}

运行结果:

(1)while语句

(2)do……while语句

编写代码时遇到的问题:

(1)while语句

while当到第11次(即while的判断语句为假时),一次都不执行循环体

(2)do……while语句

do……while语句当循环第11次时(即while的判断语句为假时),会先执行循环体,然后在判断语句是否为假为真;即while语句至少循环一次

总结:

小tip

由于这种题需要输入多个值并且对值进行比较后才能得到一个广泛而正确的答案,所以需要反复的输入很多值,对比多个输入输出结果。若每次输入都要输入值,记下运行结果后关闭应用程序窗口在输入输出,如此周而反复,会大大降低调试的效率

因此,我们可以在一个窗口输入输出多次结果,需要时跳出

关键代码部分:

        int ch = 0;
		getchar();
		ch=getchar();
		
		if(ch == 'x')
		{
			printf("!!!已退出!!!");
			break;
		}
(1)ch存储的明明是字符,为什么要用int类型,而不是char类型?

        答:getchar()这个库函数规定,当读取正常时,返回一个字符;当读取错误或者读取到文件末尾时,返回-1。但是char类型的变量只有一个字节(byte),不足以存储一个-1。但是,当ch的类型为int时,它不仅仅可以存储“-1”,还可以字符所对应的ASCII码。

(2)为什么要莫名奇妙写一行getchar();

        答:因为getchar()规定一次只能读取一个字符,为了可以让ch=getchar();正确读取到“x”,必须保证“x”前面没有任何的字符,所以ch=getchar();前的getchar();就是这个作用。

(3) break是什么意思?        

        答:跳出它所在的循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值