五大板块(1)—— 数组

一、定义

在内存中开辟连续空间,即
相同数据类型;地址空间连续。

二、数组初始化

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值