数组程序基础知识

为了处理方便,把具有相同类型的变量按有序的形式组织起来。这些同类数据元素的集合称之为数组。数组可分为数值数组、字符数组、指针数组、结构数组等。

01--一维数组

在使用数组前需要先定义:

类型说明符 数组名[常量表达式];

类型说明符是基本数据类型或者构造数据类型

常量表达式表示数组元素的个数,或者说是数组的长度。

eg:  float x[4];   说明实型数组x,有4个元素,分别为x[0],x[1],x[2],x[3].下标从0开始

数组元素的一般形式为:

数组名[下标]

必须先要定义数组,才能使用下标变量

在C中只能逐个使用下标变量而不能一次用整个数组

例如有5个元素的数组必须使用循环语句逐个输出各个下标变量

for(i=0;i<4;I++) printf("%d",a[i]);

而不允许直接使用 printf("%d",a);

#include <stdio.h>
int main()

{

  int i,a[10];

  for(i=0;i<=9;i++)

    {  a[i]=i;
      printf("%d ",a[i]);}
      
  for(i=9;i>=0;i--)

      printf("%d ",a[i]);
  return 0;
}

#include <stdio.h>
int main()

{

  int i,a[10];

  for(i=0;i<10;)

      a[i++]=i;

  for(i=9;i>=0;i--)

      printf("%d",a[i]);
  return 0;
 }

#include <stdio.h>
int main()

{

  int i,a[10];

  for(i=0;i<10;i++)

      a[i]=2*i+1;

  for(i=0;i<=9;i++)

	  printf("%d ",a[i]);

  printf("\n%d %d\n",a[2],a[8]);
  return 0;
}

1.一维数组的初始化

一般形式为:  类型说明符 数组名[常量表达式]={值,值......,值};

int a[4]={0,1,2,3};  相当于a[0]=0,a[1]=1,a[2]=2,a[3]=3;

1)可以只赋值给部分元素

int a[5]={0,1};   表示只给a[0]=0,a[1]=1,其他元素均为0

2)只能逐个元素赋值,不可整体赋值

int a[3]={2,2,2};  不可写为int a[3]=2;

3)若给所有元素赋值,可不写出元素个数

int a[3]={2,2,2};  可写为int a[]={2,2,2}; 

#include <stdio.h>
int main()

{

  int i,max,a[5];

  printf("input 5 numbers:\n");

  for(i=0;i<5;i++)

      scanf("%d",&a[i]);

  max=a[0];

  for(i=1;i<5;i++)

      if(a[i]>max) max=a[i];

  printf("maxmum=%d\n",max);
  return 0;
}

#include <stdio.h>
int main()

{

  int i,j,p,q,s,a[10];

  printf("\n input 10 numbers:\n");

  for(i=0;i<10;i++)

      scanf("%d",&a[i]);

  for(i=0;i<10;i++){

      p=i;q=a[i];

      for(j=i+1;j<10;j++)

      if(q<a[j]) { p=j;q=a[j]; }

      if(i!=p)

        {s=a[i];

         a[i]=a[p];

         a[p]=s; }

      printf("%d ",a[i]);

  }
  return 0;
}

02--二维数组

一般形式:

类型说明符 数组名[常量表达式1][常量表达式2]

常量表达式1表示第一维下表长度,常量表达式2表示第二维下标长度

例: int x[2][3]  表示一个2行3列的数组,数组名为x,下标变量的类型为整型

共有2*3=6个元素   分别为:x[0][0],x[0][1],x[0][2],x[1][0],x[1][1],x[1][2],每个元素占用的空间都为int类型的大小

1.二维数组元素的引用

假设有4位同学的语数外成绩如下,打印出来求每科成绩的平均分及每个人的总分。

