




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验二 用C语言编写简单程序实验目的(1)认识C程序基本语法中的变量、常量、语句、控制结构和函数等概念(2)理解结构化程序设计的三种基本结构;知道程序设计的过程,并运用到程序设计中(3)理解C语言函数的作用,并运用主函数、输入/输出函数解决简单问题。实验范例1. 画一个矩形要绘制一个如图2-1所示的矩形,可以使用printf语句输出5行星号。图2-1 一个简单的矩形【源程序sample02_01.cpp】#includeint main(void) printf(*n);printf(*n);printf(*n);printf(*n);printf(*n);return 0;程序中相同的printf语句重复出现了5次。试想,如果要输出20行甚至更多行的矩形,不断重复地书写printf语句是很不方便的。程序语言对重复操作提供了循环结构加以描述,引入一个计数的循环结构,程序可改写为:【源程序sample02_02.cpp】#includeint main(void) int i; for(i=1;i=5;i+) printf(*n);return 0; for语句描述了一个计数的过程,计数器从开始计数(1),如果小于等于5,执行printf语句输出一行,然后计数器i增1(i+)。这样计数器i从1数到5,printf语句执行5次,输出5行星号。算法可以描述为:循环i从1到5,每次增1: 输出一行星号for语句的基本格式为:for(e1;e2;e3)循环语句计数器i是一个记录整数的变量,变量对应一个内存的存储空间,可以存放程序中需要的数据。在C程序中使用变量,要先向系统申请内存空间,表示数据存放的数据是区分不同的数据类型的,在申请时要说明变量的数据类型,申请变量的语句称为变量定义,基本格式为: 变量名序列;可以一次定义一个变量,也可以同时定义多个相同数据类型的变量。语句int i;定义了一个整型变量i作为循环结构的计数控制变量。i=1;是变量的赋值语句,将整数1赋给变量i。赋值语句的功能是将右边的值赋值给左边的变量,赋值语句的基本格式为:=表达式;整数1在程序中称为常量,常量是各种数据类型数据的字面形式。例如9.27是double类型数据常量。i=5和i+是两个表达式,i=5是关系表达式,执行关系运算=;i+是算术表达式,执行+运算,变量i自增1。for语句的一对圆括号内三个表达式e1、e2和e3分别表示计数变量的初值、终值条件和变化,执行顺序为:先执行e1获取计数变量初值1,执行e2,判断计数变量是否符合循环条件i=5,条件符合则执行循环体语句,接着执行e3改变计数变量的值,然后又回到e2,构成一个循环,循环条件不符合则循环结束。本例中i从1开始执行printf语句,执行一次,i增1,执行5次printf语句后, i的值增1达到6,不符合循环控制条件,循环结束,输出5行星号。2. 画一个任意大小的矩形编写一个程序通常是要解决一类问题,而不是特定问题,如何突破矩形的固定样式,绘制任意大小的矩形呢?矩形的样式是由行数和每行的字符个数确定的,这两个值的变化,会改变矩形的形状,如图2-2所示。图2-2 任意矩形的输出这两个变化的值在程序中需要存放在变量中,例如行数储存在变量n中,每行的字符个数储存在变量m中。每执行一次程序,由用户设定不同的行数和每行的字符个数的过程是一个数据的输入过程。C语言提供了输入函数scanf接受用户从键盘输入的数据存储到变量中。【源程序sample02_03.cpp】#includeint main(void) int n; printf(input n:n); scanf(%d,&n); printf(print rectangle with %d lines:n,n); for(int i=1;i=n;i+) printf(*n);return 0;运行示例:图2-3 n行矩形的输出程序中的scanf语句实现将用户输入数据8存储到整型变量n中。scanf语句的基本格式:scanf(格式控制串,地址序列);格式控制串中的%d是一个格式控制符,表示接受一个整型的数据,&是地址操作符,&n表示变量n的地址,这样scanf函数就可以将用户输入的8按整数编码,寻址变量n的地址,将数据存储到变量n的存储空间中。本例中的printf语句不但要输出一个字符串,还要输出变量n的值,printf语句的基本格式与scanf有些类似:printf(格式控制串,值序列);格式控制串由普通字符和格式控制符构成。print rectangle with %d lines:n中%d表示一个整数,用值序列中n变量的值8替换,其它字符是普通字符直接输出。读入了行数到变量n之后,只需修改for语句,将原来1-5行输出,修改为1-n行输出,判断终值的表达式改为:i=5。从此例我们看到了使用变量可以增强程序的通用性。继续思考实现绘制不同长度的一行星号,每行由m个星号和一个回车键构成。实现n行n列矩形的算法描述如下:循环i从1到n ,step 1: 1. 输出一行星号 1.1循环j从1到m,step 1: 1.1.1输出一个星号 1.2 输入回车 【源程序sample02_04.cpp】#includeint main(void) int m,n; int i,j; printf(input n:n); scanf(%d,&n); printf(input m:n); scanf(%d,&m); printf(print rectangle with %d lines:n,n); for(i=1;i=n;i+) for(j=1;j=m;j+) printf(*); printf(n); return 0;注意sample02_04.cpp的for语句中出现了一对花括号。一条循环语句只能控制一条循环体语句,此例中外层循环的循环体语句包括1.1和1.2两条语句,就需要将这两条语句包含在一对花括号中,成为复合语句,语法上视作一条语句。如果程序运行时输入了不符合要求数据,程序会有不正常的反应,如图所示,没有符合要求的图形可以输出。有时程序的不合理输入会引起运行错误,所以可以增加数据的合理性判断,处理可控制的不合理输入。图2-4 不合理数据输入的输出示例图2-5 数据合法性检查示例修改sample02_04.cpp,输入m、n值后,判断m、n是否小于0,小于0则输出出错提示后结束,否则表示输入合法,则输出矩形。C语言提供了if语句用于分支处理。【源程序sample02_05.cpp】#includeint main(void) int m,n; int i,j; printf(input n:n); scanf(%d,&n); printf(input m:n); scanf(%d,&m); if(m0 |n0) printf(输入的数据不能为负值!n); else printf(print rectangle with %d lines:n,n); for(i=1;i=n;i+) for(j=1;j=m;j+) printf(*); printf(n); return 0;if语句的基本格式为: if(条件表达式) 语句1 else 语句2本例中条件表达式m0 |n0表示m小于0或者n小于0,|是逻辑或运算。如果条件表达式成立执行语句1,否则执行语句2。语句1和语句2称为分支语句,是一条语句,如果分支的处理语句多于一条,要使用复合语句,增加一对花括号。如果程序只有条件表达式成立时做处理,不成立时不做处理,else分支可以省略,例如本例的if分支还可以改写为:if(m0 |n0) printf(输入的数据不能为负值!n); return -1;当条件表达式成立,进入if分支,执行return语句,main函数结束,退出程序。3. 画一个任意字符构成的矩形绘制的矩形还有一个可定制的因素是绘制矩形的符号,程序运行时由用户输入一个符号绘制矩形,如图所示。图2-6 任意字符构成的矩形设置一个变量存放输出的字符,存放字符的变量的数据类型为char。处理一个字符的输入输出也可以用scanf和printf语句,字符类型数据对应的格式控制符为%c,但更方便的方法是使用字符函数,字符的输入语句可以使用getchar函数,字符的输出语句可使用putchar函数。【源程序sample02_06.cpp】#includeint main(void) int m,n; int i,j; char ch; printf(input char:); ch=getchar(); printf(input n:); scanf(%d,&n); printf(input m:); scanf(%d,&m); printf(print rectangle with %d lines:n,n); for(i=1;i=n;i+) for(j=1;j=m;j+) putchar(ch); putchar(n); return 0;ch定义为一个字符型变量,调用getchar()函数会等待用户输入一个字符,返回值赋值给变量ch,getchar()函数的常用形式为: 变量=getchar();getchar()可以接受可打印的字符,也可以接受不可打印的控制字符例如回车符,所以在安排输入字符的位置要注意。本例中如果ch的输入安排在输入n、m之后,getchar接受的是输入m数据之后的回车键,所以要做以下处理:先使用一个getchar();语句接受回车键,再输入ch的值。 printf(input m:); scanf(%d,&m); getchar(); printf(input char:); ch=getchar();输出字符时使用了putchar函数,putchar函数的作用是输出一个字符,基本格式为:putchar(字符表达式)字符表达式可以是一个变量:putchar(ch); 将字符变量ch的值输出,也可以是一个常量:putchar(n);输出一个换行符。注意字符常量的表示方式是用一对单引号标识,区别于用一对双引号标识的字符串:printf(n);。4. 构造一个画矩形的工具绘制一个空心的矩形如图2-5所示图2-7 空心矩形空心矩形的绘制分为三步,先画一根实心线,再画n-2根空心线,最后再画一根实心线。m个星号组成的实心线的算法在前面的程序中已经实现了,空心线的是有由前后两个星号、m-2个空格和一个换行构成。【源程序sample02_07.cpp】#includeint main(void) int m,n; int i,j; printf(input n:n); scanf(%d,&n); printf(input m:n); scanf(%d,&m); printf(print rectangle with %d lines:n,n); for(j=1;j=m;j+) printf(*); printf(n); for(i=2;in;i+) printf(*); for(j=2;jm;j+) printf( ); printf(*); printf(n); for(j=1;j=m;j+) printf(*); printf(n);return 0;空心矩形的算法:1.输出一行实心行 1.1循环i从1到m,step 1: 1.1.1输出一个星号 1.2 换行2.输出n-2行空心行 2.1 循环i从2到n-1,step 1: 2.1.1 输出一个星号 2.1.2 输出m-2个空格 2.1.2.1循环j从2到m-1,step 1: 2.1.2.1.1 输出一个空格 2.1.3 输出一个星号 2.1.4 换行3.输出一行实心行3.1循环i从1到m,step 1: 1.1.1输出一个星号 3.2 换行C程序中通常将提供或创建一些工具函数,完成一类独立功能。例如putchar可以输出一个字符,用户只需告诉putchar函数需要输出的字符是什么,写在一对圆括号中的数据成为接口参数。在本例中,可以先创建两个工具函数,draw_line函数绘制n列的实心线,draw_pointline函数绘制n列的空心线。void draw_line(int n)int i;for(i=1;i=n;i+) printf(*); printf(n);void draw_pointline(int n)int i; printf(*); for(i=2;in;i+) printf( ); printf(*); printf(n);函数定义的方式与main函数的定义一样,void表示这个函数没有返回值,故没有return语句。原括号中是参数,int n表示调用函数要给出一个整数参数值,这里n的含义是构成线的星号的个数。一对花括号中是功能实现语句。函数定义的基本格式: (函数参数定义表)函数体有了这一对工具函数,可以简化main的实现算法。空心矩形的算法改写为:1.输入m,n。2.输出一行m列实心行。3.输出n-2行空心行。循环i从2到n-1,step 1: 输出一行m列空心行。4. 输出一行m列实心行。完整程序代码如下:【源程序sample02_08.cpp】#includevoid draw_line(int n);void draw_pointline(int n);int main(void) int m,n; int i; printf(input n:n); scanf(%d,&n); printf(input m:n); scanf(%d,&m); printf(print rectangle with %d lines:n,n); draw_line(m); for(i=2;in;i+) draw_pointline(m); draw_line(m);return 0;void draw_line(int n)int i;for(i=1;i=n;i+) printf(*); printf(n);void draw_pointline(int n)int i; printf(*); for(i=2;in;i+) printf( ); printf(*); printf(n);使用工具函数时,要先进行函数声明,main函数定义前两行是函数draw_line和draw_pointline的函数声明,函数声明的基本格式如下,即函数定义的首部加分号: (函数参数变量定义表);无返回值的函数的调用方法直接写函数语句,基本格式为:(参数值列表);在函数调用时,注意接口参数的传值,按接口定义参数变量的类型和个数,对参数变量赋值。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-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)编写
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 卫生管理考试的评估标准试题及答案探讨
- 激光技术工程师的考前冲刺试题及答案
- 药物发酵工艺研究试题及答案
- 模特职业测试题及答案
- 药物使用风险评估知识试题及答案
- 电气检测面试题及答案
- 成果分享卫生管理证书考试试题及答案
- 系统架构与数据架构的关系探讨试题及答案
- 激光测量技术的研究进展试题及答案
- 激光设备性能指标试题及答案
- 入团志愿书表格(空白)
- 秘密花园读书交流会(课堂PPT)
- 安装工程开工报告表格
- 浙江省公安民警心理测验考试题目(含答案)
- 森林防火安全责任书(施工队用)
- Duncans 新复极差检验SSR值表
- 自卸车液压系统安装手册
- 商务部商业保理企业管理办法
- 机械加工工艺过程卡片及工序卡(共3页)
- 初中英语语法-介词、连词.ppt
- 【精选】配电室安全管理制度精选
评论
0/150
提交评论