版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【】输入n值,输出以以下图矩形。【】输入n值,输出以以下图平行四边形。【】输入n值,输出以以下图高为n的等腰三角形。【】输入n值,输出以以下图高为n的等腰三角形。【】输入n值,输出以以下图高和上底均为n的等腰梯形。【】输入n值,输出以以下图高和上底均为n的等腰空心梯形。【】输入n值,输出以以下图边长为n的空心正六边型。【】输入n值,输出以以下图图形。【】输入n值,输出以以下图图形。【】输入n值,输出以以下图图形。【】输入n值,输出以以下图图形。【】输入n值,输出以以下图图形。【】输入n值,输出以以下图图形。(例为n=6时)【】编写程序,输出以以下图sin(x)函数0到2π的图形。【】编写程序,在屏幕上输出一个由*号围成的空心圆。【】编写程序,在屏幕上绘制如图余弦曲线和直线。若屏幕的横向为x轴,纵向为y轴,在屏幕上显示0~360度的cos(x)曲线与直线x=f(y)=45*(y-1)+31的迭加图形。此中cos图形用"*"表示,f(y)用"+"表示,在两个图形的交点处则用f(y)图形的符号。【】编写程序,输出以以下图高度为n的图形。【】编写程序,输出以以下图高度为n的图形。【】输入n值,输出以以下图图形。【】输入n值,输出以以下图的n×n(n<10)阶螺旋方阵。12345161718196152425207142322218131211109图n=5时的螺旋方阵【】输入n值,输出以以下图回型方阵。【】输出以以下图的数字金字塔【】输入n值,输出以以下图图形。【】输入顶行字符和图形的高,输出以以下图图形。【】输入首字符和高后,输出以以下图回型方阵。AAAAAABBBAABCBAABBBAAAAAA图首字符为'A'、高为5的方阵【】输入中心字符和高后,输出以以下图回型方阵。XXXXXXYYYXXYZYXXYYYYXXXXX图中心字符为'Z'、高为5的方阵【】编写程序,输出以以下图上三角形式的乘法九九表。【】编写程序,输出以以下图下三角乘法九九表。【】分析:打印此图形用双重循环实现。图形要重复n行,故采纳循环结构实现循环n次,循环体内部打印一行'*'号,把上述思路表示为:for(i=1;i<=n;i++)打印一行'*'号;每行有n个'*'号,再采纳循环结构实现号,即:for(j=1;j<=n;j++)
n次循环,循环内部用格式输出语句打印一个
'*'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个'*'号,在上题第一层循环体内打印'*'号的循环前面增添一个循环打印空格。每行空格的个数是逐行减少的,因为第一层循环的控制变量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("\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;j++)printf("*");printf("\n");}}【】分析:本题图形是第3题图形的垂直反转,在编程上我们能够变换一个思路。关于图形中的第i行(1≤i≤n),共需要输出2n-i个字符,此中前面的i-1个字符为空格,后边的字符为'*'号。依据这一思路能够编写出以下程序。参照答案:main( ){inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++)/*重复输出图形的n行*/{for(j=1;j<=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");}}【】分析:关于空心图形,我们能够在上题的基础上,关于打印'*'号的循环进行改正,仅在循环开始值(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;j<=2*n+i-3;j++)if(j==n-i+1||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<=2*n-i-1;j++)if(j==i)printf("*");elseprintf("");printf("*\n");}for(i=1;i<n;i++)/*输出图形的下半部分(不含中心行)*/{for(j=1;j<=n+i;j++)if(j==n-i)printf("*");elseprintf("");printf("*\n");}}【】分析:本题与上题的差别在于打印'*'号的地点不一样,编程时要找出应打印'*'号的地点和两个循环变量i、j以及行数n的关系。参照答案:main( ){inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++)/*输出图形的上半部分(含中心行)*/{for(j=1;j<=2*n-i;j++)if(j==n-i+1||j>n-i+1&&i==1)printf("*");elseprintf("");printf("*\n");}for(i=1;i<n;i++)/*输出图形的下半部分(不含中心行)*/{for(j=1;j<=3*(n-1)-i;j++)if(j==i+1||j>i+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;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;i<n;i++)/*输出图形的下半部分(不含中心行)*/{for(j=1;j<=i+1;j++)if(j==1||j==i+1)printf("*");elseprintf("");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;j<=n+i-1;j++)if(j>n-i)printf("*");elseprintf("");printf("\n");}for(i=1;i<n;i++){for(j=1;j<=2*n-i-1;j++)if(j>i)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-2;j++)if(j==n-i+1)printf("*");elseprintf("");printf("*\n");}}【】分析:第一对图形进行设计,坐标的X轴和Y轴分别对应屏幕的列和行,一个正弦函数的周期为0~360度,我们把一个步长定义为10度,打印时每换一行等于函数的自变量增添10度;屏幕的列宽为80,函数值为0对应屏幕的第40列,sin(x)的值在-1~1,变换成列数为以0为中心的-30~30,对应屏幕上第10~70列。设计程序时,控制换行的自变量i乘以10获得正弦函数的X值,调用库函数sin( )求出函数值再乘以30输出的列宽,因为我们以屏幕的第40列为0点,故再加上40获得应在屏幕上显示的点。参照答案:#definePAI#include<>main( ){doublex;inty,i,yy;for(i=1;i<80;i++)/*打印图形的第一行*/if(i==40)printf("*");/*i控制打印的列地点*/elseprintf("-");printf("\n");for(x=;x<=;x+=10.)/*从10度到360度*/{y=40+30*sin(x*PAI/;/*计算对应的列*/yy=40>y?40:y;/*下一行要打印的字符总数*/for(i=1;i<=yy;i++)/*控制输出图形中的一行*/{if(i==y)printf("*");/*i控制打印的列地点*/elseif(i==40)printf("|");/*打印中心的竖线*/elseprintf("");}printf("\n");}}【】分析:第一设计屏幕图形,假如估计圆形在屏幕上打印20行,所以定义圆的直径就是20,半径为10,圆的方程是X2×Y2=R2,因为图形不是从中心开始打印而是从边缘开始,所以Y从10变化到-10,依据方程求出X,对求得的X值再依据屏幕行宽进行必需的调整获得应打印的屏幕地点。参照答案:#include<>main( ){doubley
;intx,m;for(y=10;y>=-10;y--)/*{m=*sqrt(100-y*y);
/*
圆的半径为10*/计算行y对应的列坐标
m*/for(x=1
;x<30-m;x++)printf("");/*输出圆左边的空白*/printf("*");/*输出圆的左边*/for(;x<30+m;x++)printf("");/*输出圆的空心部分*/printf("*\n");/*输出圆的右边*/}}【】参照答案:#include<>#include<>main( ){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("*");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;同列数字依旧是这样的关系,编程的要点变换为找到每一行左方的第一个数字,而后利用行和列的循环变量进行运算即可获得每个地点的数字。用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其他只有当j<i时才输出数字。参照答案:
行。main( ){inti,j,m,n,k=1;/*kprintf("Pleaseenterm="")
是第一列元素的值;
*/scanf("%d",&m);for(i=1;i<=m;i++){n=k;/*n第i行中第1个元素的值*/for(j=1;j<=m-i+1;j++){printf("%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)printf("1");elseprintf("%3d",j-i+1);printf("\n");}}【】分析:可用不一样的方案解决此问题,为了宽阔读者的思路,这里给出了两个参照答案,此中第二个答案是使用了递归方法。方案一:第一找寻数字输出数字和队列的关系。每圈有四个边,把每边的最后一个数字算为下面的开始,最外圈每边数字个数是n-1个,以后每边比外边一边少两个数字。因为数字是一行一行输出的,再分析每行数字的规律。实质没有的数字有三种规律:位于对角线之间的数字是上半图增一,下半图减一。对角线左边的各列,右边比左边增添了一圈数字,比方数字39和它左边的22比较,数字39所在的圈每边4个数字,左边22加上一圈16个数字在加1就是39。同理,对角线右边的各列,则减少一圈的数字个数。依据以上分析,用两个对角线将图形分为四个地区,以以下图所示,图中黑斜体字为对角线上的数字。1234567242526272829823404142433092239484944311020373635343312为表达方便我们称四个地区为上、下、左、右区。设i、j为队列号,n为图形的总行数,则满足各区的范围是,上区:j>=i且j<=n-i+1;下区:j<=i且j>=n-i+1;左区:j<i且j<n-i+1;右区:j>i且j>n-i+1。此刻问题是,假如知道一行在不一样地区开始第一个地点的数字,而后该区后续的数字即可利用前面分析的规律获得。关于右区开始各行第一个数字最易求出,为4*(n-1)-i+1。后续一个和同行前一个数字之差是4*[n-1-(j-1)*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;k<m;k++)s+=4*(n-2*k+1);for(j=1;j<=n;j++){if(j>=n-i+1&&j<=i)/*下区*/t=s-(j-(n-i))+1;if(j>=i&&j<=n-i+1)/*上区*/t=s+j-i;if(j>i&&j>n-i+1)/*右区*/t-=4*(n-2*(n-j+1))+1;if(j<i&&j<n-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(1≤i≤N),列号为j(1≤j≤N),第1行第1列元素表示为a1,1(a11=1),则有:关于最外层的框架能够用以下数学模型描绘:上面:a1,j=a1,1+j-1(j≠1)右边:ai,N=a1,1+N+i-2(i≠1)下面:ai,1=a1,1+4N-i-3(i≠1)左边:aN,j=a1,1+3N-2-j(j≠1)关于内层的边长为N-2的图形能够用以下数学模型描绘:左上角元素:ai,i=ai-1,i-1+4(N-2i-1)(i>1)若令: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
取值。依据上述递归公式,能够获得以下参照程序。参照答案二:#include<>#defineMIN(x,y)(x>y)?(y):(x)fun(inta11,inti,intj,intn){intmin,a22;if(i==j&&i<=1)return(a11);elseif(i==j&&i<=(n+1)/2)return(fun(a11,i-1,i-1,n)+4*(n-2*i+3));elseif(i==1&&j!=1)return(a11+j-1);elseif(i!=1&&j==n)return(a11+n+i-2);elseif(i!=1&&j==1)return(a11+4*n-3-i);elseif(i==n&&j!=1)return(a11+3*n-2-j);else{if(i>=(n+1)/2&&j>=(n+1)/2)min=MIN(n-i+1,n-j+1);elseif(i<(n+1)/2&&j>=(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(a22,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、j>(n+1)/2时,输出数字为max{(n+1)/2-i+1,j-n/2};在左下区,即i>(n+1)/2、j<=(n+1)/2时,输出数字为max{i-n/2,(n+1)/2-j+1};在右下区,即i>(n+1)/2、j>(n+1)/2时,输出数字为max{i-n/2,j-n/2}
。参照答案:#definemax(x,y)((x)>(y)?(x):(y))main( ){inti,j,n
;printf("\nPleaseEntern:")
;scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<=n;j++)if(i<=(n+1)/2)if(j<=(n+1)/2)printf("%4d",max((n+1)/2-i+1,(n+1)/2-j+1));elseprintf("%4d",max((n+1)/2-i+1,j-n/2));elseif(j<=(n+1)/2)printf("%4d",max(i-n/2,(n+1)/2-j+1));elseprintf("%4d",max(i-n/2,j-n/2));printf("\n");}}【】分析:前面我们已经见到过上下对称的图形,这是一个左右对称的图形,垂直中心线上的数字恰巧是行号,在每行位于图形垂直中心线左方的数字是逐渐增添的,而右方是逐渐减小的。j==i是分区的标记,左方输出数字就是列数j,而右方的数字从i开始逐渐减小1。参照答案:main( ){inti,j;for(i=1;i<=9;i++){for(j=1;j<=9-i;j++)printf("");for(j=1;j<=i;j++)printf("%2d",j);for(j=i-1;j>=1;j--)printf("%2d",j);printf("\n");}}【】分析:这种输出字符的图形和输出数字的图形考虑是近似的,因为字符的ASCII码就是一个整数。在字符码值的变化过程中,应当注意应当判断码值能否高出字符的范围,进行必要的办理,为了保持程序的简短,本题没有考虑这个问题,在下题里对这个问题进行了办理。参照答案:main( ){charc='Z';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("%c",c--);elseprintf("");printf("%c\n",c--);}for(i=1;i<n;i++){for(j=1;j<=2*(n-1)-i;j++)if(j==i+1)printf("%c",c--);elseprintf("");printf("%c\n",c--);}}【】分析:本题与上题周边,差别在于输出时字符的ASCII码值的变化在图形的中间一行为最大,同时一行的两个字符是相同的。程序考虑在输入字符时设计了一个循环,保证输入的是英文字母。字符变化后进行了办理,程序中使用条件运算。在字符码值增添的过程中,首先判断是大写还是小写字符,而后判断字符码值能否高出英文字母z(或Z),假如高出则重新赋为a(或A);在输出图象下半部分时,ASCII码值减少用相同的思路进行判断。在判断字符大小写(条件语句的第一个判断)时,用的是两个不一样的值,请读者自行思虑为何,用同一个值能否能够?参照答案:main( ){charcinti,j,n
;;do{printf("\nPleaseEntern,char:")
;scanf("%d,%c",&n,&c);}while(c<'A'||c>'Z'&&c<'a'||c>'z');for(i=1;i<=n;i++){for(j=1
;j<=n+i-2
;j++)if(j==n-i+1)printf("%c",c)
;elseprintf("")
;printf("%c\n",c++)
;c=c<'a'?(c>'Z'?'A':c):(c>'z'?'a':c)
;}c-=2;c=c<'Z'?(c<'A'?'Z':c):(c<'a'?'z':c)
;for(i=1;i<n;i++){for(j=1;j<=2*(n-1)-i;j++)if(j==i+1)printf("%c",c);elseprintf("");printf("%c\n",c--);c=c<'Z'?(c<'A'?'Z':c):(c<'a'?'z':c)}
;}【】参照答案:#definemax(x,y)((x)>(y)?(x):(y))main( ){charc;inti,j,n;do{printf("\nPleaseEnte
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度供应链管理服务合同标的与服务流程详细说明
- 2024年度碧桂园房地产销售代理合同
- 2024年度智能家居系统开发与技术服务合同2篇
- 2024年度废弃物料环保焚烧服务合同
- 2024年度广告发布合同:为期一年的高速公路广告牌租赁
- 2024年度供应链融资合同:某电商公司供应链融资2篇
- 2024年度企业产品品牌合作发展合同
- 安全用电施工协议书模板2
- 2024年度网站建设合同担保安排
- 2024年度电商企业合作研究合同
- GB/T 16716.5-2024包装与环境第5部分:能量回收
- 公务员2023年国考《申论》(副省卷)题和参考答案
- 2024年中国遥控风扇控制器市场调查研究报告
- 宫颈癌保留生育能力的手术
- 名创优品课件教学课件
- 2024苏教版科学小学六年级上册第5单元《科技改变生活》教学设计及教学反思
- 人教版八年级英语上册期末专项复习-完形填空和阅读理解(含答案)
- 中小学劳动教育实践基地建设标准
- 传感器技术-武汉大学
- 人力表单46 - 全体职工大会会议纪要(裁员)
- 2024黑龙江省交通投资集团招聘38人高频500题难、易错点模拟试题附带答案详解
评论
0/150
提交评论