IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言-数组 -> 正文阅读

[C++知识库]C语言-数组

数组的引入

数组是基于处理大量同类型数据的目的来使用的,且处理时不关心数据名称

1、数组是数据的集合
2、数组的数据是同类型的 都是整数1-100,就不能是1.1,1.2,1.3
3、数组的地址是连续的

#include <stdio.h>

int main()
{
	int i;
    int sum = 0;
    int array[50];//定义一个能放置100个数据的数组
    
    for(i=1;i<=50;i++){
		array[i-1] = i;
    }//把1到100的整数数值赋值给到array数组
    
    for(i=0;i<50;i++){
		sum+=array[i];
    }//计算1到100的和
    printf("1+2+.....+49+50=%d\n",sum);
    
    system("pause");
    return 0;
}

数组的定义和访问

数组的定义

  • 数组类型
  • 数组名
  • 数组大小

int array[10];

没有初始化的数组,仅仅是申请了10个连续的整型数内存空间

int array[3] = {1,2,3};

有初始化数组,完整初始化,该数组申请了3个整型数内存空间,并赋值3个数1,2,3

int array[10] = {1,2,3};

有初始化数组,不完整初始化,该数组申请了10个整型数内存空间,但只赋值3个数1,2,3。放在了数组前3个位置

int n;
n=10;
int array[n];

实际应用过程中在样的写法无报错,可使用。但在一些教材中认定为非法

这样定义时数组不能在定义数组时就初始化
如:
int n;
n=10;
int array[n] = {0};

最好的数组定义是需要初始化的
如:
int array[10] = {0};
把数组的所有元素初始化为0。

数组的单独访问

1、数组通过下标的方式来引用当中的元素

2、数组的中括号 [ ] 只有在定义一个数组的时候,才表示数组大小,其余任何情况都表示用下标访问数组

printf(“数组的第二项元素是%d\n”,array[1]);

  • 需要注意的是外国人把数组的排列顺序是从零开始的

int array[3] = {1,2,3};

  • 访问写法
  • 第一个数据
    • array[0]
  • 第二个数据
    • array[1]
  • 第三个数据
    • array[2]

循环的方式历遍数组

死脑筋的访问数组写法

#include <stdio.h>

int main()
{
	int array[3] = {1,2,3};

	printf("数组的第一项元素是%d\n",array[0]);
	printf("数组的第二项元素是%d\n",array[1]);
	printf("数组的第三项元素是%d\n",array[2]);
	
    system("pause");
    return 0;
}

这种写法就有违背数组的意义,所以需要通过循环的方式来一次性访问数组

for循环历遍访问数组

#include <stdio.h>

int main()
{
	int array[3] = {1,2,3};
	int i;
	for(i=0;i<3;i++){
		printf("数组的第%d项元素是%d\n",i+1,array[i]);
	}
    
    system("pause");
    return 0;
}

数组应用初始化及找大小

#include <stdio.h>

int main()
{
	int n = 0;
    printf("需要录入几个学生分数:");
    scanf("%d",&n);
	int array[n];
	int i;
    
	for(i=0;i<n;i++){
		printf("请输入第%d个学生的分数:",i+1);
        scanf("%d",&array[i]);
        if(array[i] > 100 || array[i] < 0){ //满足其中一项就执行
			printf("非法分数!\n强制退出!\n");
            system("pause");
            exit(-1);
        }
	}
    for(i=0;i<n;i++){
		printf("第%d个学生的分数是:%d\n",i+1,array[i]);
	}
    int max;
    max = array[0];
    for(i=0;i<n;i++){
		if(max < array[i]){
			max = array[i];
        }
	}
    printf("最高分max=%d\n",max);
    int min;
    min = array[0];
    for(i=0;i<n;i++){
		if(min > array[i]){
			min = array[i];
        }
	}
    printf("最低分min=%d\n",min);
    int total = 0;
    float average;
    for(i=0;i<n;i++){
		total +=array[i];
        //total = total + array[i];
    }
    average = (float)total/n;
    printf("%d个学生总分total=%d\n",n,total);
    printf("平均分average=%f\n",average);
    
    system("pause");
    return 0;
}

数组于函数间的应用

putchar('\n');
输出一个字符

getchar();
获取一个字符,可以用来过滤回车

1、数组在跟函数结合时,数组名可以当做实际参数传给函数的形参

数组结合函数基本运用

#include <stdio.h>

void arrayPrint(int datas[3])
{
	int i;
    for(i=0;i<3;i++){
		printf("array[%d]=%d\n",i,datas[i]);
    }
    //putchar('\n');
}

void hasParams(int a,int b,char c)
{
	printf("a=%d,b=%d,c=%c\n",a,b,c);
}

void noParams()
{
	printf("xxx\n");
}

int main()
{
	int array[3] = {1,2,3};
	noParams();
    hasParams(1,2,'u');
    hasParams(array[0],array[1],'a');
    
    arrayPrint(array);
    
    system("pause");
    return 0;
}

计算数组元素的个数

int a[3];
一个整型数占用内存空间4个字节,3个占用12个字节

char b[3];
一个char型占用内存空间1个字节,3个占用3个字节

两个数组元素个数都为3个,但因为是不同的类型,所以内存的大小不同

sizeof(a);

sizeof(b);

跟函数很像的关键字可以计算数组的大小

sizeof(int);
一个整型的大小是4

