用c语言编写简单程序Word文件下载.docx
《用c语言编写简单程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《用c语言编写简单程序Word文件下载.docx(15页珍藏版)》请在冰点文库上搜索。
i++)
printf("
}
for语句描绘了一个计数的过程,计数器i从1开始计数〔i=1〕,假设i小于等于5,执行printf语句输出一行,然后计数器i增1〔i++〕。
这样计数器i从1数到5,printf语句执行5次,输出5行星号。
算法可以描绘为:
循环i从1到5,每次增1:
输出一行星号
for语句的根本格式为:
for(e1;
e2;
e3)
循环语句
计数器i是一个记录整数的变量,变量对应一个内存的存储空间,可以存放程序中需要的数据。
在C程序中使用变量,要先向系统申请内存空间,表示数据存放的数据是区分不同的数据类型的,在申请时要说明变量的数据类型,申请变量的语句称为变量定义,根本格式为:
<
数据类型>
变量名序列;
可以一次定义一个变量,也可以同时定义多个一样数据类型的变量。
语句inti;
定义了一个整型变量i作为循环构造的计数控制变量。
i=1;
是变量的赋值语句,将整数1赋给变量i。
赋值语句的功能是将右边的值赋值给左边的变量,赋值语句的根本格式为:
<
变量>
=表达式;
整数1在程序中称为常量,常量是各种数据类型数据的字面形式。
例如9.27是double类型数据常量。
=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】
{intn;
printf("
inputn:
\n"
scanf("
%d"
&
n);
printrectanglewith%dlines:
n);
for(inti=1;
=n;
运行例如:
图2-3n行矩形的输出
程序中的scanf语句实现将用户输入数据8存储到整型变量n中。
scanf语句的根本格式:
scanf(格式控制串,地址序列);
格式控制串中的%d是一个格式控制符,表示承受一个整型的数据,&
是地址操作符,&
n表示变量n的地址,这样scanf函数就可以将用户输入的8按整数编码,寻址变量n的地址,将数据存储到变量n的存储空间中。
本例中的printf语句不但要输出一个字符串,还要输出变量n的值,printf语句的根本格式与scanf有些类似:
printf(格式控制串,值序列);
格式控制串由普通字符和格式控制符构成。
"
中‘%d’表示一个整数,用值序列中n变量的值8交换,其它字符是普通字符直接输出。
读入了行数到变量n之后,只需修改for语句,将原来1-5行输出,修改为1-n行输出,判断终值的表达式改为:
=5。
从此例我们看到了使用变量可以增强程序的通用性。
继续考虑实现绘制不同长度的一行星号,每行由m个星号和一个回车键构成。
实现n行n列矩形的算法描绘如下:
循环i从1到n,step1:
1.输出一行星号
1.1循环j从1到m,step1:
1.2输入回车
{intm,n;
inti,j;
inputm:
m);
for(i=1;
{for(j=1;
j<
=m;
j++)
*"
}
注意
假设程序运行时输入了不符合要求数据,程序会有不正常的反响,如以下图,没有符合要求的图形可以输出。
有时程序的不合理输入会引起运行错误,所以可以增加数据的合理性判断,处理可控制的不合理输入。
图2-4不合理数据输入的输出例如
图2-5数据合法性检查例如
修改sample02_04.cpp,输入m、n值后,判断m、n是否小于0,小于0那么输出出错提示后完毕,否那么表示输入合法,那么输出矩形。
C语言提供了if语句用于分支处理。
if(m<
0||n<
0)
{printf("
输入的数据不能为负值!
else
{
if语句的根本格式为:
if(条件表达式)
语句1
语句2
本例中条件表达式m<
0表示m小于0或者n小于0,||是逻辑或运算。
假设条件表达式成立执行语句1,否那么执行语句2。
语句1和语句2称为分支语句,是一条语句,假设分支的处理语句多于一条,要使用复合语句,增加一对花括号。
假设程序只有条件表达式成立时做处理,不成立时不做处理,else分支可以省略,例如本例的if分支还可以改写为:
if(m<
return-1;
当条件表达式成立,进入if分支,执行return语句,main函数完毕,退出程序。
3.画一个任意字符构成的矩形
绘制的矩形还有一个可定制的因素是绘制矩形的符号,程序运行时由用户输入一个符号绘制矩形,如以下图。
图2-6任意字符构成的矩形
设置一个变量存放输出的字符,存放字符的变量的数据类型为char。
处理一个字符的输入输出也可以用scanf和printf语句,字符类型数据对应的格式控制符为‘%c’,但更方便的方法是使用字符函数,字符的输入语句可以使用getchar函数,字符的输出语句可使用putchar函数。
【源程序sample02_06.cpp】
charch;
inputchar:
ch=getchar();
putchar(ch);
putchar('
\n'
}
ch定义为一个字符型变量,调用getchar()函数会等待用户输入一个字符,返回值赋值给变量ch,getchar()函数的常用形式为:
变量=getchar();
getchar()可以承受可打印的字符,也可以承受不可打印的控制字符例如回车符,所以在安排输入字符的位置要注意。
本例中假设ch的输入安排在输入n、m之后,getchar承受的是输入m数据之后的回车键,所以要做以下处理:
先使用一个getchar();
语句承受回车键,再输入ch的值。
getchar();
输出字符时使用了putchar函数,putchar函数的作用是输出一个字符,根本格式为:
putchar(字符表达式)
字符表达式可以是一个变量:
putchar(ch);
将字符变量ch的值输出,也可以是一个常量:
putchar('
输出一个换行符。
注意字符常量的表示方式是用一对单引号标识,区别于用一对双引号标识的字符串:
。
4.构造一个画矩形的工具
绘制一个空心的矩形如图2-5所示
图2-7空心矩形
空心矩形的绘制分为三步,先画一根实心线,再画n-2根空心线,最后再画一根实心线。
m个星号组成的实心线的算法在前面的程序中已经实现了,空心线的是有由前后两个星号、m-2个空格和一个换行构成。
【源程序sample02_07.cpp】
for(j=1;
for(i=2;
n;
for(j=2;
m;
"
空心矩形的算法:
1.输出一行实心行
1.1循环i从1到m,step1:
1.2换行
2.输出n-2行空心行
2.1循环i从2到n-1,step1:
2.1.1输出一个星号
2.1.2输出m-2个空格
2.1.2.1循环j从2到m-1,step1:
2.1.2.1.1输出一个空格
2.1.3输出一个星号
2.1.4换行
3.输出一行实心行
3.1循环i从1到m,step1:
3.2换行
C程序中通常将提供或创立一些工具函数,完成一类独立功能。
例如putchar可以输出一个字符,用户只需告诉putchar函数需要输出的字符是什么,写在一对圆括号中的数据成为接口参数。
在本例中,可以先创立两个工具函数,draw_line函数绘制n列的实心线,draw_pointline函数绘制n列的空心线。
voiddraw_line(intn)
{inti;
voiddraw_pointline(intn)
函数定义的方式与main函数的定义一样,void表示这个函数没有返回值,故没有return语句。
原括号中是参数,intn表示调用函数要给出一个整数参数值,这里n的含义是构成线的星号的个数。
一对花括号中是功能实现语句。
函数定义的根本格式:
函数类型>
函数名>
([函数参数定义表])
{
函数体
有了这一对工具函数,可以简化main的实现算法。
空心矩形的算法改写为:
1.输入m,n。
2.输出一行m列实心行。
3.输出n-2行空心行。
循环i从2到n-1,step1:
输出一行m列空心行。
4.输出一行m列实心行。
完好程序代码如下:
【源程序sample02_08.cpp】
voiddraw_line(intn);
voiddraw_pointline(intn);
inti;
draw_line(m);
draw_pointline(m);
draw_line(m);
使用工具函数时,要先进展函数声明,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-8n行n列的直角三角形
任务二:
改错〔error02_02.cpp〕
翻开程序文件error02_02.cpp,程序功能绘制一个n行n的等腰三角形,程序中有语法错误和逻辑错误,请改正错误使程序正确运行。
图2-9n行等腰三角形
任务三:
根据给出算法写程序
编写程序输出如以下图所示n行三角形。
(ex02_01.cpp)
图2-10直角三角形〔2〕
2.循环i从1到n,step1:
2.1循环j从1到i-1,step1:
输出一个空格
i到n,step1:
输出一个星号
任务四:
改写
改写sample02_08.cpp,要求如下(ex02_02.cpp)
〔1〕编写一个函数drawRectangle,作用是调用函数draw_line和draw_pointline画一个n行m列的矩形。
〔2〕改写main函数,调用drawRectangle完成矩形的绘制。
任务五:
改写sample02_08.cpp,绘制一个任意字符构成的空心矩形,如图2-7,要求:
(ex02_03.cpp)
〔1〕改写函数draw_line和draw_pointline,增加一个字符型参数变量表示输出字符,改写输出语句,按接口字符参数绘制线。
〔2〕按修改好的draw_line和draw_pointline函数定义修改函数声明,和main函数的实现。
任务六编写程序(ex02_04.cpp)
运用工具函数自行设计绘制一个图案,可以自己按需创立新的工具函数。
//画一条从start开始到end完毕的由*组成的线段
voidline(intstart,intend)/*drawaline*/
{inti;
start;
i++)//画start-1个空格
for(i=start;
=end;
i++)//画*构成的线段
//回车
}
//画一条从start到end的两端星号中间空格的线段
voidpoint(intstart,intend)
if(start==end)printf("
*\n"
else{
for(i=start+1;
end;
);