ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:30.73KB ,
资源ID:26374988      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26374988.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言图形输出习题.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言图形输出习题.docx

1、C语言图形输出习题 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998C语言图形输出习题【】输入n值,输出如图所示矩形。【】输入n值,输出如图所示平行四边形。【】输入n值,输出如图所示高为n的等腰三角形。【】输入n值,输出如图所示高为n的等腰三角形。【】输入n值,输出如图所示高和上底均为n的等腰梯形。【】输入n值,输出如图所示高和上底均为n的等腰空心梯形。【】输入n值,输出如图所示边长为n的空心正六边型。【】输入n值,输出如图所示图形。【】输入n值,输出如图所示图形。【】输入n值,输出如图所示图形。【】输入n值,输出如图所示图形。【】输入

2、n值,输出如图所示图形。【】输入n值,输出如图所示图形。(例为n=6时)【】编写程序,输出如图所示sin(x)函数0到2的图形。【】编写程序,在屏幕上输出一个由*号围成的空心圆。【】编写程序,在屏幕上绘制如图余弦曲线和直线。若屏幕的横向为x轴,纵向为y轴,在屏幕上显示0360度的cos(x)曲线与直线x=f(y)=45*(y-1)+31的迭加图形。其中cos图形用*表示,f(y)用+表示,在两个图形的交点处则用f(y)图形的符号。【】编写程序,输出如图所示高度为n的图形。【】编写程序,输出如图所示高度为n的图形。【】输入n值,输出如图所示图形。【】输入n值,输出如图所示的nn(n10)阶螺旋方

3、阵。123456789图=5时的螺旋方阵【】输入n值,输出如图所示回型方阵。【】输出如图所示的数字金字塔【】输入n值,输出如图所示图形。【】输入顶行字符和图形的高,输出如图所示图形。【】输入首字符和高后,输出如图所示回型方阵。AAAAAABBBAABCBAABBBAAAAAA图首字符为A、高为5的方阵【】输入中心字符和高后,输出如图所示回型方阵。XXXXXXYYYXXYZYXXYYYYXXXXX图中心字符为Z、高为5的方阵【】编写程序,输出如图所示上三角形式的乘法九九表。【】编写程序,输出如图所示下三角乘法九九表。【】分析:打印此图形用两重循环实现。图形要重复n行,故采用循环结构实现循环n次,

4、循环体内部打印一行*号,把上述思路表示为:for(i=1;i=n;i+)打印一行*号;每行有n个*号,再采用循环结构实现n次循环,循环内部用格式输出语句打印一个*号,即:for(j=1;j=n;j+)printf(*);按照上述思路,实现打印矩形。参考答案:main()inti,j,n;printf(nPleaseEntern:);scanf(%d,&n);for(i=1;i=n;i+)for(j=1;j=n;j+)printf(*);printf(n);【】分析:此图形和上题的区别在于在每一行先要打印空格,然后再打印n个*号,在上题第一层循环体内打印*号的循环前面增加一个循环打印空格。每行空

5、格的个数是逐行减少的,由于第一层循环的控制变量i是逐行增1,所以用一个固定值的数减去i就可实现对空格个数的控制,在此题中固定值可使用变量n。参考答案:main()inti,j,n;printf(nPleaseEntern:);scanf(%d,&n);for(i=1;i=n;i+)for(j=1;j=n-i;j+)printf();for(j=1;j=n;j+)printf(*);printf(n);【】分析:此题和上题的区别在于每行*的数量逐行减少,可以使用上题控制空格个数的思路来控制*号的个数,请注意每行*的个数都是奇数。参考答案:main()inti,j,n;printf(nPlease

6、Entern:);scanf(%d,&n);for(i=1;i=n;i+)for(j=1;j=n-i;j+)printf();for(j=1;j=2*i-1;j+)printf(*);printf(n);【】分析:此题图形是第3题图形的垂直反转,在编程上我们可以变换一个思路。对于图形中的第i行(1in),共需要输出2n-i个字符,其中前面的i-1个字符为空格,后面的字符为*号。按照这一思路可以编写出如下程序。参考答案:main()inti,j,n;printf(nPleaseEntern:);scanf(%d,&n);for(i=1;i=n;i+)/*重复输出图形的n行*/for(j=1;j=

7、2*n-i;j+)/*重复输出图形一行中的每个字符*/if(j=i-1)printf();/*输出前面的空格*/elseprintf(*);/*输出后面的*号*/printf(n);【】分析:此题和第3题的区别仅是每行的*个数增加n-1个。参考答案:main()inti,j,n;printf(nPleaseEntern:);scanf(%d,&n);for(i=1;i=n;i+)for(j=1;j=n-i;j+)printf();for(j=1;j=2*i-1+(n-1);j+)printf(*);printf(n);【】分析:对于空心图形,我们可以在上题的基础上,对于打印*号的循环进行修改,

