简单的数据类型:整型、实型、字符型
构造型数据:1.数组
2.结构体、联合体
3.链表
-->数组分类:
*** 一维数组
*** 二维数组
*** 多维数组
第一部分:一维数组
1.一维数组的定义、引用、赋值
---》一维数组定义的一般形式:
类型名  数组名[常量表达式];
例如:int  a[8];
int  ---  说明该数组中每个元素都是int.
a    ---  数组名,是用户自定义,数组名是一个地址常量。
8    ---  常量表达式。说明该数组中含有8个元素。这八个元素为 a[0]~a[7]
---->数组元素的下标总是从0开始,就把下标0叫做该数组下标的下界。把下标7叫做该数组下标的上界。
---》当定义该数组的时候,计算机的编译系统将根据定义的类型在内存中为该数组开辟一片连续的空间。
---》定义多个数组:
double a[8],b[100],w[300];
-->和其他变量一起定义:
int  a,w[100],*p;
2.一维数组的引用:
数组名[常量表达式]
--》例如:int  a[8],i;  (i>=0&&i<=7)
a[i]----->对数组元素的引用。
--》数组名不能代表数组的整个元素,数组名是一个地址常量。代表了改数组的首地址。
-->常量表达式不能超出规定的范围。
int  a[8],i,k;
a[i+k]--->保证i+k的值要小于8
3.在定义的同时给一维数组赋值:
1)完全赋值:
例如: int a[8]={1,2,3,4,5,6,7,8};
---把所赋的值放在一对花括号中,元素间用逗号进行分隔。
--- 所赋的值的类型要和定义的类型一致。
--- 所赋的值的个数不能超出规定的个数。
---》计算机的编译系统将自动的把a[0]=1,a[1]=2....a[7]=8;
2)不完全赋值:
****数值型
int a[8]={1,2,3,4};
---等价于: int a[8]={1,2,3,4,0,0,0,0};
****字符型:
char  a[5]={'A','B','C'};
-
--等价于: char a[5]={'A','B','C','\0','\0'};
3)通过完全赋值可以确定一维的大小:
int  a[]={0,0,0,0,0,0,0,0};
----等价于: int a[8]={0};
---->要浏览一维数组中的每个元素,可以用一个for就可以实现:
int a[8],i;
for(i=0;i<8;i++) 
--->编写一个函数,定义一个含有30个int元素的一维数组,分别给数组中的元素赋:1、3、5、7....
然后按每行10个顺序输出数组中各个元素的值,再按每行10个逆序输出数组中元素的值。
#include <stdio.h>
#define  M  30
void main()
{int  a[M],i ;
//以下程序给数组赋值:
for(i=0;i<M;i++) a[i]=2*i+1;
//以下语句完成数组中元素的顺序输出。
for(i=0;i<M;i++)
{printf("%4d",a[i]);
if( (i+1) %10==0) printf("\n");c语言写入txt文件
}
printf("*******************************\n");
//以下语句完成数组中元素逆向输出。
for(i=M-1;i>=0;i--)
{ printf("%4d",a[i]);
if(i%10==0) printf("\n");
}
printf("\n");
}
第二部分:一维数组和指针
一维数组的地
址:把该数组的第一个元素的地址就叫做该数组的地址。也叫做首地址。
例如: int a[8];  -----  &a[0]
--->当定义了某个数组的时候,数组名就确定了。数组名是一个地址常量,表示该数组的第一个元素的地址。 a---表示 &a[0]
---数组名是一个常量,就不能给其赋值。
int a[8],x;
a=x;(是错误的,常量是不能赋值)
a=a+1(也是错误的)
---》int  a[8],*p;
p=a;//p=&a[0];
a+1与p+1
***a+1表示针对当前位置的后一个位置元素的地址
p+1表示指针从当前位置向后移动一个存储单元。
-------------------------------》
对数组元素引用的几种形式:
int  a[8],i,*p;
一般形式:  a[i]
首地址      *(a+i)
p=a;
带下标的指针:  p[i]
用指针的形式:  *(p+i)
第三部分:一维数组和函数
1.数组元素作为实参:数组中的每个元素都相当于一个变量。代表一个存储单元。数组元素的传递就是变量元素的传递一样。
#include <stdio.h>
#define  M  3
int fun(int x,int y,int z)
{ int s;
s=x+y+z;
return s;
}
void main()
{int a[M]={11,22,33},s;
s=fun(a[0],a[1],a[2]);
printf("s=%d\n",s);
}
----------------->
#include <stdio.h>
#define  M  3
void fun(int x,int y,int z,int *s)
{  *s=x+y+z; }
void main()
{int a[M]={11,22,33},s;
fun(a[0],a[1],a[2],&s);
printf("s=%d\n",s);
}
2.数组名作为实参:对应的形参为:(1)*a
(2)a[]
(3)a[M]
-
-编写函数,给一个含所有8个元素的数组赋随机值,然后再主函数输出元素的值。
#include <stdio.h>
#include <stdlib.h>
#define  M    8
void fun(int *a)
{int i;
for(i=0;i<M;i++) a[i]=rand()%50;
}
void main()
{int a[M],i;
fun(a);
for(i=0;i<M;i++)printf("%4d",a[i]);
printf("\n");
}
--->
例如2:
#include <stdio.h>
#define  M  8
void fun(char  b[], int n)
{int i;
for(i=0;i<n;i++) b[i]='*';
}
void main()
{char  a[M]={'A','B','C','D','E','F','G','H'};
int  i;
for(i=0;i<M;i++) printf("%3c",a[i]);
printf("\n");
fun(a,4);
for(i=0;i<M;i++) printf("%3c",a[i]);
printf("\n");
}
3.数组元素的地址作为实参:
#include <stdio.h>
#define  M  8
void fun(char  *b , int n)
{int i;
for(i=0;i<n;i++) b[i]='*';
}
void main()
{char  a[M]={'A','B','C','D','E','F','G','H'};
int  i;
for(i=0;i<M;i++) printf("%3c",a[i]);
printf("\n");
fun(&a[2],4);
for(i=0;i<M;i++) printf("%3c",a[i]);
printf("\n");
}
第四部分: 一维数组的简单应用:
1.编写程序:定义一个含有15个元素的数组,完成以下操作:
---调用C库函数中的随机函数给所有元素赋以0~50之间的随机数。
---输出数组元素中的值
---按顺序对每隔三个数求一个和数,并传回主函数。
---最后输出所求的和值
#include <stdio.h>
#include <stdlib.h>
#define  M    15
int  fun(
int * int *);
void main()
{int a[M],b[M],i,k;
//以下语句来给数组赋值
for(i=0;i<M;i++) a[i]=rand()%50;
//以下语句用来输出数组元素的值
for(i=0;i<M;i++)  printf("%d",a[i]);
printf("\n");
//以下程序对数组中元素每3个求和放在b中。
k=fun(a,b);
//输出b数组中和值
for(i=0;i<k;i++) printf("%4d",b[i]);
printf("\n");
}
int  fun(int *a,int *b)
{int i,s=0,k=0;
for(i=0;i<M;i++)
{s=s+a[i];
if((i+1)%3==0){ b[k++]=s;s=0;}
}
return k;
}
1 2 3  3 4 1    5 7 8    5 6 3    4 5 7 
#include <stdio.h>
#include <stdlib.h>
#define  M    15
void fff(int *a)
{int i;
for(i=0;i<M;i++) a[i]=rand()%50;
}
void printf_fff(int *a)
{int i;
for(i=0;i<M;i++) printf("%4d",a[i]);
printf("\n********************************\n");
}
int fun(int *a,int *b)
{ int s=0,i,k=0;
for(i=0;i<M;i++)
{ s+=a[i];
if((i+1)%3==0) {b[k++]=s;s=0;}
}
return k;
}
void main()
{int  a[M],b[M],k,i;
fff(a);
printf_fff(a);
k=fun(a,b);
for(i=0;i<k;i++) printf("%4d",b[i]);
printf("\n");
}
1 2 3  3 4 1    5 7 8    5 6 3    4 5 7 
b[0]    b[1]    b[2]      b[3]    b[4]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。