自学C语言-7

第7章 循环控制

生活中总会有许多简单而重复的工作,为完成这些重复性工作,需要花费很多时间。使用循环语句来处理程序开发中简单、重复性的工作是最好不过的了。
本章致力于使读者了解while、do…while和for3种循环结构的特点,以及转移语句的相关内容。
本章的知识架构及重难点如下:
自学C语言-7_第1张图片

7.1 循环语句

程序在运行时可以通过判断、检验条件做出选择,帮我们解决许多问题。此处,程序还必须能够重复,也就是能反复执行一段指令,直到满足某个条件为止。例如,要计算一个公司的月消费额,就要将所有的消费金额依次相加。如果要计算全年的消费总额,还需要将1~12月的消费金额依次相加。这种重复的过程就称为循环。C语言中有3种循环语句,即while、do…while和for循环语句。循环结构是结构化程序设计的基本结构之一,因此熟练掌握循环结构是程序设计的基本要求。

7.2 while语句

使用while语句可以解决当某个条件满足时反复执行某个循环体的问题。其一般形式如下:

while(表达式)
{
	语句块(循环体)
}

while语句的执行流程图如图7.1所示。
while语句首先检验一个条件,也就是括号中的表达式。当条件为真时,就执行紧跟其后的循环体语句或者语句块。每执行一遍循环,程序都将回到while语句处,重新检验条件是否满足。如果一开始条件就不满足,则跳过循环体中的语句,直接执行后面的程序代码。如果第一次检验时条件满足,那么在第一次或其后的循环过程中,必须得有使条件为假的操作,否则循环将无法终止。

说明:
无法终止的循环常被称为死循环或者无限循环。

自学C语言-7_第2张图片
例如下面的代码:

while(iSum<100)
{
    iSum+=1;
}
 printf("iSum为:%d",iSum);

在这段代码中,while语句首先判断iSum变量是否小于常量100,如果小于100,为真,那么执行紧跟其后的循环语句块;如果不小于100,为假,那么跳过循环语句块中的内容直接执行printf语句。在循环语句块中,可以看到对其中的变量进行加1的运算,这里的加1运算就是循环结构中使条件为假的操作,也就是使得iSum不小于100,否则程序会一直循环下去。

误区警示:
学习时很容易在while语句后添加英文分号(;),从而导致编译报错。一定要注意,ifif...elsewhile语句的判断表达式后是没有分号的。

【例7.1】计算n~100的累加和(while版) 用户输入一个值,从这个值开始,依次与之后的连续若干个自然数相加,当该自然数大于100时结束,并输出这若干个自然数的和。这里用到while循环,代码如下:
自学C语言-7_第3张图片
(1)在程序代码中,因为要计算n~100的累加结果,所以要定义两个变量,n表示用户输入的数据,sum表示累加的和。
(2)使用while语句判断n是否小于等于100,如果条件为真,则执行其后语句块中的内容;如果条件为假,则跳过语句块执行后面的内容。当用户输入90时,表示n的初始值为90,判断的条件为真,因此执行累加操作。
(3)在while语句块中,总和sum等于先前计算的总和结果加上现在n表示的数字,完成累加操作,n++通过自身加1操作表示下一个自然数。语句块执行结束后,while会两次判断新的n值。也就是说,“n++”;语句可以使得循环停止。
(4)当n大于100时,循环操作结束,将结果sum输出。运行程序,显示效果如上图所示。

误区警示:
使用while语句时,很容易多执行一次或少执行一次循环,这类错误被称为“差一错误”。例如,把“number<=20"写作”number<20",就会少执行一次循环,因此一定要给出正确的循环条件。

【例7.2】细菌的繁殖数量(while循环实现) 生物实验室做单细胞细菌繁殖实验。一代菌落中只有一个细菌,二代菌落中分裂成两个细菌,三代菌落中分裂成4个细菌,以此类推,每代细菌数量都会成倍数增长。计算第十二代菌落中的细菌数量。使用while循环语句实现,具体代码如下:
自学C语言-7_第4张图片
(1)在程序代码中,因为要计算1~12代的细菌成倍繁殖结果,所以要定义两个变量,x表示代数,num代表计算的细菌数量。
(2)使用while语句判断x是否小于等于12,如果条件为真,则执行其后语句块中的内容;如果条件为假,则跳过语句块执行后面的内容。初始x值为1,判断的条件为真,因此执行语句块。
(3)在语句块中,num等于先前计算的结果乘以2,完成细菌数量成倍操作,x++表示代数自身加1操作。语句执行结束后,while会再次判断新的x值。也就是说,“x++;"语句可以使循环停止。
(4)当x大于12时,循环操作结束,将结果num输出。运行程序,显示效果如上图所示。

编程训练
训练1:农夫卖瓜 编写程序,模拟农夫卖西瓜。农夫一共有1020个西瓜,第一天卖掉一半多2个,第二天卖掉剩下的一半多2个,如此循环下去,需要卖几天才能卖完。输出结果如下:(提示:剩余的数量=原来数量/2-2,且每次循环,天数都要自增加1,直到西瓜的数量为0,跳出循环,输出天数)

这些西瓜,一共卖8

自学C语言-7_第5张图片

训练2:打印100次名字 利用while循环,输出100个自己的名字。
自学C语言-7_第6张图片

7.3 do…while语句

在有些情况下,不论条件是否满足,循环过程必须执行至少一次,这时可以采用do…while语句。do…while语句的特点就是先执行循环体语句块中的内容,然后再判断循环条件是否成立。其一般形式如下:

do
{
	语句块(循环体)
}while(表达式);

do…while语句的执行流程图如下图所示:
自学C语言-7_第7张图片
do…while语句是这样执行的,首先执行一次循环体语句中的内容,然后判断表达式,当表达式的值为真时,返回重新执行循环体语句,然后再次判断表达式,直到表达式的值为假,此时循环结束。

说明:while语句和do...while语句的区别在于:while语句在每次循环之前检验条件,do...while语句在每次循环之后检验条件。这也可以从两种循环结构的代码上看出来,while结构中的while语句出现在循环体的前面,do...while结构中的while语句出现在循环体的后面。

例如下面的代码:

do
{
	iNumber++;
}while(iNumber<100);

在上面的代码中,首先执行iNumber++的操作,也就是说,不管iNumber是否小于100,都会执行一次循环体中的内容。然后判断while后括号中的内容,如果iNumber小于100,则再次执行循环语句块中的内容;条件为假时,执行后续的程序操作。

注意:
在使用do...while语句时,条件表达式要放在while关键字后面的括号中,最后必须加上一个分号(;),这里和while语句不同,一定要格外注意。

【例7.3】计算n-100的累加和(do…while版本) 在例7.1中,计算n-100所有的数字的累加方法使用的是while语句,在本实例中使用do…while语句实现相同的功能。在程序运行过程中,虽然两者的结果是相同的,但是要了解其中操作的区别。
自学C语言-7_第8张图片
(1)在程序中,同样定义n表示用户输入的数字,而sum表示计算的总和。
(2)do关键字之后是循环语句,在语句块中进行累加操作,并对n变量进行自加操作。语句块下方是while语句检验条件,如果检验为真,则继续执行上面的语句块操作;为假时,程序执行下面的代码。
(3)在循环操作完成之后,将结果输出。运行程序,显示效果如上图所示。
编程训练:
训练3:验证高斯的猜想 用do…while语句验证高斯的猜想。
10岁的高斯就很快算出了1-100之和,他找到了算术级的对称性,然后利用算术结合律,把数目一对一对地凑在一起,巧妙地算出了1-100之和。用do…while计算一下1-100之和是否是高斯所计算的结果5050。输出结果如下:
自学C语言-7_第9张图片
训练4:猴子摘桃 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上将第一天剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,发现只剩下一个桃子了。编写程序,求解猴子第一天共摘了多少个桃子。利用do…while计算一下,输出结果如下:
自学C语言-7_第10张图片

7.4 for语句

C语言中,使用for语句也可以控制一个循环,并且在每次循环时修改循环变量。在循环语句中,for语句的应用最为灵活,可以用于循环次数确定的情况,还可以用于循环次数不确定但给出了循环结束条件的情况。下面将对for语句的循环结构进行详细的介绍。

7.4.1 for循环语句

for语句的一般形式如下:

for(表达式1;表达式2;表达式3; )
{
      语句块(循环体)
 }