8、仅在循环开始值(j=1)和循环结束值(j=2*(i-1)+n)时打印*号,其它位置都打印空格。另一种思路是将每行打印的空格和*的两个循环合为一体考虑,在判断出需要打印*的两个位置及第一行和最后一行相应位置外,其余位置都打印空格。参考答案:main()inti,j,n;printf(nPleaseEntern:);scanf(%d,&n);for(i=1;i=n;i+)for(j=1;jn-i+1&(i=1|i=n)printf(*);elseprintf();printf(*n);【】分析:此图形可以理解为两个空心梯形反向连接而成,因此可以利用上题的思路进行输出。参考答案:main()inti

9、,j,n;printf(nPleaseEntern:);scanf(%d,&n);for(i=1;i=n;i+)/*输出图形的上半部分(含中心行)*/for(j=1;j=2*n-i-1;j+)if(j=i)printf(*);elseprintf();printf(*n);for(i=1;in;i+)/*输出图形的下半部分(不含中心行)*/for(j=1;j=n+i;j+)if(j=n-i)printf(*);elseprintf();printf(*n);【】分析:此题与上题的区别在于打印*号的位置不同,编程时要找出应打印*号的位置和两个循环变量i、j以及行数n的关系。参考答案:main()

10、inti,j,n;printf(nPleaseEntern:);scanf(%d,&n);for(i=1;i=n;i+)/*输出图形的上半部分(含中心行)*/for(j=1;jn-i+1&i=1)printf(*);elseprintf();printf(*n);for(i=1;in;i+)/*输出图形的下半部分(不含中心行)*/for(j=1;ji+1&i=n-1)printf(*);elseprintf();printf(*n);【】参考答案:main()inti,j,n;printf(nPleaseEntern:);scanf(%d,&n);for(i=1;i=n;i+)for(j=1;

11、j=n;j+)if(j=n-i+1|i=1|i=n)printf(*);elseprintf();printf(n);【】参考答案:main()inti,j,n;printf(nPleaseEntern:);scanf(%d,&n);for(i=1;i=n;i+)/*输出图形的上半部分(含中心行)*/for(j=1;j=n-i;j+)if(j=1|j=n-i+1)printf(*);elseprintf();printf(n);for(i=1;in;i+)/*输出图形的下半部分(不含中心行)*/for(j=1;j=i+1;j+)if(j=1|j=i+1)printf(*);elseprintf

12、();printf(n);【】参考答案:main()inti,j,n;printf(nPleaseEntern:);scanf(%d,&n);for(i=1;i=n;i+)for(j=1;j=n;j+)if(j=1|j=i|j=n)printf(*);elseprintf();printf(n);【】参考答案:main()inti,j,n;printf(nPleaseEntern:);scanf(%d,&n);for(i=1;i=n;i+)for(j=1;jn-i)printf(*);elseprintf();printf(n);for(i=1;in;i+)for(j=1;ji)printf(

13、*);elseprintf();printf(n);【】参考答案:main()inti,j,n;printf(nPleaseEntern:);scanf(%d,&n);for(i=1;i=n;i+)for(j=1;j=n+i-2;j+)if(j=n-i+1)printf(*);elseprintf();printf(*n);【】分析:首先对图形进行设计,坐标的X轴和Y轴分别对应屏幕的列和行,一个正弦函数的周期为0360度,我们把一个步长定义为10度,打印时每换一行等于函数的自变量增加10度;屏幕的列宽为80,函数值为0对应屏幕的第40列,sin(x)的值在-11,变换成列数为以0为中心的-30

14、30,对应屏幕上第1070列。设计程序时,控制换行的自变量i乘以10得到正弦函数的X值,调用库函数sin()求出函数值再乘以30输出的列宽,因为我们以屏幕的第40列为0点,故再加上40得到应在屏幕上显示的点。参考答案:#includemain()doublex;inty,i,yy;for(i=1;i80;i+)/*打印图形的第一行*/if(i=40)printf(*);/*i控制打印的列位置*/elseprintf(-);printf(n);for(x=;xy40:y;/*下一行要打印的字符总数*/for(i=1;i=yy;i+)/*控制输出图形中的一行*/if(i=y)printf(*);/

15、*i控制打印的列位置*/elseif(i=40)printf(|);/*打印中心的竖线*/elseprintf();printf(n);【】分析:首先设计屏幕图形,如果预计圆形在屏幕上打印20行,所以定义圆的直径就是20,半径为10,圆的方程是X2Y2=R2,因为图形不是从中心开始打印而是从边沿开始,所以Y从10变化到-10,根据方程求出X,对求得的X值再根据屏幕行宽进行必要的调整得到应打印的屏幕位置。参考答案:#includemain()doubley;intx,m;for(y=10;y=-10;y-)/*圆的半径为10*/m=*sqrt(100-y*y);/*计算行y对应的列坐标m*/fo

16、r(x=1;x30-m;x+)printf();/*输出圆左侧的空白*/printf(*);/*输出圆的左侧*/for(;x30+m;x+)printf();/*输出圆的空心部分*/printf(*n);/*输出圆的右侧*/【】参考答案:#include#includemain()doubley;intx,m,n,yy;for(yy=0;yy=20;yy+)y=*yy;m=acos(1-y)*10;n=45*(y-1)+31;for(x=0;x=62;x+)if(x=m&x=n)printf(+);elseif(x=n)printf(+);elseif(x=m|x=62-m)printf(*)

17、;elseprintf();printf(n);【】分析:编程的关键为两点,一是使用控制输出的行和列,这方面的内容在前面已经叙述,另一点是输出的数字和所在行、列关系。此题第一行输出的数字恰好是列数,从第二行起每行的数字均比上一行增n。参考答案:main()inti,j,n;printf(nPleaseEntern:);scanf(%d,&n);for(i=1;i=n;i+)for(j=1;j=n;j+)printf(%4d,(i-1)*n+j);printf(n);【】分析:此题的关键是找到输出数字和行、列数的关系。审查图形中每行中数字的关系发现,右边数字和前面数字之差逐次增1;同列数字依然是

18、这样的关系,编程的关键转换为找到每一行左方的第一个数字,然后利用行和列的循环变量进行运算就可得到每个位置的数字。用ai,j此表示第i行第j列的数字,则a11=1;由第i行第一列的数字推出第i+1行第一列的数字是ai+1,1=ai,1+i;同样由第j列推出第j+1列的数字是ai,j+1=ai,j+i+j。另外只有当ji时才输出数字。参考答案:main()inti,j,m,n,k=1;/*k是第一列元素的值*/printf(Pleaseenterm=);scanf(%d,&m);for(i=1;i=m;i+)n=k;/*n第i行中第1个元素的值*/for(j=1;j=m-i+1;j+)printf

19、(%3d,n);n=n+i+j;/*计算同行下一个元素的值*/printf(n);k=k+i;/*计算下一行中第1个元素*/【】参考答案:main()inti,j,n;printf(nPleaseEntern:);scanf(%d,&n);for(i=1;i=n;i+)for(j=1;j=n;j+)if(j=i且j=n-i+1;下区:j=n-i+1;左区:ji且ji且jn-i+1。现在问题是,如果知道一行在不同区域开始第一个位置的数字,然后该区后续的数字就可利用前面分析的规律得到。对于右区开始各行第一个数字最易求出,为4*(n-1)-i+1。后续一个和同行前一个数字之差是4*n-1-(j-1)

20、*2+1,其中方括号内是每边的数字个数。对角线上的数字是分区点,对角线上相临数字仍然相差一圈数字个数,读者自行分析得到计算公式。右区开始的第一个数字可以从上区结束时的数字按规律求出。下述程序用变量s保存分区对角线上的数字。参考答案一:main()inti,j,k,n,s,m,t;printf(Pleaseentern:);scanf(%d,&n);for(i=1;i=n;i+)s=(i=(n+1)/2)1:3*(n-(n-i)*2-1)+1;m=(i=(n+1)/2)i:n-i+1;/*m-1是外层圈数*/for(k=1;km;k+)s+=4*(n-2*k+1);for(j=1;j=n-i+1

21、&j=i&ji&jn-i+1)/*右区*/t-=4*(n-2*(n-j+1)+1;if(ji&jn-i+1)/*左区*/if(j=1)t=4*(n-1)-i+2;elset+=4*(n-2*j+1)+1;printf(%4d,t);printf(n);方案二:根据本题图形的特点,我们可以构造一个递归算法。我们可以将边长为N的图形分为两部分:第一部分最外层的框架,第二部分为中间的边长为N-2的图形。对于边长为N的正方型,若其中每个元素的行号为i(1iN),列号为j(1jN),第1行第1列元素表示为a1,1(a11=1),则有:对于最外层的框架可以用以下数学模型描述:上边:a1,j=a1,1+j-

22、1(j1)右边:ai,N=a1,1+N+i-2(i1)下边:ai,1=a1,1+4N-i-3(i1)左边:aN,j=a1,1+3N-2-j(j1)对于内层的边长为N-2的图形可以用以下数学模型描述:左上角元素:ai,i=ai-1,i-1+4(N-2i-1)(i1)若令:ai,j=fun(ai-1,i-1+4(N-2i-1),当:i(N+1)/2且j(N+1)/2时,min=MIN(i,j),则有:a2,2=fun(a1,1,min,min,n)ai,j=fun(a2,2,i-min+1,j-min+1,n-2*(min-1)我们可以根据上述原理,分别推导出i和j为其它取值范围时的min取值。根

23、据上述递归公式,可以得到以下参考程序。参考答案二:#include#defineMIN(x,y)(xy)(y):(x)fun(inta11,inti,intj,intn)intmin,a22;if(i=j&i=1)return(a11);elseif(i=j&i=(n+1)/2&j=(n+1)/2)min=MIN(n-i+1,n-j+1);elseif(i=(n+1)/2)min=MIN(i,n-j+1);elseif(i=(n+1)/2&j(n+1)/2)min=MIN(n-i+1,j);elsemin=MIN(i,j);a22=fun(a11,min,min,n);return(fun(a

24、22,i-min+1,j-min+1,n-2*(min-1);main()inta11=1,i,j,n;printf(Entern=);scanf(%d,&n);for(i=1;i=n;i+)for(j=1;j=n;j+)printf(%4d,fun(a11,i,j,n);printf(n);【】分析:此题的关键还是要找到输出数字aij和行列数i、j的关系。为此将图形分为四个区域如下图:3333332223321233222333333(此图n为5)在左上区域,即i=(n+1)/2、j=(n+1)/2时,输出数字为(n+1)/2-i+1和(n+1)/2-j+1中的大者,记为max(n+1)/2-i+1,(n+1)/2-j+1;在右上区,即i(n+1)/2时,输出数字为max(n+1)/2-i+1,j-n/2;在左下区,即i(n+1)/2、j(n+1)/2、j(n+1)/2时,输出数字为maxi-n/2,j-n/2。参考答案:#definemax(x,y)(x)(y)(x):(y)main()inti,j,n;printf(nPlea

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1