公司动态

输出字符菱形的一个巧思

📅 2026/8/2 5:59:41
输出字符菱形的一个巧思
输出字符菱形的一个巧思题目描述思路1直接固定输出基础语法C语言前置语句输出语句1. 头文件2. 主函数定义3. 输出语句4. 返回值5. 代码格式思路1代码实现思路2可推广的循环输出基础语法条件判断和循环绝对值思路2代码实现思路2的推广基础语法输入语句思路2推广的代码实现题目描述用*构造一个对角线长5 55个字符倾斜放置的菱形。输入格式没有输入要求。输出格式如样例所示。用*构成的菱形。输入输出样例 #1输入 #1输出 #1* *** ***** *** *思路拆解思路1直接固定输出直接使用printf()输出每一行但是要特别注意别忘写换行好处是简单但要求输出更大菱形时则倍显乏力于是便诞生出思路2。作为作者第一个C语言笔记我们不得不先回顾一下基础语法[doge]。不想看可先跳过基础语法C语言前置语句输出语句c#includestdio.hintmain(){printf(Hello, World! \n);return0;}这段简单的C语言程序包含了以下几个基础语法要点1. 头文件#includestdio.h#include是预处理指令用于包含头文件stdio.h是标准输入输出头文件包含了printf()、scanf()等函数的声明使用尖括号表示从系统目录中查找头文件stdio.h为什么叫标准输入输出头文件英语比较好的小朋友应知道std standard 标准i input 输入o output 输出.h header 头文件header file2. 主函数定义intmain(){// 函数体}int表示函数的返回类型为整数main是程序的入口函数每个C程序必须有且只有一个main函数()内可以放置参数这里为空表示不接受参数{}花括号包裹函数体包含要执行的语句3. 输出语句printf(Hello, World! \n);printf()是标准输出函数用于向屏幕输出文本双引号 内的内容是字符串字面量\n是转义字符表示换行newline语句以分号;结尾这是C语言的语法要求一定不能忘了更多的输出语法printf()函数的功能远不止输出简单的字符串它支持丰富的格式化输出功能1. 格式化输出基础intage25;floatscore89.5;chargradeA;charname[]张三;printf(年龄%d岁\n,age);// 输出整数printf(分数%.1f分\n,score);// 输出浮点数保留1位小数printf(等级%c\n,grade);// 输出字符printf(姓名%s\n,name);// 输出字符串2. 常用格式说明符%d或%i十进制整数%f浮点数默认6位小数%.2f浮点数保留2位小数%c单个字符%s字符串3. 宽度和精度控制intnum123;floatpi3.14159;printf(%5d\n,num);// 输出宽度为5右对齐 123printf(%-5d\n,num);// 输出宽度为5左对齐 123 printf(%05d\n,num);// 输出宽度为5用0填充00123printf(%.2f\n,pi);// 保留2位小数 3.14printf(%8.3f\n,pi);// 宽度8保留3位小数 3.1424. 转义字符除了\n换行printf()还支持其他转义字符比如\t水平制表符Tab5. 输出多个值inta10,b20;floatx3.14,y2.71;printf(a%d, b%d\n,a,b);// 输出a10, b20printf(x%.2f, y%.2f, 和%.2f\n,x,y,xy);// 输出x3.14, y2.71, 和5.85注意事项格式说明符必须与变量类型匹配否则输出结果可能不正确printf()返回成功输出的字符数可以使用%*动态指定宽度和精度输出中文等宽字符时要注意编码问题比如使用CLion来进行C语言编程时运行程序中文出现乱码时需加上system(“chcp 65001”);语句同时要加头文件#include stdlib.h4. 返回值return0;return语句用于从函数返回值0表示程序正常退出非0值通常表示错误代码在main函数中返回值会传递给操作系统当然你也可以不加5. 代码格式使用缩进通常是4个空格或1个制表符提高代码可读性适当的空行分隔不同逻辑部分不然你受不了一坨屎山代码注释使用//单行或/* */多行思路1代码实现#includestdio.hintmain(){printf(%s\n, *);printf(%s\n, ***);printf(%s\n,*****);printf(%s\n, ***);printf(%s, *);return0;}输出* *** ***** *** *思路2可推广的循环输出先从特殊情况考虑要输出一个对角线长度为5的菱形我们可以从以下几个步骤来思考分析菱形结构分析输出目标菱形由5行组成第1行2个空格 1个星号第2行1个空格 3个星号第3行0个空格 5个星号中心行第4行1个空格 3个星号第5行2个空格 1个星号确定输出策略可以使用两层循环外层控制行数内层控制每行的空格和星号先输出空格再输出星号最后换行这意味着要计算每行对应的空格数与星号数菱形分为上半部分第1-3行和下半部分第4-5行数学逻辑实现设总行数 n 5对于第 i 行从1开始计数空格数 |n/2 1 - i| 取绝对值星号数 n - 2 × 空格数基础语法条件判断和循环绝对值C语言的条件判断和循环语法与Java一致这里以及后面不再赘述详见博主的Java基础语法https://blog.csdn.net/BeiGuTing_code/article/details/163112335?spm1001.2014.3001.5501这里只讲C语言的abs()函数abs()函数是C语言标准库中的一个数学函数用于计算整数的绝对值。函数原型#includestdlib.h// 需要包含此头文件intabs(intn);参数说明n要计算绝对值的整数返回值返回参数n的绝对值非负整数使用示例#includestdio.h#includestdlib.h// 包含 abs() 函数intmain(){inta-5;intb10;printf(abs(%d) %d\n,a,abs(a));// 输出: abs(-5) 5printf(abs(%d) %d\n,b,abs(b));// 输出: abs(10) 10printf(abs(%d) %d\n,a-b,abs(a-b));// 输出: abs(-15) 15return0;}注意事项abs()函数只能用于整数类型int如果要计算浮点数的绝对值需要使用fabs()函数需要包含math.h头文件使用前必须包含stdlib.h头文件思路2代码实现#includestdio.h#includestdlib.hintmain(){intn5;// 菱形对角线长度for(inti1;in;i){// 计算当前行的空格数intspacesabs(n/21-i);// 输出空格for(intj1;jspaces;j){printf( );}// 输出星号intstarsn-2*spaces;for(intj1;jstars;j){printf(*);}// 换行printf(\n);}}输出* *** ***** *** *思路2的推广我们不满足于只能构造一个对角线长 5 个字符倾斜放置的*菱形而是想要根据用户输入得到一个对应*菱形。特别说明这里的菱形指的是根据用户输入的正整数 nn 为奇数输出一个由星号(*)构成、对角线长度为 n 的字符菱形。比如* * * *** *** *** * ***** ***** *** ******* * ***** *** *基础语法输入语句在C语言中最常用的输入函数是scanf()它用于从标准输入通常是键盘读取数据。函数原型#includestdio.h// 需要包含此头文件intscanf(constchar*format,...);基本用法intnum;scanf(%d,num);// 读取一个整数到变量 num 中参数说明format格式控制字符串指定要读取的数据类型和格式...可变参数列表对应要存储数据的变量地址常用格式说明符%d读取十进制整数%f读取浮点数float%lf读取双精度浮点数double%c读取单个字符%s读取字符串遇到空格、制表符或换行符停止注意事项变量前必须加取地址符除了读取字符串到字符数组时可以不加格式字符串中的普通字符非格式说明符需要与输入严格匹配scanf()读取字符串时不会检查数组边界存在缓冲区溢出风险使用示例基本信息输入输出#includestdio.hintmain(){intage;floatheight;charname[50];printf(请输入您的年龄);scanf(%d,age);printf(请输入您的身高米);scanf(%f,height);printf(请输入您的姓名);scanf(%s,name);// 注意这里不需要 因为 name 是数组名printf(\n--- 输入信息 ---\n);printf(姓名%s\n,name);printf(年龄%d 岁\n,age);printf(身高%.2f 米\n,height);return0;}输入多个值有限多个inta,b,c;// 输入三个整数用空格或换行分隔scanf(%d %d %d,a,b,c);思路2推广的代码实现在思路2的推广中我们可以使用scanf()让用户输入菱形的大小#includestdio.h#includestdlib.hintmain(){intn;printf(请输入菱形的对角线长度奇数);// 提示语scanf(%d,n);// 输入for(inti1;in;i){// 计算当前行的空格数intspacesabs(n/21-i);// 输出空格for(intj1;jspaces;j){printf( );}// 输出星号intstarsn-2*spaces;for(intj1;jstars;j){printf(*);}// 换行printf(\n);}}输入输出示例示例1输入 3请输入菱形的对角线长度奇数3 * *** *示例2输入 5请输入菱形的对角线长度奇数5 * *** ***** *** *示例3输入 7请输入菱形的对角线长度奇数7 * *** ***** ******* ***** *** *示例4输入 9请输入菱形的对角线长度奇数9 * *** ***** ******* ********* ******* ***** *** *注意事项程序要求输入奇数如果输入偶数程序不会报错但输出的菱形会不对称为了防止这种情况可以看看博主Java基础语法里的do-while循环里的示例2至少执行一次的输入验证的例子https://blog.csdn.net/BeiGuTing_code/article/details/163112335?spm1001.2014.3001.5501输入的值越大输出的菱形越大