sizeof(char);
一个字符型的大小是1

printf(“a数组元素的个数是%d\n”,sizeof(a)/sizeof(a[0]));

  • sizeof(a)/sizeof(int)

printf(“b数组元素的个数是%d\n”,sizeof(b)/sizeof(b[0]));

  • sizeof(b)/sizeof(char)

计算数组元素的个数

sizeof(a)/sizeof(a[0])

void arrayPrint(int datas[3]);

  • 1、形式参数中,虽然写的是一个数组的写法,中括号中的数组元素个数跟数组的大小是无效的
  • 2、这里写多少,都不能代表形式参数数组有多大
  • 3、这里的中括号的作用,仅用俩表示这是一个数组。
  • 4、这个参数是一个地址,在windows中,用4个字节表示地址,Linux64位中用8个字节表示

故一般函数传数组的写法

函数接收
void arrayPrint(int datas[],int cnt);

int array[3] = {1,2,3};
调用函数
arrayPrint(array,sizeof(array)/sizeof(array[0]));

调用函数传数组名给函数,是传数组首个元素的地址。即第一个元素的地址

#include <stdio.h>

void arrayPrint(int datas[],int cnt)//cnt是接收计算的数组元素的个数,便于下面历遍数组循环的结束
{
	int i;
    for(i=0;i<cnt;i++){
		printf("array[%d]=%d\n",i,datas[i]);
    }
}

int main()
{
	int array[3] = {11,42,64};
    
    arrayPrint(array,sizeof(array)/sizeof(array[0]));
    arrayPrint(&array[0],sizeof(array)/sizeof(array[0]));
    
    system("pause");
    return 0;
}

数组结合函数实例

函数执行后输出结果

#include <stdio.h>

int initPeople(int n)
{
	printf("需要录入几个学生分数:");
    scanf("%d",&n);
    return n;
}

void initScores(int array[],int n)
{
	int i;
	for(i=0;i<n;i++){
		printf("请输入第%d个学生的分数:",i+1);
        scanf("%d",&array[i]);
        if(array[i] > 100 || array[i] < 0){
			printf("非法分数!\n强制退出!\n");
            system("pause");
            exit(-1);
        }
	}
}

void scoresPrint(int array[],int n)
{
	int i;
    for(i=0;i<n;i++){
		printf("第%d个学生的分数是:%d\n",i+1,array[i]);
	}
}

void scoresMax(int array[],int n)
{
	int i;
    int max;
    max = array[0];
    for(i=0;i<n;i++){
		if(max < array[i]){
			max = array[i];
        }
	}
    printf("最高分max=%d\n",max);
}

void scoresMin(int array[],int n)
{
	int i;
    int min;
    min = array[0];
    for(i=0;i<n;i++){
		if(min > array[i]){
			min = array[i];
        }
	}
    printf("最低分min=%d\n",min);
}

void scoresAverage(int array[],int n)
{
	int i;
    int total = 0;
    float average;
    for(i=0;i<n;i++){
		total +=array[i];
        //total = total + array[i];
    }
    average = (float)total/n;
    printf("%d个学生总分total=%d\n",n,total);
    printf("平均分average=%f\n",average);
}

int main()
{
	int len = 0;
	int scores[len];
    
    len = initPeople(len);
    
    initScores(scores, len);
    
    scoresPrint(scores, len);
    
    scoresMax(scores, len);
    
    scoresMin(scores, len);
    
    scoresAverage(scores, len);
    
    system("pause");
    return 0;
}

函数执行后把结果返回给到main函数

#include <stdio.h>

int initPeople(int n)
{
	printf("需要录入几个学生分数:");
    scanf("%d",&n);
    return n;
}

void initScores(int array[],int n)
{
	int i;
	for(i=0;i<n;i++){
		printf("请输入第%d个学生的分数:",i+1);
        scanf("%d",&array[i]);
        if(array[i] > 100 || array[i] < 0){
			printf("非法分数!\n强制退出!\n");
            system("pause");
            exit(-1);
        }
	}
}

void scoresPrint(int array[],int n)
{
	int i;
    for(i=0;i<n;i++){
		printf("第%d个学生的分数是:%d\n",i+1,array[i]);
	}
}

int getMax(int array[],int n)
{
	int i;
    int max;
    max = array[0];
    for(i=0;i<n;i++){
		if(max < array[i]){
			max = array[i];
        }
	}
    return max;
}

int getMin(int array[],int n)
{
	int i;
    int min;
    min = array[0];
    for(i=0;i<n;i++){
		if(min > array[i]){
			min = array[i];
        }
	}
    return min;
}

float getAverage(int array[],int n)
{
	int i;
    int total = 0;
    float average;
    for(i=0;i<n;i++){
		total +=array[i];
        //total = total + array[i];
    }
    average = (float)total/n;
    return average;
}

void printRet(int a, int b, float f)
{
	printf("最高分:%d\n最低分:%d\n平均分:%f\n",a,b,f);
}

int main()
{
	int len = 0;
	int scores[len];
    int max;
    int min;
    float average;
    
    len = initPeople(len);
    
    initScores(scores, len);
    
    scoresPrint(scores, len);
    
    max = getMax(scores, len);
    
    min = getMin(scores, len);
    
    average = getAverage(scores, len);
    
    printRet(max, min, average);
    
    system("pause");
    return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-03 11:43:10  更:2021-09-03 11:43:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:22:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码