1、i+) printf( for语句描述了一个计数的过程,计数器从开始计数(1),如果小于等于5,执行printf语句输出一行,然后计数器i增1(i+)。这样计数器i从1数到5,printf语句执行5次,输出5行星号。算法可以描述为:循环i从1到5,每次增1: 输出一行星号for语句的基本格式为:for(e1;e2;e3)循环语句计数器i是一个记录整数的变量,变量对应一个内存的存储空间,可以存放程序中需要的数据。在C程序中使用变量,要先向系统申请内存空间,表示数据存放的数据是区分不同的数据类型的,在申请时要说明变量的数据类型,申请变量的语句称为变量定义,基本格式为: 变量名序列;可以一次定义一个
2、变量,也可以同时定义多个相同数据类型的变量。语句int i;定义了一个整型变量i作为循环结构的计数控制变量。i=1;是变量的赋值语句,将整数1赋给变量i。赋值语句的功能是将右边的值赋值给左边的变量,赋值语句的基本格式为:=表达式;整数1在程序中称为常量,常量是各种数据类型数据的字面形式。例如9.27是double类型数据常量。=5和i+是两个表达式,i=5是关系表达式,执行关系运算=;i+是算术表达式,执行+运算,变量i自增1。for语句的一对圆括号内三个表达式e1、e2和e3分别表示计数变量的初值、终值条件和变化,执行顺序为:先执行e1获取计数变量初值1,执行e2,判断计数变量是否符合循环条
3、件i=5,条件符合则执行循环体语句,接着执行e3改变计数变量的值,然后又回到e2,构成一个循环,循环条件不符合则循环结束。本例中i从1开始执行printf语句,执行一次,i增1,执行5次printf语句后, i的值增1达到6,不符合循环控制条件,循环结束,输出5行星号。2. 画一个任意大小的矩形编写一个程序通常是要解决一类问题,而不是特定问题,如何突破矩形的固定样式,绘制任意大小的矩形呢?矩形的样式是由行数和每行的字符个数确定的,这两个值的变化,会改变矩形的形状,如图2-2所示。图2-2 任意矩形的输出这两个变化的值在程序中需要存放在变量中,例如行数储存在变量n中,每行的字符个数储存在变量m中
4、。每执行一次程序,由用户设定不同的行数和每行的字符个数的过程是一个数据的输入过程。C语言提供了输入函数scanf接受用户从键盘输入的数据存储到变量中。【源程序sample02_03.cpp】 int n; printf(input n:n scanf(%d,&n);print rectangle with %d lines:,n); for(int i=1;=n;运行示例:图2-3 n行矩形的输出程序中的scanf语句实现将用户输入数据8存储到整型变量n中。scanf语句的基本格式:scanf(格式控制串,地址序列);格式控制串中的%d是一个格式控制符,表示接受一个整型的数据,&是地址操作符,
5、&n表示变量n的地址,这样scanf函数就可以将用户输入的8按整数编码,寻址变量n的地址,将数据存储到变量n的存储空间中。本例中的printf语句不但要输出一个字符串,还要输出变量n的值,printf语句的基本格式与scanf有些类似:printf(格式控制串,值序列);格式控制串由普通字符和格式控制符构成。中%d表示一个整数,用值序列中n变量的值8替换,其它字符是普通字符直接输出。读入了行数到变量n之后,只需修改for语句,将原来1-5行输出,修改为1-n行输出,判断终值的表达式改为:=5。从此例我们看到了使用变量可以增强程序的通用性。继续思考实现绘制不同长度的一行星号,每行由m个星号和一个
6、回车键构成。实现n行n列矩形的算法描述如下:循环i从1到n ,step 1: 1. 输出一行星号 1.1循环j从1到m,step 1: 1.1.1输出一个星号 1.2 输入回车 【源程序sample02_04.cpp】 int m,n; int i,j;input m:m); for(i=1; for(j=1;j=m;j+)* 注意sample02_04.cpp的for语句中出现了一对花括号。一条循环语句只能控制一条循环体语句,此例中外层循环的循环体语句包括1.1和1.2两条语句,就需要将这两条语句包含在一对花括号中,成为复合语句,语法上视作一条语句。如果程序运行时输入了不符合要求数据,程序会
7、有不正常的反应,如图所示,没有符合要求的图形可以输出。有时程序的不合理输入会引起运行错误,所以可以增加数据的合理性判断,处理可控制的不合理输入。图2-4 不合理数据输入的输出示例图2-5 数据合法性检查示例修改sample02_04.cpp,输入m、n值后,判断m、n是否小于0,小于0则输出出错提示后结束,否则表示输入合法,则输出矩形。C语言提供了if语句用于分支处理。【源程序sample02_05.cpp】 if(m0 |n0) printf(输入的数据不能为负值! else if语句的基本格式为: if(条件表达式) 语句1 语句2本例中条件表达式m0表示m小于0或者n小于0,|是逻辑或运
8、算。如果条件表达式成立执行语句1,否则执行语句2。语句1和语句2称为分支语句,是一条语句,如果分支的处理语句多于一条,要使用复合语句,增加一对花括号。如果程序只有条件表达式成立时做处理,不成立时不做处理,else分支可以省略,例如本例的if分支还可以改写为:if(m函数名(函数参数定义表)函数体有了这一对工具函数,可以简化main的实现算法。空心矩形的算法改写为:1.输入m,n。2.输出一行m列实心行。3.输出n-2行空心行。循环i从2到n-1,step 1: 输出一行m列空心行。4. 输出一行m列实心行。完整程序代码如下:【源程序sample02_08.cpp】void draw_line(
9、int n);void draw_pointline(int n); int i;XX文库 - 让每个人平等地提升自我 scanf(XX文库 - 让每个人平等地提升自我 printf( draw_line(m); draw_pointline(m); draw_line(m);使用工具函数时,要先进行函数声明,main函数定义前两行是函数draw_line和draw_pointline的函数声明,函数声明的基本格式如下,即函数定义的首部加分号:(函数参数变量定义表);无返回值的函数的调用方法直接写函数语句,基本格式为:(参数值列表);在函数调用时,注意接口参数的传值,按接口定义参数变量的类型和
10、个数,对参数变量赋值。draw_line和draw_pointline都需要一个整数数据,获取每行星号的个数。draw_line(m)将main函数中变量m的值传递给draw_line函数的参数变量n。实验内容任务一:改错(error02_01.cpp)打开程序文件error02_01.cpp,程序功能绘制一个n行n列的直角三角形,程序中有语法错误和逻辑错误,请改正错误使程序正确运行。图2-8 n行n列的直角三角形任务二:改错(error02_02.cpp)打开程序文件error02_02.cpp,程序功能绘制一个n行n的等腰三角形,程序中有语法错误和逻辑错误,请改正错误使程序正确运行。图2-
11、9 n行等腰三角形任务三:根据给出算法写程序编写程序输出如下图所示n行三角形。(ex02_01.cpp)图2-10 直角三角形(2)1.输入n2.循环i从1到n,step 1: 2.1循环j从1到i-1,step 1: 输出一个空格 2.2循环j从i到n,step 1: 输出一个星号 2.3输出换行任务四:改写改写sample02_08.cpp,要求如下(ex02_02.cpp)(1)编写一个函数drawRectangle,作用是调用函数draw_line和draw_pointline 画一个n行m列的矩形。(2)改写main函数,调用drawRectangle完成矩形的绘制。任务五:改写sa
12、mple02_08.cpp,绘制一个任意字符构成的空心矩形,如图2-7,要求:(ex02_03.cpp)(1)改写函数draw_line和draw_pointline,增加一个字符型参数变量表示输出字符,改写输出语句,按接口字符参数绘制线。(2)按修改好的draw_line和draw_pointline函数定义修改函数声明,和main函数的实现。任务六 编写程序(ex02_04.cpp)运用工具函数自行设计绘制一个图案,可以自己按需创建新的工具函数。 /画一条从start开始到end结束的由*组成的线段 void line(int start,int end ) /*draw a line*/ int i;start;i+) /画start-1个空格 for(i=start;=end;i+)/画*构成的线段 /回车 /画一条从start到end的两端星号中间空格的线段 void point(int start,int end ) if(start=end)printf(*n else for(i=start+1;end;) ;