循环语句的熟练掌握--经典

1.在屏幕上打印如下图所示的图形


题目解析:这个图形我们可以看成总共有13行,第七行的“*”最多,有13个,以第七行为中心的上下每一行都比原来的“*”少2个,以此类推,直至剩下一个“*”为止;也可以将它看成两部分,上半部分是七行的一个“*”逐渐增多的正三角,假设在第i行,它的“*”有2*i+1个,下半部分是一个有六行“*”的倒三角,在第i行时,它的“*”有(行数-i)*2-1个,这里需要定义一个变量表示行数。

方法一:写13行的printf,将这13行在屏幕上打印出来,此方法相对来说不是明智的方法,如果说在屏幕上要求打印的太多,比如一万行,这个方法的局限性太大,而且程序运行速度会很慢。

方法二:将要打印的图形分为两部分,如下图


将这个图形分解以后,最大的难点就在于控制每一行的空格数量和“*”的个数,可以再定义一个变量j,通过循环变量中的j来控制,具体的程序代码如下:

#include<stdio.h>
int main()
{
	int line = 0;//行数
	scanf("%d", &line);
	int i = 0;//第一行从0开始
	int j = 0;//控制空格数
	for (i = 0; i < line; i++)//上半部分
	{
		for (j = 0; j < line - 1 - i; j++)//上半部分空格从6-0
		{
			printf(" ");
		}
		for (j = 0; j < (2 * i + 1); j++)//上半部分星星的个数奇数增长
		{
			printf("*");
		}
		printf("\n");
	}
	for (i = 0; i < line - 1; i++)//下半部分
	{
		for (j = 0; j < i + 1; j++)//下半部分空格从一到六
		{
			printf(" ");
		}
		for (j = 0; j < (line - 2 - i) * 2 + 1; j++)//下半部分星星的个数根据我们所定义的变量来找其中的规律
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}
2.编写一个程序,验证所有花括号都正确成对出现。

问题分析:要判断括号是否匹配,可以设计一个计数器,当遇到左括号时,计数器加一,遇到右花括号时,计数器减一,计数器为0时,匹配成功,当然,这只是一般情况。除此之外,还要验证一些特殊情况,可能出现的一些情况如下图。这里我们可以使用getchar( )函数来进行输入内容的读取。

程序代码如下:

#include<stdio.h>

int main()
{
	int ch = 0;
	int count = 0;
	while ((ch = getchar()) != EOF)
	{
		if ((count == 0) && (ch == '}'))
		{
			printf("不匹配!\n");
			return;
		}
		if (ch == '{')
			count++;
		if (ch == '}')
			count--;
	}
	if (count == 0)
	{
		printf("匹配成功!\n");
	}
	else
	{
		printf("不匹配!\n");
	}
	return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值