2011年计算机二级C语言编写程序题及答案解析精选(6)

2019-08-03 12:37

{ for(j=1; j<=n; j++) printf(\printf(\} } 【4.24】分析:此题的关键还是要找到输出数字aij和行列数i、j的关系。为此将图形分为四个区域如下图: 3 3 3 3 3 3 2 2 2 3 3 2 1 2 3 3 2 2 2 3

3 3 3 3 3 (此图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}。 参考答案:

#define max(x,y) ((x)>(y)?(x):(y)) main( ) { int i,j,n;

printf(\; scanf(\; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) if(i<=(n+1)/2) if(j<=(n+1)/2)

printf(\; else

printf(\; else if(j<=(n+1)/2)

printf(\; else

printf(\; printf(\; } }

【4.25】分析:前面我们已经见到过上下对称的图形,这是一个左右对称的图形,垂直中心

线上的数字恰好是行号,在每行位于图形垂直中心线左方的数字是逐渐增加的,而右方是逐渐减小的。j==i是分区的标志,左方输出数字就是列数j,而右方的数字从i开始逐步减小1。 参考答案: main() { int i,j;

for(i=1;i<=9;i++)

{ for(j=1;j<=9-i;j++) printf(\; for(j=1;j<=i;j++) printf(\; for(j=i-1;j>=1;j--) printf(\; printf(\; } }

【4.26】分析:这类输出字符的图形和输出数字的图形考虑是近似的,因为字符的ASCII码就是一个整数。在字符码值的变化过程中,应该注意应该判断码值是否超出字符的范围,进行必要的处理,为了保持程序的简洁,本题没有考虑这个问题,在下题里对这个问题进行了处理。 参考答案: main( ) { char c='Z'; int i,j,n;

printf(\; scanf(\; for(i=1;i<=n;i++) { for(j=1;j<=n+i-2;j++) if(j==n-i+1) printf(\; else printf(\; printf(\; }

for(i=1;i{ for(j=1;j<=2*(n-1)-i;j++) if(j==i+1) printf(\; else printf(\; printf(\; } }

【4.27】分析:此题与上题相近,区别在于输出时字符的ASCII码值的变化在图形的中间一行为最大,同时一行的两个字符是相同的。程序考虑在输入字符时设计了一个循环,保证输入的是英文字母。字符变化后进行了处理,程序中使用条件运算。在字符码值增加的过程中,

首先判断是大写还是小写字符,然后判断字符码值是否超出英文字母z(或Z),如果超出则重新赋为a(或A);在输出图象下半部分时,ASCII码值减少用同样的思路进行判断。在判断字符大小写(条件语句的第一个判断)时,用的是两个不同的值,请读者自行思考为什么,用同一个值是否可以? 参考答案: main( ) { char c; int i,j,n; do

{ printf(\; scanf(\;

}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(\; else printf(\; printf(\;

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{ for(j=1;j<=2*(n-1)-i;j++) if(j==i+1) printf(\; else printf(\; printf(\;

c=c<'Z'?(c<'A'?'Z':c):(c<'a'? 'z':c); } }

【4.28】参考答案:

#define max(x,y) ((x)>(y)?(x):(y)) main( ) { char c; int i,j,n; do

{ printf(\,char:\; scanf(\;

}while(c<'A'||c>'Z'&&c<'a'||c>'z'); for(i=1;i<=n;i++)

{ for(j=1;j<=n;j++) if(i<=(n+1)/2) if(j<=(n+1)/2)

printf(\; else

printf(\; else

if(j<=(n+1)/2)

printf(\; else

printf(\; printf(\; } }

【4.29】参考答案:

#define max(x,y) ((x)>(y)?(x):(y)) main( ) { char c; int i,j,n; do

{ printf(\,char:\; scanf(\;

}while(c<'A'||c>'Z'&&c<'a'||c>'z'); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) if(i<=(n+1)/2) if(j<=(n+1)/2)

printf(\; else

printf(\; else

if(j<=(n+1)/2)

printf(\; else

printf(\; printf(\; } }

【4.30】参考答案: #include main() { int i, j; for(i=1;i<10;i++) printf(\;

printf(\; for(i=1;i<10;i++) { for(j=1;j<10;j++) if(j

printf(\; } }

【4.31】参考答案: #include main( ) { int i,j; for(i=1;i<10;i++) printf(\; printf(\; for(i=1;i<10;i++) { for(j=1;j<10;j++) if(j<10-i) printf(\; else printf( \; printf(\; } } 【4.32】参考答案: #include \main() { int flag=0; float a,b,c,s; do { printf(\; scanf(\; if(a>b+c || b>a+c || c>a+b) flag=1; }while(flag); s=(a+b+c)/2; printf(\;


2011年计算机二级C语言编写程序题及答案解析精选(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:棱柱、棱锥、棱台

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: