在屏幕上输出以" * "构成的菱形
2016-10-12 20:33
211 查看
思考思路:
1: 图像里星星最多的一行有13个' * ',其他行的' * '都是与它有一定关系的锐减(相邻两行' * '相差2)
那么我们是否可以创建一个13个元素的数组?每一行的最中间开始向两边输出' * '
2:按照这个思路,我们考虑怎么让每一行输出我们想要的' * '
/* 考虑第一行 星星出现在第7个的位置
/* 第二行 星星出现在第6 7 8 三个位置
。。。。。。。。
那么我们可以定义一个13个空格的数组,再设定字符 ' * '(后面统称星号)
/* 考虑第一行 把星号赋给第一行的第7个位置的地方 即数组的下标为6的元素
/* 第二行 星星赋给第二行6 7 8 三个位置的地方 即数组的下标为5 6 7的元素
。。。。。。。。。。
3:采用for循环,定义下标为i j ,同时从中间位置向两边输出,每次 i++,j--
那么for循环中的初始化部分该怎么写呢?
每一行中心位置在数组中的下标为6,那么i = 6 ,j = 6
循环次数的控制怎么实现?
当 i j向两边移动到最左和最右时,i = 0 ,j = 12
并且两者呈对称的!即当 i =0 时 j =12 所以只需要一个来控制就好
4:重点问题(\0的使用):
定义13个元素均为空格的数组
很多人这样定义: char arr1[13]={' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '} ;
或者
char arr1[13]=" "; // 含13个空格
兄弟姐妹们,那你们就GG拉,眼见为实
输出的结果为:
这是为什么呢?
其实很简单,字符型数组呢,vS2008在输出的时候是呢 是从数组元素的第一个数组开始输出,并且还看下一个元素是否为' \0 ',如果为'\0'则停止输出,在我们的定义中13个元素均为空格,电脑一个个查,查到最后一个空格,它发现没有'\0',那就继续输出,但是已经超出数组大小,于是就出现了乱码!
VS2008对于'\0'的处理是这样的!
当你定义一个数组
char arr[7]="abcd"; 很显然只有四个元素,我们的编程系统会默认后面的元素为'\0'
或者这样也可以定义一个四元素数组
chararr[5]={'a','b','c','d'}; 人为的在元素里面定义一个'\0'的元素,电脑查到'\0'就终止往下输出啦
代码实现:
#include<stdio.h>
int main()
{
int i = 0 ,j = 0 ,a = 0 ;
char arr1[14]={' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','\0'} ; // 输入13个空格
for(i=6,j=6;j>=0;i++,j--)
{
arr1[i]='*';
arr1[j]='*';
printf("%s\n",arr1);
}
for(i=0,j=12;i<=j;i++,j--)
{
arr1[i]=' ';
arr1[j]=' ';
printf("%s\n",arr1);
}
system("pause");
return 0;
}
相关文章推荐
- 在屏幕上用"*"输出菱形图案
- 在屏幕上用"*"输出菱形图案
- 用"*"输出一个菱形:
- 在屏幕上输出星号组成的菱形图案。
- Windows驱动开发WDM (5)- DeviceIoControl(直接方式交互"输出buffer")
- "Mac OS X"录屏幕视频并转成gif
- "一次实现"可以在某些场合替代菱形继承?
- 安卓6.0关于悬浮窗导致"检测到屏幕叠加层"的开发端解决方案
- C语言 在屏幕上输出菱形图案
- 编写一个程序,接受用户输入的一段英文文字后,输出其中的字符数、单词数和句子数(设句子以"?"、"!"、"."结束)。
- C#在屏幕上输出一个5行5列的菱形
- matlab 出现 调用 "function1" 时,未对输出参数 "average" (可能还包括其他参数)赋值
- 在屏幕上输出一个菱形图案
- "aadfsdfdsfdsafafsafsawerewolfasd" ,不仅要输出出现过的字符还要输出每个字符出现了多少次
- 18,接收用户输入的一句英文,将其中的单词以反序输出。“hello c sharp”-"sharp c hello"
- 在屏幕上用“*”输出指定行数的菱形图案
- 无法直接启动带有"类库输出类型"的项目
- 如何编写程序,在屏幕上输出菱形图案?
- 深入剖析printf函数(上):如何不借助第三方库在屏幕上输出"Hello World"?
- 无法直接启动带有"类库输出类型"的项目