C语言基础

    返回首页    发表留言
本文作者:李德强
          第三节 数组与字符串
 
 

        一、数组变量

        在上一节中我们学习了如何定义变量,例如定义一月的最多天数为31,则定义int max = 31;即可。但是如果我们有很多个变量需要定义,例如从一月到十二月的最大天数不尽相同,我们就需要定义12个变量,用于存放这些数值。在C语言中提供了一个方便定义同类型多个变量的方式,叫做数组。我们来看一下定义数组的代码:

 

int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

        最左侧的int仍然表示的是变量的类型是一个整数,days表示的是这个变量的名字,days右侧的一对中括号[ ]中的数值表示这个变量是一个数组,长度为12,也就是说它有12个类型相同的变量放在一起。再右侧的等号=表示对这个数组初始化值,再右侧{ 31, 28, 31, ... , 31 }表示这个数组中每一个元素的值,其实就是将这些值通过等号=赋值给这个数组中的变量中。

        我们可以使用变量名[下标]的方式来使用数组中的某一个元素,下标是从0开始的整数。例如下面代码显示了一月、二月和三月的天数:

 

printf("%2d %2d %2d\n", days[0], days[0], days[1]);

31 28 31

 

        就是说数组其实是一组变量,只不过在定义时用一个变量名来定义,使用时也用一个变量名来使用,通过中括号中的下标来使用不用的变量。

        接下来我们来编写一个可以显示12个月天数的程序(不考虑闰年的情况):

 

#include <stdio.h>
main()
{
	int days[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	int month = 0;
	while (month < 12)
	{
		printf("%2d / %2d\n", month + 1, days[month]);
		month = month + 1;
	}
}

 1 / 31
 2 / 28
 3 / 31
 4 / 30
 5 / 31
 6 / 30
 7 / 31
 8 / 31
 9 / 30
10 / 31
11 / 30
12 / 31

 

        我们来分析一下上面的程序,首先我们定义了一个具有12个int型元素的数组变量days,并为它们赋与了12个月份的天数。然后又定义了另一个月份的变量month,用于记录月份,需要注意的是我们需要用这个变量作为数组days的下标,用于在循环中显示数组中所有元素的值,由于数组的下标是从0开始的,所以month的初始值为0,每循环一次month的值在原有的基础上加1,但是为了让month显示成1~12而不是0~11,所以在printf函数中我们让其第一个参数显示为month + 1。

 

        二、字符与字符串

        下面我们来介绍另一种类型的变量char,这是一个字符型变量,也就是说它可以存放一个字符,使用等号=为其赋值时字符用单引号括起来。printf函数显示需要用%c字符型变量

 

char a = 'a';
char b = 'b';
printf("%c %c\n", a, b);
a = 'A';
b = 'B';
printf("%c %c\n", a, b);

a b
A B

 

        现在我们可以定义了字符型变量,下面我们想这样一个问题,如何来定义一个字符数组变量呢?我们首先能想到的就是用数组来定义,例如:

 

char string[5] = {'H','e','l','l','o'};

 

        然后再通过循环的方式用printf将这个数组的内容显示出来,这样做没有问题,但有一些麻烦。C语言中提供了另一种字符数组,也就是字符串的存放方式,直接用双引号来定义,在printf中使用%s来显示一个字符串:

 

char* string = "Hello World!";
printf("%s\n", string);

Hello World!

 

        请大家注意,这里的char类型后有一个星号* ,它表示的是这是一个指针型变量(关于指针我们会在后续章节中学习,暂时先不去考虑这个问题),我们把char*这种变量类型看成是一个字符串型变量,后面的string是这个变量的名字,然后是赋值号=,再右侧是双引号括起来的一段文字,也就是我们所说的字符串。

        最后,我们来定义12个月的名称(具有12个字符串类型变量的数组)和它们的最大天数(具有12个整型变量的数组),不考虑闰年的情况,使用循环将它们显示出来:

 

#include <stdio.h>
main()
{
	int m           = 0;
	char* month[12] = {     "January", "February", "March", "April"
                              , "May", "June", "July", "August"
                              , "September", "October", "November", "December" };
	int days[12]    = {      31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	while (m < 12)
	{
		printf("There is %2d days in %s\n", days[m], month[m]);
		m = m + 1;
	}
}

There is 31 days in January.
There is 28 days in February.
There is 31 days in March.
There is 30 days in April.
There is 31 days in May.
There is 30 days in June.
There is 31 days in July.
There is 31 days in August.
There is 30 days in September.
There is 31 days in October.
There is 30 days in November.
There is 31 days in December.


 

    返回首页    返回顶部
#1楼  1  于 2018年12月12日19:34:52 发表
 
显示一月二月三月的那个代码写错了吧..
  看不清?点击刷新

 

  Copyright © 2015-2023 问渠网 辽ICP备15013245号