文章目录
一、定义
在内存中开辟连续空间,即
相同数据类型;地址空间连续。
二、数组初始化
1、大多情况下,数组在定义时必须确定大小
#include <stdio.h>
int main()
{
int num;
int i;
printf("需要录入的学生人数?\n");
scanf("%d",&num);
int array[num];
//int array[num];
for(i=0;i<num;i++){
printf("请输入第%d个学生的成绩\n",i+1);
scanf("%d",&array[i]);
}
printf("这些学生的成绩是:");
for(i=0;i<num;i++){
printf("%d ",array[i]);
}
return 0;
}
这样程序的执行虽无问题,但却是一个不好的习惯。
C语言变量的定义最好要放在开头,否则有时候编译器会报错的,就是要先定义完变量,再做其他事。(是的,但这通常是发生在写32,51上,Keil的C51所采用的C标准是一个较早期的标准,在程序书写上有较多的限制。)
而在gcc编译器中变量的定义却可以放在程序任何位置。
想动态赋值,可以用指针
#include <stdlib.h>
#include <string.h>
int main()
{
int num;
int i;
int *parray = NULL;//防止野指针
printf("需要录入的学生人数?\n");
scanf("%d",&num);
// 游标卡尺 开辟空间大小
parray = (int *)malloc(sizeof(int) * num);//开辟空间 字节为单位 malloc前相当于游标卡尺
memset(parray,0,sizeof(int) * num);//空间初始化
for(i=0;i<num;i++){
printf("请输入第%d个学生的成绩\n",i+1);
scanf("%d",parray++);
}
printf("这些学生的成绩是:");
parray -= num;//指针回调,少了这个输出都是0
for(i=0;i<num;i++){
printf("%d ",*parray++);
}
return 0;
}
2、数组的定义在下面三种情况下不需要指明大小
①数组是形式参数
②数组声明的同时进行了初始化
int a[] = {0,1,2,3};
③数组的存储类型为extern
3、不能直接给数组赋值字符串
错误示范:
#include <stdio.h>
int main()
{
char array[128] = {0};
array = "cpcp shuai";
printf("%s\n",array);
return 0;
}
提示错误:对具有数组类型的表达式赋值
error: assignment to expression with array type
用strcpy函数
#include <stdio.h>
#include <string.h>
int main()
{
char array[128] = {0};
strcpy(array,"cpcc shuai");
printf("%s\n",array);
return 0;
}
三、数组简单应用
1、斐波那契数列
斐波那契数列是一组第一位和第二位为1,从第三位开始,后一位是前两位和的一组递增数列,
像这样的:1、1、2、3、5、8、13、21、34、55…
#include<stdio.h>
void main(){
int i,n;
int f[128]={1,1};
printf("请输入斐波那契数列的通项:");
scanf("%d",&n);
printf("%d,%d",f[0],f[1]);
for(i=2;i<n;i++){
f[i]=f[i-2]+f[i-1];
printf(",%d",f[i]);
}
}
2、冒泡排序
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arry[8] = {312,2,4,6,3,65,64,13};
int len;
int i;
int j;
int tmp;
len = sizeof(arry)/sizeof(arry[0]);
for(i=0;i<len-1;i++){
for(j=0;j<len-i-1;j++){
if(arry[j]<arry[j+1]){
tmp = arry[j];
arry[j] = arry[j+1];
arry[j+1] = tmp;
}
}
}
for(i=0;i<len;i++){
printf("%d ",arry[i]);
}
return 0;
}
3、选择排序
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arry[8] = {312,2,4,6,3,65,64,13};
int len;
int i;
int j;
int tmp;
len = sizeof(arry)/sizeof(arry[0]);
for(i=0;i<len-1;i++){
for(j=i+1;j<len;j++){
if(arry[i]<arry[j]){
tmp = arry[j];
arry[j] = arry[i];
arry[i] = tmp;
}
}
}
for(i=0;i<len;i++){
printf("%d ",arry[i]);
}
return 0;
}