在设计中为了处理方便把具有相同类型若干变量按有序形式组织起来这些按序排列同类数据元素集合称为在C语言中属于构造数据类型个可以分解为多个元素这些元素可以是基本数据类型或是构造类型因此按元素类型区别又可分为数值、、指针、结构等各种类别
本章介绍数值和其余在以后各章陆续介绍类型介绍说明在C语言中使用必须先进行类型介绍说明介绍说明般形式为:
类型介绍说明符名[常量表达式]……;
其中类型介绍说明符是任种基本数据类型或构造数据类型名是用户定义标识符方括号中常量表达式表示数据元素个数也称为长度
例如:
a[10];介绍说明整型a有10个元素
floatb[10],c[20];介绍说明实型b有10个元素实型c有20个元素
charch[20];介绍说明ch有20个元素
对于类型介绍说明应注意以下几点:
1.类型实际上是指元素取值类型对于同个其所有元素数据类型都是相同
2.名书写规则应符合标识符书写规定
3.名不能和其它变量名相同例如:
void
{
a;
floata[10];
……
}
是
4.方括号中常量表达式表示元素个数如a[5]表示a有5个元素但是其下标从0开始计算因此5个元素分别为a[0],a[1],a[2],a[3],a[4]
5.不能在方括号中用变量来表示元素个数但是可以是符号常数或常量表达式例如:
#FD5
void
{
a[32],b[7FD];
……
}
是合法但是下述介绍说明方式是
void
{
n=5;
a[n];
……
}
6.允许在同个类型介绍说明中介绍说明多个和多个变量
例如:a,b,c,d,k1[10],k2[20];
元素表示思路方法
元素是组成基本单元元素也是种变量其标识思路方法为名后跟个下标下标表示了元素在中顺序号元素般形式为:名[下标]其中下标只能为整型常量或整型表达式如为小数时C编译将自动取整例如a[5],a[ij],a[i]都是合法元素元素通常也称为下标变量必须先定义才能使用下标变量在C语言中只能逐个地使用下标变量而不能次引用整个例如输出有10个元素必须使用循环语句逐个输出各下标变量:
for(i=0;i<10;i) prf("%d",a[i]);
而不能用个语句输出整个下面写法是:
prf("%d",a);
void
{
i,a[10];
for(i=0;i<10;)
a[i]=2*i1;
for(i=9;i>=0;i--)
prf("%d",a[i]);
prf("\\n%d%d\\n",a[5.2],a[5.8]);
}
for(i=0;i<10;)
a[i]=2*i1;
for(i=9;i>=0;i--)
prf("%d",a[i]);
prf("\\n%d%d\\n",a[5.2],a[5.8]);
本例中用个循环语句给a各元素送入奇数值然后用第 2个循环语句从大到小输出各个奇数在第个for语句中表达式3省略了在下标变量中使用了表达式i用以修改循环变量当然第 2个for语句也可以这样作C语言允许用表达式表示下标中最后个prf语句输出了两次a[5]值可以看出当下标不为整数时将自动取整赋值给赋值思路方法除了用赋值语句对元素逐个赋值外还可采用化赋值和动态赋值思路方法化赋值化赋值是指在介绍说明时给元素赋予初值化是在编译阶段进行这样将减少运行时间提高效率
化赋值般形式为:类型介绍说明符名[常量表达式]={值值……值};其中表示是静态存储类型C语言规定只有静态存储和外部存储才可作化赋值(有关静态存储外部存储概念在第 5章中介绍)在{}中各数据值即为各元素初值各值的间用逗号间隔例如:a[10]={0,1,2,3,4,5,6,7,8,9};相当于a[0]=0;a[1]=1...a[9]=9;
C语言对赋值还有以下几点规定:
1.可以只给部分元素赋初值当{}中值个数少于元素个数时只给前面部分元素赋值例如:a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值而后5个元素自动赋0值
2.只能给元素逐个赋值不能给整体赋值例如给十个元素全部赋1值只能写为:
a[10]={1,1,1,1,1,1,1,1,1,1};
而不能写为:
a[10]=1;
3.如不给可化赋初值则全部元素均为0值
4.如给全部元素赋值则在介绍说明中可以不给出元素个数例如:
a[5]={1,2,3,4,5};
可写为:
a={1,2,3,4,5};
动态赋值可以在执行过程中对作动态赋值这时可用循环语句配合scanf逐个对元素赋值
void
{
i,max,a[10];
prf("input10numbers:\\
n");
for(i=0;i<10;i)
scanf("%d",&a[i]);
max=a[0];
for(i=1;i<10;i)
(a[i]>max)max=a[i];
prf("maxmum=%d\\n",max);
}
for(i=0;i<10;i)
scanf("%d",&a[i]);
max=a[0];
for(i=1;i<10;i)
(a[i]>max)max=a[i];
prf("maxmum=%d\\n",max);
本例中第个for语句逐个输入10个数到a中然后把a[0]送入max中在第 2个for语句中从a[1]到a[9]逐个和max中内容比较若比max值大则把该下标变量送入max中因此max总是在已比较过下标变量中为最大者比较结束输出max值
void
{
i,j,p,q,s,a[10];
prf("\\ninput10numbers:\\n");
for(i=0;i<10;i)
scanf("%d",&a[i]);
for(i=0;i<10;i){
p=i;q=a[i];
for(j=i1;j<10;j)
(q<a[j]){p=j;q=a[j];}
(i!=p)
{
s=a[i];
a[i]=a[p];
a[p]=s;
}
prf("%d",a[i]);
}
}
for(i=0;i<10;i)
scanf("%d",&a[i]);
for(i=0;i<10;i){
p=i;q=a[i];
for(j=i1;j<10;j)
(q<a[j]){p=j;q=a[j];}
(i!=p)
{
s=a[i];
a[i]=a[p];
a[p]=s;
}
prf("%d",a[i]);
}
本例中用了两个并列for循环语句在第 2个for语句中又嵌套了个循环语句第个for语句用于输入10个元素初值第 2个for语句用于排序本排序采用逐个比较思路方法进行在i次循环时把第个元素下标i赋于p而把该下标变量值a[i]赋于q然后进入小循环从a[i1]起到最后个元素止逐个和a[i]作比较有比a[i]大者则将其下标送p元素值送q次循环结束后p即为最大元素下标q则为该元素值若此时i≠p介绍说明p,q值均已不是进入小循环的前所赋的值则交换a[i]和a[p]的值此时a[i]为已排序完毕元素输出该值的后转入下次循环对i1以后各个元素排序
最新评论