#include <stdio.h>
int main()
{
    int i,total;
    float c;
    int a[4][3]={{95,89,99},{93,92,95},{99,95,92},{91,97,94}};
    printf("Here are the scores of all the students!\n");
    printf("      穆山  穆川  沐枫  沐玥\n");
    printf("语文: ");  
    for(i=0;i<4;i++)
    printf("%d    ",a[i][0]);
    printf("\n数学: ");  
    for(i=0;i<4;i++)
    printf("%d    ",a[i][1]);
    printf("\n英语: ");  
    for(i=0;i<4;i++)
    printf("%d    ",a[i][2]);

    for(i=0,c=0;i<4;i++)
    c=c+a[i][0];
    c=c/4;
    printf("\n\n语文的平均分为:%4.2f    ",c);
    for(i=0,c=0;i<4;i++)
    c=c+a[i][1];
    c=c/4;
    printf("\n数学的平均分为:%4.2f    ",c);
    for(i=0,c=0;i<4;i++)
    c=c+a[i][2];
    c=c/4;
    printf("\n英语的平均分为:%4.2f    ",c);

    for(i=0,total=0;i<3;i++)
    total=total+a[0][i];
    printf("\n穆山的总分为:%d    ",total);
    for(i=0,total=0;i<3;i++)
    total=total+a[1][i];
    printf("\n穆川的总分为:%d    ",total);
    for(i=0,total=0;i<3;i++)
    total=total+a[2][i];
    printf("\n沐枫的总分为:%d    ",total);
    for(i=0,total=0;i<3;i++)
    total=total+a[3][i];
    printf("\n沐玥的总分为:%d    ",total);
}

上述如果用二维的变量表示可以改为如下代码,最后运行结果与上面一致

#include <stdio.h>
int main()
{
    int i,j;
    float c=0,s=0,v[3],t[4];
    int a[4][3]={{95,89,99},{93,92,95},{99,95,92},{91,97,94}};
    printf("Here are the scores of all the students!\n");
    printf("      穆山  穆川  沐枫  沐玥\n");
    printf("语文: ");  
    for(i=0;i<4;i++)
    printf("%d    ",a[i][0]);
    printf("\n数学: ");  
    for(i=0;i<4;i++)
    printf("%d    ",a[i][1]);
    printf("\n英语: ");  
    for(i=0;i<4;i++)
    printf("%d    ",a[i][2]);
    for(i=0;i<3;i++)
   {
      for(j=0;j<4;j++)
      c=c+a[j][i];
      v[i]=c/4;
      c=0;
   }
    printf("\n\n语文的平均分为:%4.2f    ",v[0]);
    printf("\n数学的平均分为:%4.2f    ",v[1]);
    printf("\n英语的平均分为:%4.2f    ",v[2]);
    for(i=0;i<4;i++)
   {
      for(j=0;j<3;j++)
      s=s+a[i][j];
      t[i]=s;
      s=0;
   }
    printf("\n穆山的总分为:%.2f    ",t[0]);
    printf("\n穆川的总分为:%.2f    ",t[1]);
    printf("\n沐枫的总分为:%.2f    ",t[2]);
    printf("\n沐玥的总分为:%.2f    ",t[3]);
}

1)可以只对部分元素赋初值,没有被赋值的元素自动取0

如: int a[2][3]={{1},{2}};

各个元素的值为 

1 0 0

2 0 0

2)如果对全部元素赋值了,则一维的长度可以不写

如: int a[2][3]={0,1,2,3,4,5}; 可写为int a[][3]={0,1,2,3,4,5};

3)C语言允许二维数组分解为多个一维数组

如二维数组a[3][4]可以分为3个一维数组,其数组名分别为:

a[0] , a[1] , a[2]

上面每个数组又有4个元素,比如a[0]有 a[0][0],a[0][1],a[0][2],a[0][3]

03--字符数组

形式与前面的数值数组相同

char c[5];

字符数组也可以数二维或者多维数组

char c[2][3]

字符数组的初始化

char c[]={'a','f','c',' ','l'};  长度为5

#include <stdio.h>
int main()
{
  int i,j;
  char a[][5]={{'H','e','l','l','o',},{'W','o','r','l','d'}};

  for(i=0;i<=1;i++)
    {
      for(j=0;j<=4;j++)
          printf("%c",a[i][j]);
      printf("\n");
    }
	return 0;
}

C语言允许用字符串的方式对数组作初始化赋值

例如:

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

可以写为:char c[]={"Hello"};

或者为char c[]="Hello"

用字符串方式赋值要比用字符逐个赋值要多占一个字节,多个字节用于存放字符串结束标志'\0'

#include <stdio.h>
int main()

