C语言:5.20程序练习题

打印一个菱形图案。程序分为两部分:上半部分和下半部分。上半部分打印一个逐渐增大的星号图案,下半部分打印一个逐渐缩小的星号图案。

cpp 复制代码
#include<stdio.h>
int main() {
	int row = 5;//定义行数
	int t = 2;
	for (int i = row; 0 < i; i--)
	{
		for (int k = i - 1; k > 0; k--) 
		{putchar(' ');}
		for (int g = t - 1; g > 0; g--) 
		{putchar('*');}
		t = t + 2;
		printf("\n");
	}
	t = t - 4;
	for (int i2 = 1; i2 <row; i2++) 
	{
		for (int k2 = i2; k2 > 0; k2--)
		{putchar(' ');}
		for (int g2 = t - 1; g2 > 0; g2--)
		{putchar('*');}
		t = t - 2;
		printf("\n");
	}
}

简化版:

  1. 单层循环:使用一个外层循环遍历所有行,一个内层循环遍历所有列。

  2. 数学逻辑 :通过 abs(i) + abs(j) < row 判断是否打印星号,直接确定菱形边界。

  3. 减少变量:不再需要单独处理上下半部分,统一用数学逻辑处理。

cpp 复制代码
#include <stdio.h>
#include<stdlib.h>
int main() {
    int row = 5; // 定义行数
    int i, j;
    // 打印整个菱形
    for (i = -row + 1; i < row; i++) {
        for (j = -row + 1; j < row; j++) {
            if (abs(i) + abs(j) < row) putchar('*'); // 打印星号
            else putchar(' '); // 打印空格
        }
        printf("\n");
    }
    return 0;
}
相关推荐
Cc.Y2 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python
阿森_dev2 小时前
2027 届毕设选题怎么选:30 个 Java 方向选题的实现难度排序
java·开发语言·spring boot·毕业设计·课程设计
by209992 小时前
C++ 多态:同一个基类接口,调用不同的函数
开发语言·c++·经验分享·多态
笔墨登场说说2 小时前
flink bin/start-cluster.sh 帮我做成开机启动
开发语言·python
Sarvartha2 小时前
Lambda 表达式和函数式接口
java·开发语言
小白学大数据2 小时前
拼多多反爬对抗实战:Scrapy 中间件化采集架构解析
开发语言·scrapy·中间件·架构
学逆向的3 小时前
win32注入代码
开发语言·网络安全·api·win32
wuminyu3 小时前
ForkJoinPool窃取线程在扫描其他WorkQueue时的随机采样算法与Phase线程挂起唤醒机制解析
java·linux·c语言·jvm·c++
Sarvartha3 小时前
内部类知识
java·开发语言
Logic1013 小时前
C语言/数据结构欧几里得算法题解:长方形切割最大正方形——贪心划分计数
c语言·数据结构·算法·贪心算法·时间复杂度·空间复杂度·欧几里得算法