【项目任务】
输出一个钻石图形。
*
* *
* *
* *
*
【设计思路】
利用二维数组存放字符型变量‘*’或者‘ ’,利用双层循环输出。
【程序代码】
#include <stdio.h>
main()
{
char diamond[][5]={ {' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},
{' ','*',' ','*'},{' ',' ','*'}
};
int i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%c",diamond[i][j]);
printf("\n");
}
}
【运行结果】
*
* *
* *
* *
*
【知识拓展】
1.字符数组的初始化和数值型变量数组的初始化类似,只是每个字符要用‘’括起来。
2.如果给字符串数组赋值的初始值个数比字符串数组的长度短,则将后面的元素自动赋值为‘\0’;即空字符;相反则按语法错误处理。如char string[7]={‘h’,‘e’,‘l’,‘l’,‘o’};,赋值完成后a[0]~a[4]被赋值为hello,而后面的a[5]=‘\0’,a[6]=‘\0’。
3.如果初始化时,char diamond[ ][5]=…,即第一维没有写数值,则后面的赋值有几行就将diamond赋值成几行。
【项目任务】
输入一行字符,统计其中有多少个单词,单词之间用空格分隔。
【设计思路】
单词的数目可以由空格出现的次数决定(连续的若干个空格作为出现一次空格;一行开头的空格不统计在内)。如果测出某一个字符为非空格,而它前面的字符是空格,则表示“新的单词开始了”,此时使num(单词数)累加1。如果当前字符为非空格而其前面的字符也是非空格,则意味着仍然是原来那个单词的继续,num不应再累加1。前面一个字符是否为空格,可以从word的值来看:若word等于0,则表示前一个字符是空格;如果word等于1,则意味着前一个字符为非空格。
【程序代码】
#include<stdio.h>
main()
{
char string[81];
int i,num=0,word=0;
char c;
gets(string);
for(i=0;(c=string[i])!='\0';i++)
if(c==' ') word=0;
else if(word==0)
{
word=1;
num++;
}
printf("There are %d words in the line.\n",num);
}
【运行结果】
I am a boy!
There are 4 words in the line.
【知识拓展】
1.字符串输入函数gets(string)可以一次性读入屏幕上的一个字符串,并在字符串尾部(而不是初始化时的所有未赋值元素)加上一个'\0',然后放入字符串数组string中。与它相反的有字符串输出函数puts(string)。而字符输入/输出函数则有c=getchar(c)和putchar(c)。
2.本程序中的for循环中的判断语句(c=string[i])!='\0'做了两个动作:c=string[i],然后判断c!= '\0',这以往使用的i<n不一样。由此看出,for循环的中间部分只要是一个判断语句即可,并不一定是常见的i<n的格式。
3.字符串最后的‘\0’常被作为字符串结束的标志,如程序的循环正是利用'\0'判断出字符串结束的。
4.++是自加符号,将前面的操作数自身加1。
5.字符串数组的使用要注意两点:一点是字符串数组有效元素的最后是'\0';另一点是字符串数组元素是字符,要用' '修饰。
数组是有序数据的集合,数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来唯一地确定数组中的元素。数组可以帮助我们解决许多现实中的问题,如数列、矩阵等。字符数组还可以用来存放字符串,处理与字符串相关的问题,如将字符串逆序排列,统计单词个数等问题。总的来说,数组是一个非基本数据类型,它可以将多个相同的基本数据类型的数据组织起来,解决实际中的许多问题。