ZZULIOJ题解
1108: 打印数字图形(函数专题)
题目描述
从键盘输入一个整数n(1≤n≤9),打印出指定的数字图形。要求在程序中定义并调用如下函数:PrintSpace(m)用来输出m个空格;PrintDigit(m)来输出一行中的数字串"12…m…21"(该行中的最大数字是m)。函数原型如下:
void PrintDigit(int m);
void PrintSpace(int m);
对于C/C++代码的提交,本题要求必须通过定义PrintSpace函数、PrintDigit函数和main函数实现,否则,返回编译错误。
输入
正整数n(1≤n≤9)。
输出
指定数字图形。
样例输入
5
样例输出
1
121
12321
1234321
123454321
1234321
12321
121
1
函数专题的打印图形,注意题目上的本题要求,需要按照要求去定义函数,所以读题很关键的。哈哈。难度上并不难,实际上是循环语句和函数的结合考察。不过这类题刚开始还是很费时间的,当然逻辑结构清晰是最好不过的了。自己对以前的代码比对修改了一下,发现以前确实没有现在逻辑清晰或者理解更好。哈哈。
代码
#include<stdio.h>
void PrintDigit(int n) {//打印数字
int k=1;
while(k<=n){//前半部分用变量k来完成
printf("%d",k++);//这里利用了k++,先用k再加一的特性,注意区别
//k++;不习惯可以分开写
}
n--;//打印后半部分数字,从n-1开始 (此处可以换成k-=2;因为如果执行上面操作k是等于n+1的所以减2)
while(n>=1){//后半部分也可以用k完成,用n也一样。
printf("%d",n--);//这里利用了n--,先用n再减一的特性,注意区别
//n--;不习惯可以分开写
}
}
void PrintSpace(int n) {//打印空格
for(int k = 1; k <= n; k++)
printf(" ");//按照需要的空格数字打印空格
}
int main (){
int n;//定义行数n
scanf("%d", &n);//键盘读入n
for(int j = 1; j <= n; j++) {//打印上层
PrintSpace(n-j);//空格和当前数字之和为n
PrintDigit(j);//打印当前行数字
printf("\n");//换行
}
for(int j = n - 1; j > 0; j--) {//打印下层,从n-1开始。
PrintSpace(n-j);//空格和当前数字之和为n
PrintDigit(j);//填充当前行数字
printf("\n");//换行
}
return 0;//程序正常结束
}