每条for语句包含3个用分号隔开的表达式。这3个表达式用一对圆括号括起来,其后紧跟着循环语句或语句块。当执行到for语句时,程序首先计算第1个表达式的值,接着计算第2个表达式的值 。如果第2个表达式的值为真,程序就执行循环体的内容,并计算第3个表达式;然后检验第2个表达式,执行循环;如此反复,直到第2个表达式的值为假,退出循环。
for语句的执行流程如图7.6所示。其执行过程如下。
(1)求解表达式1.
(2)求解表达式2,若其值为真,则执行for语句中的循环语句块,然后执行步骤(3); 若为假,则结束循环,转到步骤(5)。
(3)求解表达式3。
(4)回到步骤(2),继续执行。
(5)循环结束,执行for语句下面的一个语句。
自学C语言-7_第11张图片
for语句的形式也可以简单表示为:

for(循环变量赋初值;循环条件;循环变量改变)
{
		语句块
}

例如,实现一个循环输出操作:

for(i=1; i<100; i++)
{
		printf("the i is:%d", i);
}

在上面的代码中,表达式"i=1"用于对循环变量i进行赋值操作;表达式"i<100"用于判断循环条件是否为真,因为i的初值为1, 小于100,所以执行语句块中的内容;表达式"i++"用于在每次循环结束后,对循环变量进行自增操作。一次循环完成后,会再次判断表达式"i<100"的状态,为真时,继续执行语句块;为假时,循环结束,执行后面的程序代码。

误区警示:
使用for语句时,常常犯的错误是将for语句括号内的表达式用逗号隔开。例如:
for(i=1,i<100,i++){...}
这句代码就是错误的。切记,3个表达式之间应用分号隔开。

【例7.4】计算小球反弹高度 一个球从80米高度自由落下,每次落地后反弹的高度为原高度的一半,计算小球第6次反弹的高度。在本实例中,要求使用for循环语句计算小球反弹高度。具体代码如下:
自学C语言-7_第12张图片
(1)在程序代码中,定义变量high。在for语句中先对i赋值,然后判断i<6的条件是否为真,再根据判断的结果选择是否执行循环语句。
(2)在循环语句中计算每次反弹高度,即用当前高度除以2,再用printf输出当前反弹高度。
(3)在for语句外,用printf函数输出第6次反弹高度。
运行程序,显示效果如上图所示。
for循环的执行过程也可以使用while循环来表示:

