• 10. C语言输出菱形(详解版)


    菱形,就是如下所示的图形,总行数与总列数相等:

    40.  C语言输出菱形(详解版)

    写一个程序,根据用户输入的总行数,打印出菱形。

    这个题目主要是找出规律,考察读者的逻辑思维。

    你可以从第一行开始,遍历所有的列,也可以从第一列开始,遍历所有的行。

    下面的程序从第一行开始,遍历所有的列。

    设菱形的总行数为line,总列数为column,当前行为i,当前列为j。上半部分与下半部分的规律不一样,应该分开讨论。

    我们着眼于星号(*),思考什么条件下输出星号,总结出如下的规律。

    1) 对于上半部分(包括中间一行),当前行与当前列满足如下关系输出星号:

    • j>=(column+1)/2-(i-1)     (column+1)/2-(i-1)为第i行最左边的星号
    • j<=(column+1)/2+(i-1)    (column+1)/2+(i-1)为第i行最右边的星号


    2) 对于下半部分,当前行与当前列满足如下关系输出星号:

    • j>=(column+1)/2-(line-i)     (column+1)/2-(line-i)为第i行最左边的星号
    • j<=(column+1)/2+(line-i)    (column+1)/2+(line-i)为第i行最右边的星号


    不满足上述条件,则输出空格。

    于是写出如下的代码:

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3  
     4 int main(){
     5     int line;  // 菱形总行数
     6     int column;  // 菱形总列数
     7     int i;  // 当前行
     8     int j;  // 当前列
     9  
    10     printf("请输入菱形的行数(奇数):");
    11     scanf("%d", &line);
    12     if(line%2==0){  // 判断是否是奇数
    13         printf("必须输入奇数!
    ");
    14         exit(1);
    15     }
    16     column = line;  // 总行数和总列数相同
    17  
    18     for(i=1; i<=line; i++){  // 遍历所有行
    19         if(i<(line+1)/2+1){  // 上半部分(包括中间一行)
    20             for(j=1; j<=column; j++){  // 遍历上半部分的所有列
    21                 if( (column+1)/2-(i-1)<=j && j<=(column+1)/2+(i-1) ){
    22                     printf("*");
    23                 }else{
    24                     printf(" ");
    25                 }
    26             }
    27         }else{  // 下半部分
    28             for(j=1; j<=column; j++){  // 遍历下半部分的所有列
    29                 if( (column+1)/2-(line-i)<=j && j<=(column+1)/2+(line-i) ){
    30                     printf("*");
    31                 }else{
    32                     printf(" ");
    33                 }
    34             }
    35         }
    36         printf("
    ");
    37     }
    38  
    39     return 0;
    40 }

    运行结果:

    请输入菱形的行数(奇数):11
         *
        ***
       *****
      *******
     *********
    ***********
     *********
      *******
       *****
        ***
         *

    感谢你的阅读,请用心感悟!更多内容请关注微信公众号:C语言自学网  ;希望可以帮到爱学习的你!!分享也是一种快乐!!!请接力。。。

    点击查看原文,谢谢!

  • 相关阅读:
    iOS 5中的strong和weak关键字解析
    【ios】第三方开源类库SSCheckBoxView
    NSRange
    ios开发之在iOS应用中加载自定义字体显示
    IOS中NSUserDefaults的用法(本地数据存储)
    关于setTimeout运行机制
    SpringMVC入门学习框架搭建
    HashMap学习总结
    关于服务器跨域问题(使用cors解决)
    Spring IOC容器和bean
  • 原文地址:https://www.cnblogs.com/kangyifan/p/13506064.html
Copyright © 2020-2023  润新知