问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++怎么循环输出print

发布网友 发布时间:2023-06-03 06:23

我来回答

1个回答

热心网友 时间:2024-11-07 14:35

最近在牛客网上做c语言的题目的时候,发现了许多有趣的题目,就是打印一些图案,这些题目都有异曲同工的地方,我来给大家总结,希望能帮助到大家。

一、打印菱形
题目展示:
本题要求编写程序,打印一个高度为n的、由 “*” 组成的正菱形图案。

输入格式:

输入在一行中给出一个正的奇数n。

输出格式:

 输出由n行星号 “*” 组成的菱形,如样例所示。每个星号后跟一个空格。

输入样例:
7

输出样例:
 
方法一:
我们先看一看前四行有什么规律(当n为7的时候)

行数第一个*前的空格数*的数量
16  (n-2*1+1)1(2*1-1)
24 (n-2*2+1)3(2*2-1)
32(n-2*3+1)5(2*3-1)
40(n-2*4+1)7(2*4-1)
这样就可以得出前四行的规律了,后三行:  

行数第一个*之前的空格数*的数量
52(2*1)5(n-2*1)
64(2*2)3(n-2*2)
76(2*3)
 1(n-2*3)  

 

知道了它们的循环,这样代码就好写了,代码如下:

#include <stdio.h>

int main()
{
int i, j, n;
scanf("%d", &n);
int k = (n + 1) / 2;
//打印上半行
for (i = 1; i <= k; i++) {
for (j = 1; j <= n - 2 * i + 1; j++) {
printf(" ");
}
for (j = 1; j <= 2 * i - 1; j++) {
printf("* ");
}
printf("\n");
}
//打印下半行
for (i = 1; i<=(n-1)/2; i++) {
for (j = 1; j <= 2 * i; j++) {
printf(" ");
}
for (j = 1; j <= n-2*i; j++) {
printf("* ");
}
printf("\n");
}

return 0;
}
登录后复制

方法二:
根据对称性将中间的那一行定义为第0行,在找规律的时候加上绝对值,这就要用到abs函数,abs就是求数的绝对值,用abs函数要包含math的头文件。

行数第一个*之前的空格数*的数量
-36(2*3)1(n-2*3)
-24(2*2)3 (n-2*2)
-12(2*1)5 (n-2*1)
00(2*0)7 (n-2*0)
12(2*1)5(n-2*1)
24(2*2)3(n-2*2)
36(2*3)1(n-2*3)
# include <stdio.h>
# include <math.h>

int main()
{
int n;
scanf(" %d", &n);

int i = -n / 2;
int j;
for(i=-(n/2);i<=(n/2);i++)
{
for (j = 1; j <= 2 * abs(i); j++)
printf(" ");

for (j = 1; j <= n - 2 * abs(i); j++)
printf("* ");

printf("\n");

}

return 0;
}
登录后复制

这样就可以打印出我们想要的几行菱形了。

二、打印x图形
题目展示:
 这道题与刚刚那题的思路又有些不一样了,

1、题目要求的是多组输入,就不能单独只用scanf了,需要用到scanf("%d", &i)!=EOF,EOF是文件结束的标志,多组输入一定是要用循环来写的,使用要用到while,所以用循环来写的话必须要有一个条件来退出循环,所以就得加上不等于EOF。

2、看这道题就应该想到正对角线的每行就等于每列,负对角线行加列是不是等于6,不过行列的初始下标是从0开始的,所以行加列就等于4。

有了思路这一题就好写多了。

代码如下: 

#include<stdio.h>
int main()
{
int i =0;
while(scanf("%d", &i)!=EOF){
for(int a = 0; a < i;a++)
{
for (int b = 0;b < i;b++)
{
if(a == b)
{
printf("*");
}
else if ( (a + b) == (i-1) )
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
printf(" \n");
}
return 0;
}
登录后复制

打印结果如下:

 三、打印箭形图案
题目如下:

这道题跟第一题的方法一样,也是分为上半和下半分部分打印 。假设输入的是2,则上半打印前三行,下半打印四,五行。找规律也是用之前的方法看空格有多少个,*有多少个。

 代码如下:

打印箭形图案
int main()
{
int num;
int i, j, k;
while (scanf("%d", &num) != EOF)
//将火箭图案从中间分开 上部分一个大循环 下部分一个循环
{
for (i = 0; i <= num; i++)//上部分循环从此开始 此处确定了上部分循环的行数
{
for (j = 0; j < num - i; j++)//此处为先开始打印空格
{
printf(" ");
}
for (k = 0; k <= i; k++)//此处打印图案*
{
printf("*");
}
printf("\n");//至此一次大循环完成 打印了一行的图形 在此换行
}
for (i = 0; i < num; i++)
{
for (j = 0; j <= i; j++)
{
printf(" ");
}
for (k = 0; k < num - i; k++)
{
printf("*");
}
printf("\n");
}
}
return 0;
}
登录后复制
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
vivox9和x9i有什么区别 ...设置原则跟构造要求。构造柱的设置原则跟构造要求是什么_百度... ...的U型钢筋锚环要几道?在哪里可以找到依据啊 ...月末不含税库存金额1065000元,请计算门店库存天数 公蟹吃什么 公蟹吃什么东西 爬行健身操功能和原理 锻炼爬行的好处有哪些呢 爬行健身法有什么优缺点 檀木如何粘合 成田剑先生还为哪些日本动漫配音,有名一点滴。谢谢了,大神帮忙啊 C语言那个5次方怎么输 githubcli和https有什么区别 牙疼是因为什么原因? 大牙疼怎么回事阿,咬和的时候疼,不是太疼微微的疼。今天发现的。吃了... 为什么突然牙疼 探究牙疼的原因及应对方法? 牙疼为什么 探究牙疼的原因及预防方法? 日照绿茶多少钱一斤? 梦见别人腿上长红疙瘩 梦见朋友露出肚皮和大腿的预兆 梦见别人腿上长东西的预兆 黄柏树多少年才能卖 跟黄柏树真的很像的植物 十五年黄柏树有多大 ...JEWELS SWISS MADE是什么意思,我也不知道型号,知道的告诉一下值... ...为蓝色,而我手机为白色因此不能联保是什么意思? 微信扫描什么样的二维码后会出现蓝色的感叹号 普通双水解与完全双水解有什么区别 完全双水解反应和不完全双水解反应,求明确解释(加例子最好)_百度知 ... 怎么判断不完全双水解和完全双水解,哪些离子反应是完全双水解,高中阶 ... 完全双水解与不完全双水解 用C语言编程:编写一个函数,重复打印给定的字符N次 c语言任务要求输入用户名和密码,限制五次,我这么写哪里不对,新生求教... 生死狙击2怎么开房间 开房间方法介绍 首考几分能上特控线 公务员的公共科目包括哪些内容啊? 纯银的勺子可以一直泡在水杯里吗? 雪花银勺可以长期煮水喝吗 大理白子人家月辉银器买的纯银的勺子可以长时间放在杯子里泡水喝吗? 纯银勺子可以放每天喝水的杯子里么 夫妻间一发生矛盾就破财怎么回事? 为什么我跟丈夫只要吵架我这方就要破财 明亮隔的读音明亮隔的读音是什么 明亮隔的成语明亮隔的成语是什么 缺点其实是优点 你的缺点其实是你的优点。 公司要个人人事档案到底是用来干什么的? 做完心脏支架手术需要几天恢复可以正常上班 冠心病放完支架多久恢复 领导找人喝酒怎么婉拒? 在万用表中,电容和电阻的大小怎么区分 电阻是200 2K 20K 200K 2M 200M...