表达式1;
while(表达式2{
		语句块
		表达式3;
}

上面就是使用while循环表示for循环的一般形式,其中的3个表达式对应着for语句括号中的3个表达式。下面通过一个实例来比较一下这两种操作。
【例7.5】计算n-100的累加和(for版)
自学C语言-7_第13张图片(1)定义变量n、n1表示用户输入的数字,变量sum表示计算的累加和,变量i用作for循环语句的循环变量。
(2)使用for语句执行循环操作在,括号中表达式"i=n"为循环变量进行赋值。表达式"i<=100"判断条件,条件为真,执行for循环体中的内容;条件为假,不进行循环操作。
(3)在for循环语句块中进行累加运算,然后执行for括号中第3个表达式"i++",对循环变量进行自增操作。循环操作后,将保存有计算结果的变量sum进行输出。
(4)在使用while语句之前要恢复变量的值。再次输入变量n1,就相当于for语句中第一个表达式的作用,为变量设置初值。然后在while括号中的表达式"n<=100"与for语句中第二个表达式相对应,最后n++自加操作与for语句括号中的最后一个表达式相对应。
运行程序,显示效果如上图所示。

7.4.2 for循环的变体

通过上面的学习可知,for语句的一般形式中有3个表达式。这3个表达式都是必不可少的,还是可以根据情况进行省略呢?接下来对不同情况进行讲解。

1.for语句中省略表达式1

表达式1的作用是对循环变量设置初值,如果省略了表达式1,就会影响对表达式2(即循环条件的判断。为保证程序正常运行,应在for语句之前先给循环变量赋值。例如:

for(;iNumber<10; iNumber++)
注意:
省略表达式1时,其后的分号不能省略,要格外注意。

【例7.6】求n! 在本实例中,根据用户输入的数据计算其阶乘,并且将for语句中第一个表达式省略,具体代码如下:
自学C语言-7_第14张图片
在代码中可以看到,在定义i变量时直接为其赋了初值,这样在使用for语句循环时就不用再为i赋初值,从而可以省略表达式1。运行程序,显示效果如上图所示。

2.for语句中省略表达式2

表达式2给出的是循环条件,如果表达式2省略,则无法判断循环条件,也即默认表达式2始终为真,因此循环将无终止地进行下去。例如:

for(iCount=1; ;iCount++)								/*缺少循环结束条件,陷入死循环*/
{
	sum=sum+iCount;
}

括号中,表达式“iCount=1"为赋值表达式,第二个表达式是空缺的,这样就相当于使用了如下 while语句:

iCount=1;
while(1)
{
	sum=sum+iCount;
	iCount++;
}

可见,for语句中表达式2是不能省略的。

3.for语句中省略表达式3

表达式3用于改变循环变量,可以省略,但此时程序设计人员应在循环体内增加类似功能的语句,以保证循环能正常结束,否则程序也会无终止地循环下去。例如:

for(iCount=1;iCount<50; )							/*for循环,省略表达式3*/
{
		sum=sum+iCount;
		iCount++;									/*此处语句可代替表达式3的功能*/
}

7.4.3 for循环中的逗号应用

在for语句中,表达式1和表达式3处除了可以使用简单的表达式,还可以使用逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。例如,在表达式1处为变量iCount和iSum设置初始值:

for(iSum=0,iCount=1; iCount<100;iCount++)
{
		iSum=iSum+iCount;
}

或者在表达式3处执行循环变量自加操作两次:

for(iCount=1;iCount<100;iCount++,iCount++)
{
		iSum=iSum+iCount;
}

也就是说,表达式1和表达式3都可以是逗号表达式。在逗号表达式内按照自左至右顺序求解,整个逗号表达式的值为其最右边的表达式的值。例如:

for(iCount=1;iCount<100; iCount++,iCount++)

就相当于:

for(iCount=1;iCount<100;iCount=iCount+2)

【例7.7】计算1-100所有偶数的累加结果 在本实例中,为变量赋初值的操作都放在for语句中,并且对循环变量进行两次自加操作,这样所求出的结果就是所有偶数的和。
自学C语言-7_第15张图片
在程序代码中,在for语句中对变量iSum、iCount进行初始化赋值。每次循环语句执行完后进行再次iCount++操作,最后将结果输出。运行程序,显示效果如上图所示。

误区警示:
浮点值的误差是不可避免的。如果在for循环的条件表达式中使用浮点值,那么将导致数值错误。因此,建议开发者不要使用浮点类型定义for语句的循环变量。

编程训练:
训练5:数学计算 用for语句求解1-3+5-7+9-…-99+10的结果,输出结果如下:

sum=51

自学C语言-7_第16张图片

训练6:模拟用公积金买房子 使用公积金买房,贷款的利息点比商业贷款低很多,能够为买房者省下很大一笔钱。模拟用公积金分期付款买房子,计算每个月需要还的月供金额,输出结果如下:

请输入你想要买房子的总价格:670000
房子的总价是:670000.0
首付370000元之后还剩300000.0元
将所剩的300000.0元进行分30年分期付款:
从我买房子开始,接下来的30年每个月需要还3500.12元钱

自学C语言-7_第17张图片

7.5 3种循环语句的比较

前面介绍了3种可以执行循环操作的语句。一般情况下,这3种循环之间可以相互替换。下面是对这3种循环语句在不同情况下的比较。
1.while和do…while循环只在while后面指定循环条件,在循环体中应包含使循环趋于结束的语句(如i++或者i=i+1等)。for循环可以在表达式3中包含使循环趋于结束的操作。因此,for语句的功能更强,凡用while循环能完成的功能,用for循环都能实现。
2.用while和do…while循环时,循环变量初始化的操作应在while和do…while语句之前完成;而for语句可以在表达式1中实现循环变量的初始化。
3.while循环、do…while循环和for循环都可以用break语句跳出循环,用continue语句结束本次循环(break和continue语句将在7.7节中进行介绍)。

7.6 循环嵌套

一个循环体内还可以包含一个或多个其他循环结构,这称之为循环的嵌套。如果嵌套的循环有多层,这就是多层循环。不管在什么语言中,关于循环嵌套的概念都是一样的。

7.6.1 循环嵌套的结构

while循环、do…while循环和for循环之间可以互相嵌套。例如,下面几种嵌套方式都是正确的。
1.while循环中嵌套while循环

while(表达式)
{
		语句块
		while(表达式)
		{
			语句块
		}
}

2.do…while循环中嵌套do…while循环

do
{
	语句块
	do
	{
		语句块
	}
	while(表达式);
}
while(表达式);

3.for循环中嵌套for循环

for(表达式;表达式;表达式)
{
	语句块
	for(表达式;表达式;表达式)
	{
		语句块
	}
}

4.do…while循环中嵌套while循环

do
{
		语句块
		while(表达式);
		{
			语句块
		}
}
while(表达式);

5.do…while循环中嵌套for循环

do
{
		语句块
		for(表达式;表达式;表达式)
		{
			语句块
		}
}
while(表达式);

类似的嵌套形式还有很多种,在此不一一列举。读者只要将每种循环结构的方式把握好,就可以正确写出一个循环嵌套。

7.6.2 循环嵌套实例

本节通过两个实例讲解,了解一下循环嵌套的使用方法。
【例7.8】百钱买百鸡
中国古典《算经》中有一道著名的百钱买鸡问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;一百钱买鸡,问翁母雏各几只。利用循环嵌套输出结果,具体实现代码如下:

自学C语言-7_第18张图片
在代码中可以看到,首先定义3个变量x,y,z,分别代表鸡翁、鸡母和鸡雏的数量。然后是两层for循环,外层循环计算出最多买多少只鸡翁,内层循环计算出最多买多少只鸡母,再用“100-鸡翁-鸡母”计算出可以买多少只鸡雏。最后用if语句判断这3种鸡的价格是否正好需要花100钱,如果为真,则用printf函数输出结果。运行效果如下上图所示。
【例7.9】打印乘法口诀表 本实例要求打印出乘法口诀表,每一项都是行和列的相乘算式。根据这个特点,使用循环嵌套将其显示。
自学C语言-7_第19张图片
在本实例中用到两次for循环,第一个for循环可看成乘法口诀表的行数,同时也是每行进行乘法运算的第一个因子;第二个for循环范围的确定建立在第一个for循环的基础上,即第二个for循环的最大取值是第一个for循环中变量的值。
运行程序,显示效果如上图所示。
编程训练:
训练7:打印杨辉三角 用for语句的嵌套循环结构编写程序,打印杨辉三角(输出前5行)。输出结果如下:

1
1    1
1    2    1
1    3    3    1
1    4    6    4    1

自学C语言-7_第20张图片
训练8:输出金字塔形状 利用嵌套循环输出金字塔形状。输出一个三角形要考虑3点:首先要控制输出三角形的行数,其次控制三角形的空白位置,最后将三角形输出显示。输出结果如下:
自学C语言-7_第21张图片

7.7 转移语句

转移语句包括goto语句、break语句和continue语句。通过这3种语句,程序的执行流程会发生一定的转移。下面对这3种语句的使用方式进行详细介绍。

7.7.1 goto语句

goto语句为无条件转移语句,可以使程序立即跳转到函数内部的任意一条可执行语句处。goto关键字后面带一个标识符,该标识符是同一个函数内某条语句的标号。标号可以出现在任何可执行语句的前面,并且以一个冒号“:”作为后缀。goto语句的一般形式如下:

goto标识符;

goto后的标识符就是要跳转的目标,当然这个标识符要在程序的其他位置给出,并且其标识符要位于函数内部。函数的内容将会在后面章节进行介绍,在此对其简单了解即可。例如:

goto Show;
printf("the message before ShowMessage");
Show:
	printf("ShowMessage");

在上述代码中,goto后的Show为跳转的标识符,第3行的“Show:”代码表示goto语句要跳转的位置,因此第2行的printf函数将不会被执行,而会执行第4行的printf函数。

注意:
跳转的方向可以向前,也可以向后;可以跳出一个循环,也可以跳入一个循环。

【例7.10】“下一步”还是“退出” 本实例要求在执行循环操作的过程中,当用户输入退出指令后,程序跳转到循环外部。
自学C语言-7_第22张图片
(1)程序运行时,外层for循环控制程序步骤,输出的循环步骤为1。信息提示输入数字,其中 0表示退出,99表示下一个步骤。
(2)在for循环中使用do…while语句判断用户输入,当条件为假时,循环结束并执行for循环的下一步。假如用户输入数字3,既不退出也不执行下一步骤,而是继续提醒输入序号。当输入数字为99时,跳转到下一步,显示提示信息“步骤号:2”。
(3)如果用户输入的是0,那么通过if语句判断为真,执行其中的goto语句进行跳转,其中exit为跳转的标识符。循环的外部使用“exit:”表示goto跳转的位置,输出“退出程序!”。
运行程序,显示效果如上图所示。
7.7.2 break语句
有时会遇到这样的情况,不管表达式检验的结果如何,都需要强行终止循环,这时可以使用break语句。break语句用于终止并跳出当前循环,然后继续执行后面的代码。break语句的一般形式如下:

break;

例如,在while循环语句中使用break语句:

while(1)
{
	printf("Break");
	break;
}

在上述代码中,while语句是一个条件永远为真的循环,但由于在其中使用了break语句,使得程序流程跳出循环。
break语句不能用于除循环语句和switch语句之外的任何其他语句中。另外,在多层循环嵌套的情况下,使用break语句只能跳出当前循环,这点一定要注意。

注意:
循环体中的break语句和switch...case分支结构中的break语句的作用是不同的。

【例7.11】寻找break 使用for语句执行循环输出10次的操作,在循环体中判断输出的次数。当循环变量为5次时,使用break语句跳出循环,终止循环输出操作。
自学C语言-7_第23张图片
变量iCount在for语句中被赋值为0,因为iCount<10,所以循环执行10次。在循环语句中使用if语句判断当前iCount的值。当iCount值为5时,if判断为真,使用break语句跳出循环。运行程序,显示效果如上图所示。

7.7.3 continue语句

	在某些情况下,程序需要返回到循环头部继续执行,而不是跳出循环,此时可以使用continue语句。continue语句的一般形式如下:
continue;

其作用就是结束本次循环,即跳过循环体中尚未执行的部分,直接执行下一次的循环操作。

注意:
continue语句和break语句的区别是:continue语句只结束本次循环,而不是终止整个循环的执行;break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。

【例7.12】寻找Continue 本实例与例7.11基本相似,区别在于将使用break语句的位置改写成了continue。因为continue语句只结束本次循环,所以剩下的循环还是会继续执行。
自学C语言-7_第24张图片
运行程序,显示效果如上图所示。可以看到在iCount等于5时,调用continue语句使得本次的循环结束。但是循环本身并没有结束,因此程序会继续执行。
编程训练:
训练9:健身房邂逅 假设一个正在跑步的男生邂逅了一个女生,这个男生跑到10分钟的时间就停止跑步,去询问女生要微信号,请用break语句来模拟此场景。输出结果如下:

看见美女了,我要与她约会1
已经跑了1分钟
已经跑了2分钟
已经跑了3分钟
已经跑了4分钟
已经跑了5分钟
已经跑了6分钟
已经跑了7分钟
已经跑了8分钟
已经跑了9分钟

自学C语言-7_第25张图片

训练10:自动售货机收费系统 自动售货机内有3种饮料,价格分别为3元、5元和7元。该售货机仅支持1元硬币支付。请编写该自动售货机的收费系统,输出结果如下:

正在售卖的饮料及其价格:132537元
请输入要购买的饮料编号:
2
本自动售卖机仅支持1元硬币支付,请投币:
1
少于5元!请继续投币......
2
请您投入1元硬币!
1
少于5元!请继续投币......
1
少于5元!请继续投币......
1
少于5元!请继续投币......
1
已支付全款!请拿走您的饮料。

自学C语言-7_第26张图片

7.8 实践与练习

综合练习1:手机分期付款 输入想购买的手机价格,减掉首付300元,剩下的钱分6个月分期付款。已知6个月分期付款时,每个月的利息是0.6%,计算每个月需要还多少钱。运行程序,输出结果如下:

请输入你想买的手机价格:2699
手机的总价格是:2699.0元。
首付300之后还剩2399.0元
将所剩2399.0元进行分6期付款:
从我买手机开始,接下来的6个月每月需要还414.4元钱

自学C语言-7_第27张图片

综合练习2:测测你的星座 星座有12个,每个月对应一个星座(这里做了简化,假设每个星座都对应一个自然月)。编写程序,输入(循环输入)出生月份,就可以知道是什么星座的,还可以知道幸运数字。运行结果如下:

请输入你的出生月份:
8
你的星座是狮子座
幸运数是1
请输入你的出生月份:
7
你的星座是巨蟹座
幸运数是2
请输入你的出生月份:

自学C语言-7_第28张图片
自学C语言-7_第29张图片

综合练习3:模拟“跳一跳”小游戏的加分块“跳一跳”是微信推出的小游戏。在游戏中,玩家停留在不同的加分块上,可以额外加分。例如在中心,能增加2分;在音乐盒子上,可以增加30分;在微信支付块上,可以增加10分。编写程序,模拟“跳一跳”小游戏的加分块,运行结果如下:

------------跳一跳------------
欢迎回来,请开始游戏------
请输入(1.中心   2:音乐块   3:微信支付块):
2
您选择的是音乐块。
您的分数为:30
请输入(1.中心  2:音乐块   3:微信支付块):
1
您选择的是中心。
您的分数为:32
请输入(1:中心  2:音乐块   3:微信支付块):
4
对不起,您输入的有误

自学C语言-7_第30张图片

综合练习4:查询银行名称 图7.16所示为各大银行的标志,编写程序,输入要查询的银行号码,输出对应的银行名称。运行结果如图7.17所示。

——————————————————————————————————————
1 对应银行为:ICBI
2 对应银行为:ABC
3 对应银行为:CCB
4 对应银行为:BOC
5 对应银行为:CMB
6 对应银行为:CEB
7 对应银行为:CMBC
8 对应银行为:CIB
9 对应银行为:BCM
-----------银行全称查询系统---------------
请输入要查询的数据:
5
5 对应银行为:招商银行
请输入要查询的数据:
1
1 对应银行为:中国工商银行
请输入要查询的数据:
9
9 对应银行为:中国交通银行
请输入要查询的数据:
0
您的输入有误,请重新输入......

自学C语言-7_第31张图片
自学C语言-7_第32张图片
自学C语言-7_第33张图片

综合练习5:猜数字游戏 编写一个猜数字的小游戏,随机生成一 个1-10(包括1和10)的数字作为基准数,玩家每次通过键盘输入一个数字,如果输入的数字和基准数相同,则成功过关,否则重新输入。运行结果如下:

请输入一个数字:
200
你猜大了,请重新输入:
150
你猜大了,请重新输入:
140
你猜小了,请重新输入:
145
你猜小了,请重新输入:
147
恭喜你,猜对了!!

自学C语言-7_第34张图片

综合练习6:客车承载量提醒 一辆客车只能承载25人,如果超过25人,司机就会拒绝载客。编写程序,提醒客车还能承载多少人。运行结果如下:

目前车上有的乘客数量是:20
还能承载5人,
还能承载4人,
还能承载3人,
还能承载2人,
还能承载1人,
座位已满,不能再承载了。

自学C语言-7_第35张图片

综合练习7:剧院卖票 某剧院发售演出门票,演播厅观众席有4行,每行有10个座位。为了不影响观众视角,在发售门票时,屏蔽提最左一列和最右一列的座位,其他座位均可售出。编写程序,模拟剧院卖票,显示效果如图7.18所示。

电影院可售票情况如下:
第1排	第2列	可售
第1排	第3列	可售
第1排	第4列	可售
第1排	第5列	可售
第1排	第6列	可售
第1排	第7列	可售
第1排	第8列	可售
第1排	第9列	可售
第2排	第2列	可售
第2排	第3列	可售
第2排	第4列	可售
第2排	第5列	可售
第2排	第6列	可售
第2排	第7列	可售
第2排	第8列	可售
第2排	第9列	可售
第3排	第2列	可售
第3排	第3列	可售
第3排	第4列	可售
第3排	第5列	可售
第3排	第6列	可售
第3排	第7列	可售
第3排	第8列	可售
第3排	第9列	可售
第4排	第2列	可售
第4排	第3列	可售
第4排	第4列	可售
第4排	第5列	可售
第4排	第6列	可售
第4排	第7列	可售
第4排	第8列	可售
第4排	第9列	可售

自学C语言-7_第36张图片
自学C语言-7_第37张图片
自学C语言-7_第38张图片

综合练习8:模拟10086查询功能 10086是中国移动的客户服务热线,用户可以拨打10086查询自己的手机号码的套餐情况。编写程序,查询当前话费余额、剩余流量、剩余通话时长等信息。运行结果如下:

——————————————10086查询功能————————————————————————————————————————
输入1,查询当前话费余额
输入2,查询当前剩余流量
输入3,查询当前剩余通话
输入0,退出自助查询系统!
请输入:
1
当前话费余额为:999元
请输入:
2
当前剩余流量为:5G
请输入:
3
当前剩余通话为:189分钟
请输入:
0
退出自助查询系统!

自学C语言-7_第39张图片

你可能感兴趣的:(c语言,开发语言)