您的位置:首页 > 娱乐 > 明星 > 数组程序基础知识

数组程序基础知识

2024/12/22 13:40:53 来源:https://blog.csdn.net/BlueBachke/article/details/141885279  浏览:    关键词:数组程序基础知识

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

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;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com