C Primer Plus学习_20选择循环+嵌套循环+数组简介

回顾一下do while循环

关键字:do while

通用形式

do

    statement

while ( expression );

示例

do

    {scanf ("%d",&number);}

while ( number != 20 );

如何选择循环

首先要确定的是选择入口条件循环还是出口条件循环。通常入口条件循环用的比较多,有几个原因。

  1. 一般在执行循环之前测试条件比较好。
  2. 测试放在程序的开头,程序不可读性较高
  3. 在很多应用中,要求在一开始不满足测试条件时就直接跳过整个循环。

那么如果需要加入一个入口条件循环,该用哪一个?答案是随便用那个。

一般而言当循环涉及到初始化和更新变量时用for循环比较合适,其他情况下用while循环更好。对于下面这种条件,使用while循环就很合适:

    while( scanf ("%ld", &num) == 1))

对应涉及索引计数的循环,用for循环更合适:

    for( count = 1; count <= 100; count++)

嵌套循环

嵌套循环只在一个循环内包含另一个循环。嵌套循环常用于按行和列显示数据,也就是说,一个循环处理一行中的所有列,另一个循环处理一行中的所有行。

/*rows1.c -- 使用循环嵌套*/
#include <stdio.h>
#define ROWS 6
#define CHARS 10
int main (void)
{
	int rows;
	char ch;
	
	for(rows = 0; rows < ROWS; rows++)
	{
		for(ch = 'A'; ch < 'A'+10; ch++)
		{
			printf("%c", ch);
		 } 
		 printf("\n");
	}
	return 0;
}

结果会是这样:

ABCDEFGHIJ
ABCDEFGHIJ
ABCDEFGHIJ
ABCDEFGHIJ
ABCDEFGHIJ
ABCDEFGHIJ

程序中的第一个for循环被称为外层循环,第二个for循环自然叫内层循环。只要知道内层循环在每次外层循环迭代是都执行完所有循环。

上一个程序中两个循环都坐立同样的事情,还可以通过外层循环控制内层循环,每次完成不同的任务。

/*rows2.c -- 使用循环嵌套*/
#include <stdio.h>
#define ROWS 10
#define CHARS 10
int main (void)
{
	int rows;
	char ch;
	
	for(rows = 0; rows < ROWS; rows++)
	{
		for(ch = ('A' + rows); ch < ('A'+ CHARS); ch++)
		{
			printf("%c", ch);
		 } 
		 printf("\n");
	}
	return 0;
}

结果会是这样:

ABCDEFGHIJ
BCDEFGHIJ
CDEFGHIJ
DEFGHIJ
EFGHIJ
FGHIJ
GHIJ
HIJ
IJ
J

因为每次迭代都把rows的值与‘A’相加,所以变量ch每一次都会被赋予不同的值,理清顺序就能理解其中的原理。


数组简介

在许多程序中,数字很重要。数组可以作为一种储存多个相关项的便利方式。书本在后面的章节中会有详细的讲解,这里说到底只是简介,因为后面的程序会遇到一些数组,事先了解一下。

数组(array)是按顺序储存一系列类型相同的值,如10个char类型的字符或15个int类型的值或者其他的类型都可以。

float debts [ 20 ] ;

这个声明说明了在这是个名叫debts的float类型的数组,含有20个元素,依次储存在内存中的相邻位置。其中第一个元素是debts [ 0 ] 然后以此类推到      debts [ 19 ],虽然声明的时候是20,但这是从0开始的,一直到19。

可以给数组元素赋值,就像这样:debts[5] = 12.34 ; 但是假如把方括号中的下标值输错了,比如debts[55] = 12.34;编译器不会检查下标是否正确,但当运行程序的时候,这会导致数据被放在已经被其他数据占用的地方,可能会破坏程序结果或者直接异常中断。还有一点,下标必须是整数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值