《2022年用C语言编写简单程序 .pdf》由会员分享,可在线阅读,更多相关《2022年用C语言编写简单程序 .pdf(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1/11 实验二用 C 语言编写简单程序实验目的(1)认识 C 程序基本语法中的变量、常量、语句、控制结构和函数等概念(2)理解结构化程序设计的三种基本结构;知道程序设计的过程,并运用到程序设计中(3)理解 C 语言函数的作用,并运用主函数、输入/输出函数解决简单问题。实验范例1.画一个矩形要绘制一个如图2-1 所示的矩形,可以使用printf 语句输出5 行星号。图 2-1 一个简单的矩形【源程序 sample02_01.cpp】#include int main(void)printf(*n);printf(*n);printf(*n);printf(*n);printf(*n);retu
2、rn 0;程序中相同的printf 语句重复出现了5 次。试想,如果要输出20 行甚至更多行的矩形,不断重复地书写printf 语句是很不方便的。程序语言对重复操作提供了循环结构加以描述,引入一个计数的循环结构,程序可改写为:【源程序 sample02_02.cpp】#include int main(void)int i;for(i=1;i=5;i+)printf(*n);名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 11 页 -2/11 return 0;for 语句描述了一个计数的过程,计数器从开始计数(1),如果小于等于5,执行 printf 语句输出一行,然后计数器i
3、 增 1(i+)。这样计数器i 从 1 数到 5,printf 语句执行 5 次,输出5 行星号。算法可以描述为:循环 i 从 1 到 5,每次增1:输出一行星号for 语句的基本格式为:for(e1;e2;e3)循环语句计数器 i 是一个记录整数的变量,变量对应一个内存的存储空间,可以存放程序中需要的数据。在C 程序中使用变量,要先向系统申请内存空间,表示数据存放的数据是区分不同的数据类型的,在申请时要说明变量的数据类型,申请变量的语句称为变量定义,基本格式为:变量名序列;可以一次定义一个变量,也可以同时定义多个相同数据类型的变量。语句int i;定义了一个整型变量i 作为循环结构的计数控制
4、变量。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改变计数变量的
5、值,然后又回到e2,构成一个循环,循环条件不符合则循环结束。本例中 i 从 1 开始执行 printf 语句,执行一次,i 增 1,执行 5 次 printf 语句后,i 的值增 1 达到 6,不符合循环控制条件,循环结束,输出5 行星号。2.画一个任意大小的矩形编写一个程序通常是要解决一类问题,而不是特定问题,如何突破矩形的固定样式,绘制任意大小的矩形呢?矩形的样式是由行数和每行的字符个数确定的,这两个值的变化,会改变矩形的形状,如图2-2 所示。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 11 页 -3/11 图 2-2 任意矩形的输出这两个变化的值在程序中需要存放在变量
6、中,例如行数储存在变量n 中,每行的字符个数储存在变量m 中。每执行一次程序,由用户设定不同的行数和每行的字符个数的过程是一个数据的输入过程。C 语言提供了输入函数scanf 接受用户从键盘输入的数据存储到变量中。【源程序 sample02_03.cpp】#include int 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 语句
7、实现将用户输入数据8 存储到整型变量n 中。scanf 语句的基本格式:scanf(格式控制串,地址序列);格式控制串中的%d 是一个格式控制符,表示接受一个整型的数据,&是地址操作符,&n 表示变量n 的地址,这样scanf 函数就可以将用户输入的8 按整数编码,寻址变量n 的地址,将数据存储到变量n 的存储空间中。本例中的printf 语句不但要输出一个字符串,还要输出变量n 的值,printf 语句的基本格式与 scanf 有些类似:printf(格式控制串,值序列);格式控制串由普通字符和格式控制符构成。print rectangle with%d lines:n中%d表示一个整数,用
8、值序列中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 输出一个星号名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 11 页 -4/11 1.2 输入回车【源程序 sample02_04.cpp
9、】#include int 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 两条语句,就需要将这两条语句包含在一
10、对花括号中,成为复合语句,语法上视作一条语句。如果程序运行时输入了不符合要求数据,程序会有不正常的反应,如图所示,没有符合要求的图形可以输出。有时程序的不合理输入会引起运行错误,所以可以增加数据的合理性判断,处理可控制的不合理输入。图 2-4 不合理数据输入的输出示例图 2-5 数据合法性检查示例修改 sample02_04.cpp,输入 m、n 值后,判断m、n 是否小于0,小于 0 则输出出错提示后结束,否则表示输入合法,则输出矩形。C 语言提供了if 语句用于分支处理。【源程序 sample02_05.cpp】#include int main(void)int m,n;int i,j;
11、printf(input n:n);scanf(%d,&n);printf(input m:n);scanf(%d,&m);if(m0|n0)名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 11 页 -5/11 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 或
12、者 n 小于 0,|是逻辑或运算。如果条件表达式成立执行语句1,否则执行语句2。语句 1 和语句 2 称为分支语句,是一条语句,如果分支的处理语句多于一条,要使用复合语句,增加一对花括号。如果程序只有条件表达式成立时做处理,不成立时不做处理,else分支可以省略,例如本例的 if 分支还可以改写为:if(m0|n0)printf(输入的数据不能为负值!n);return-1;当条件表达式成立,进入if 分支,执行return 语句,main 函数结束,退出程序。3.画一个任意字符构成的矩形绘制的矩形还有一个可定制的因素是绘制矩形的符号,程序运行时由用户输入一个符号绘制矩形,如图所示。图 2-6
13、 任意字符构成的矩形设置一个变量存放输出的字符,存放字符的变量的数据类型为char。处理一个字符的输名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 11 页 -6/11 入输出也可以用scanf 和 printf 语句,字符类型数据对应的格式控制符为%c,但更方便的方法是使用字符函数,字符的输入语句可以使用getchar 函数,字符的输出语句可使用putchar 函数。【源程序 sample02_06.cpp】#include int main(void)int m,n;int i,j;char ch;printf(input char:);ch=getchar();printf
14、(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()可以接受可打印的字符,也可以接受不可打印的控制字符例如回车符,所以在安排输入字符的位置要注意。本例中如
15、果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);输出一个换行符。注意字符常量的表示方式是用一对
16、单引号标识,区别于用一对双引号标识的字符串:printf(n);。4.构造一个画矩形的工具绘制一个空心的矩形如图2-5 所示名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 11 页 -7/11 图 2-7 空心矩形空心矩形的绘制分为三步,先画一根实心线,再画 n-2 根空心线,最后再画一根实心线。m 个星号组成的实心线的算法在前面的程序中已经实现了,空心线的是有由前后两个星号、m-2 个空格和一个换行构成。【源程序 sample02_07.cpp】#include int main(void)int m,n;int i,j;printf(input n:n);scanf(%d,&
17、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
18、 从 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_
19、pointline 函数绘制 n 列的空心线。名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 11 页 -8/11 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 的含
20、义是构成线的星号的个数。一对花括号中是功能实现语句。函数定义的基本格式:(函数参数定义表)函数体 有了这一对工具函数,可以简化main 的实现算法。空心矩形的算法改写为:1.输入 m,n。2.输出一行 m 列实心行。3.输出 n-2 行空心行。循环 i 从 2 到 n-1,step 1:输出一行m 列空心行。4.输出一行 m 列实心行。完整程序代码如下:【源程序 sample02_08.cpp】#include void draw_line(int n);void draw_pointline(int n);int main(void)int m,n;int i;printf(input n:
21、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
22、);名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 11 页 -9/11 使用工具函数时,要先进行函数声明,main 函数定义前两行是函数draw_line和draw_pointline 的函数声明,函数声明的基本格式如下,即函数定义的首部加分号:(函数参数变量定义表);无返回值的函数的调用方法直接写函数语句,基本格式为:(参数值列表);在函数调用时,注意接口参数的传值,按接口定义参数变量的类型和个数,对参数变量赋值。draw_line 和 draw_pointline 都需要一个整数数据,获取每行星号的个数。draw_line(m)将 main 函数中变量m 的值传递给draw
23、_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)名师资料总结-精品资料欢迎下载-名师精心整
24、理-第 9 页,共 11 页 -10/11 图 2-10 直角三角形(2)1.输入 n 2.循环 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 完成矩形的绘制。任务五:改写改写 samp
25、le02_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 li
26、ne*/int i;for(i=1;istart;i+)/画 start-1 个空格printf();for(i=start;i=end;i+)/画*构成的线段printf(*);printf(n);/回车/画一条从start 到 end的两端星号中间空格的线段void point(int start,int end)int i;for(i=1;istart;i+)/画 start-1 个空格名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 11 页 -11/11 printf();if(start=end)printf(*n);else printf(*);for(i=start+1;iend;i+)/画*构成的线段printf();printf(*n);/回车 名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 11 页 -