{

  char c[]="Hello\nWorld";

  printf("%s\n",c);
  return 0;
}

由于使用的是"%s"字符串进行输出,只用写数组名就可以了,不可写为
  printf("%s\n",c[]);

#include <stdio.h>
int main()

{

  char st[15];

  printf("input string:\n");

  scanf("%s",st);

  printf("%s\n",st);
  return 0;
}

当用scanf函数输入字符串时,中间不能有空格,否则空格将作为结束符

可作如下改进:

#include <stdio.h>
int main()

{

  char st1[6],st2[6],st3[6],st4[6];

  printf("input string:\n");

  scanf("%s%s%s%s",st1,st2,st3,st4);

  printf("%s %s %s %s\n",st1,st2,st3,st4);
  return 0;
}

scanf一般以地址的方式出现,但在上面例子中没有使用&,这是因为C语言规定,数组名就代表了该数组的首地址

如: char c[5];  写作scanf("%s",&c);是错误的,只能写为scanf("%s",c);或者scanf("%s",&c[0]);

04--字符串处理函数

用于输入输出的字符串函数,需要包含头文件"stdio.h"

其他字符串函数需要包含头文件"string.h“

1.字符串输出函数 puts

格式: puts(字符数组名)

功能:把字符数组中的字符串输出到显示器

#include"stdio.h"

int main()

{

  char c[]="Hello\nWorld";

  puts(c);
  return 0;
}

2.字符串输入函数 gets

格式: gets(字符数组名)

功能:输入设备上输入一个字符串

#include"stdio.h"

int main()

{

  char st[15];

  printf("input string:\n");

  gets(st);

  puts(st);
  return 0;
}

3.字符串连接函数 strcat

格式: strcat(字符数组名1,字符数组名2)

功能:把字符数组2中的字符串连接到字符数组1中字符串后面,并删去字符串1后的"\0"

#include"stdio.h"
#include"string.h"
int main()
{
  static char st1[30]="My name is ";
  char st2[10];
  printf("input your name:\n");
  gets(st2);
  strcat(st1,st2);

  puts(st1);
  return 0;
}

4.字符串拷贝函数 strcpy

格式: strcpy(字符数组名1,字符数组名2)

功能:把字符数组2中的字符串拷贝到字符数组1中,串结束标志"\0"一起拷贝。相当于把一个字符串赋予一个字符数组。

#include"stdio.h"
#include"string.h"

int main()

{

  char st1[15]="I love you",st2[]="C Language";

  strcpy(st1,st2);

  puts(st1);printf("\n");
  return 0;
}

5.字符串比较函数 strcmp

格式: strcmp(字符数组名1,字符数组名2)

功能:按照ASCII顺序比较两个数组中的字符串,字符串1=字符串2,返回值=0;

字符串1>字符串2,返回值>0;字符串1<字符串2,返回值<0;

#include"stdio.h"
#include"string.h"

int main()
{ int k;
  static char st1[15],st2[]="C Language";
  printf("input a string:\n");
  gets(st1);
  k=strcmp(st1,st2);
  if(k==0) printf("st1=st2\n");
  if(k>0) printf("st1>st2\n");
  if(k<0) printf("st1<st2\n");
  return 0;
}

6.字符串长度函数 strlen

格式: strlen(字符数组名)

功能:测字符串的实际长度(不含结束标志'\0')并作为函数返回值

#include"stdio.h"
#include"string.h"

int main()

{ int k;

  static char st[]="C language";

  k=strlen(st);

  printf("The lenth of the string is %d\n",k);
  return 0;
}

#include"stdio.h"
#include"string.h"
int main()

{
    char st[20],cs[5][20];
    int i,j,p;
    printf("input country's name:\n");

    for(i=0;i<5;i++)
      gets(cs[i]);

    printf("\n");
    for(i=0;i<5;i++)
      { p=i;strcpy(st,cs[i]);
    for(j=i+1;j<5;j++)
      if(strcmp(cs[j],st)<0) {p=j;strcpy(st,cs[j]);}
    if(p!=i)
      {
	    strcpy(st,cs[i]);	
	    strcpy(cs[i],cs[p]);	
	    strcpy(cs[p],st);
      }
    puts(cs[i]);}printf("\n");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值