------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1 数组的基本概念
同一数据类型的变量的集合,其中每一个数据按照一定顺序排列
int num1,num2,num3,....;
intnum[3];
分为:
数值数组
字符数组
指针数组
结构数组
一维数组
二维数组
多维数组
1 一维数组:
数组中得每一个元素都不是数组
一维数组的定义
先定义,再初始化
int num[10];//开辟了10个int长度的内存空间
说明:
数据类型决定数组中每一个元素的数据类型
一维数组的定义和初始化
类型 名字[长度];
定义存储10int数字的数组
int nums[10];
定义存储7个char数据的数组
int chs[7];
所谓初始化,就是赋初值
1 全部初始化
1> 定义的时候初始化:
int nums1[5] = { 1, 2, 3, 4, 6};
可以省略数字后面方括号的数字,编译器会自动根据初始化的
数据来确定这个数字
int nums2[] = {1,2,3,4,6};
2> 定义完成后初始化,
int nums[3];
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;
2 部分初始化
int nums[5] = {1,2,3};
会按照数据的顺序进行初始化数据,然后没有数据的地方补零
int nums[10] = {[3]= 1,2,3};从指定位置开始初始化
int nums[10] = {0};
遍历数组
就是从数组的第0个元素,一次访问数组的每一个元素,
直到访问完所有的数组元素.
每一个数组元素使用数组名+下标就可以进行访问
int nums[10] = {1,2,3,4,5,6,7,8,5,6};
for(i = 0;i< 10;i++){
printf("%d\n",nums[i]);
}
*/
#include <stdio.h>
//宏名要全大写
//宏定义 宏名 替换量
#define LEN 256
int main(int argc,constchar * argv[]) {
//定义数组的使用,常常使用的是宏来设置数组的长度
int nums [LEN];
//代码中使用了宏,在编译的时候,会执行宏替换
// -->> int nums[256];
return 0;
}
// 遍历-按顺序查看数组的每一个元素
//
// Created by 李佳乐 on 15-3-13.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
#include <stdio.h>
#define LEN 256
/*
int main() {
int ages[5] = {19,29,31,22,19};
for(int i = 0;i < 5;i++){
printf("ages[%d]=%d\n",i,ages[i]);
}
return 0;
}
*/
/*
//计算元素的个数
*/
int main(){
int ages [] = {10,11,12,78};
int count =sizeof(ages) /sizeof(int);
for(int i = 0;i < count;i++){
printf("ages[%d] = %d\n",i,ages[i]);
}
return 0;
}
// 输入5个学生的成绩求平均
//
// Created by 李佳乐 on 15-3-13.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
/*
#include <stdio.h>
int main(int argc, const char * argv[]) {
//定义一个数组来存储成绩
int scores [5];
//定义一个变量存储总分
int sum = 0;
//提示输入成绩
for(int i = 0;i < 5;i++)
{//提示输入某个学生的成绩
printf("请输入第%d个学生的成绩:\n",i+1);
//接收输入
scanf("%d",&scores[i]);
//累加成绩
sum += scores[i];
}
//计算平均分,并且暑促
printf("平均分是%.4f\n",sum / 5.0);
return 0;
}
*/
#include <stdio.h>
#define LEN 256
int main()
{
int ages[3] = {10,19,18};
printf("%p\n",ages);
for(int i = 0;i < 3;i++){
printf("ages[%d]的地址是%p\n",i,&ages[i]);
}
return 0;
}
// 找出整型数组的最大值
//
// Created by 李佳乐 on 15-3-13.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
// 数组当做函数参数传递时,会当做指针变量来使用,指针变量在64bit编译器环境下,占据8个字节
#include <stdio.h>
#define LEN 256
int maxA(int array[],int length)
{
int max = array[0];
for(int i = 1;i < length;i++){
if(array[i] > max){
max = array[i];
}
}
return max;
}
int main()
{
int ages[] = {11,90,67,126,23};
int max =maxA(ages,sizeof(ages) /sizeof(int));
printf("%d\n",max);
return 0;
}
// 找出整型数组元素的最小值
//
// Created by 李佳乐 on 15-3-13.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
#include <stdio.h>
#define LEN 256
int minA(int ages[],int length){
//定义变量存储数组的最小值
int min = ages[0];
for(int i = 1;i < length;i++){
if(ages[i] < min){
min = ages[i];
}
}
return min;
}
int main(int argc,constchar * argv[]) {
int ages2[] = {22,33,44,66,55};
int min =minA(ages2,sizeof(ages2) /sizeof(int));
printf("%d\n",min);
return 0;
}
// 输入数组进行统计
//
// Created by 李佳乐 on 15-3-13.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
#include <stdio.h>
#define LEN 256
int main(int argc,constchar * argv[]) {
//输入数组
int nums[LEN];
int input;
int i = 0;
char ch;
double sum = 0, avg, max, min;
do{
scanf("%d",&input);
scanf("%c",&ch);
if(ch != 'q')
{
nums[i++] = input;
}
}while(ch !='q');
min = max = nums[0];
for(int index = 0; index < i; index++){
sum += nums[index];
if(nums[index] > max){
max = nums[index];
}
if(nums[index] < min){
min = nums[index];
}
}
avg = sum / i;
printf("sum = %.4f\n",sum);
printf("avg = %.4f\n",avg);
printf("max = %.4f\n",max);
printf("min = %.4f\n",min);
return 0;
}
// 数组内元素逆序存放
//
// Created by 李佳乐 on 15-3-13.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
#include <stdio.h>
int main(int argc,constchar * argv[]) {
//定义变量
int num[4];
int temp;
//逐个输入数组元素
printf("请输入 : \n");
for(int i = 0;i < 4 ;i++)
{
scanf("%d",&num[i]);
}printf("\n");
//将数组的元素逐个输出
for(int i = 0;i < 4 ;i++)
{
printf("num[%d] = %d\n",i,num[i]);
}
printf("--分割线--\n");
//将元素中得前后元素的位置互换
for(int i = 0;i < 2;i++)
{
temp = num[i];
num[i] = num[3 - i];
num[3 - i] = temp;
}
for(int i = 0;i< 4;i++)
{
printf("num[%d] = %d\n",i,num[i]);
}
return 0;
}
// 数组元素作为元素参数
//
// Created by 李佳乐 on 15-3-14.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
/*
数组元素,单独拿出来就与普通变量一样
int nums[] = {1,,2,3};
nums[0];
1> 赋值: nums[0] = 123;
2> 取值: int res = nums[0];
3> 运算: nums[0]++;
函数参数传递的方式
如果函数的参数是如例一样有基本类型定义(int,long,float,char))
那么函数的调用就为值传递,实际调用时使用的参数是实参
在调用中,将实参的数值(内存中存储的值)复制一份,传递给函数的形参
*/
//打印两个操作数字的和
#include <stdio.h>
void printSum(int num1,int num2){
printf("%d\n",num1+num2);
}
void change(int num){
printf("%d\n",num);
num = 0;
printf("%d\n",num);
}
int main(int argc,constchar * argv[]) {
/*
1 直接传递常量
printsum(10,12);
2 直接传递变量
int n1 = 11,n2 = 12;
printSum(n1, n2);
3 直接传递数组元素
数组的元素就相当于一个变量,因此函数的声明与定义与使用变量作为参数的函数定义
语法一样
int nums[] = {11,22,33};
printSum(nums[0],nums[1]);
*/
int nums[]={1,2,3,4,5,6,7,8,9};
printf("%d\n",nums[8]);
change(nums[8]);
printf("Hello, World!\n");
return 0;
}
将数组名作为函数参数
调用语法:
int nums[] = {....};
func(nums);
需要注意,函数的声明语法为
返回类型 函数名(数据类型形参变量名[]);
void func(int arr[])
补充说明:
1>数组名作为函数参数,此时传递的是数组的首地址
2>传递的是地址,那么成为引用传递
3>如果传入的是地址,那么在函数中数组与在函数外的数组是用一个数组
4>函数传参的过程中,只是将数组的地址传过去了,数组的长度会丢失
5>一般数组名作为函数参数的时候,函数会带有第二个参数,用于表示数组的长度
void func(int arr[],int length);
将数组作为函数参数的函数定义为
void func(int arr[3],int length);
如果是传递的地址,就称为引用传递,引用传递函数内对数据的修改会再函数结束后保持下来
void func(int num){
num = 10;
}
void func(int num[]){
num[0] = 10
}
*/
#include <stdio.h>
void func(int arr[],int length){
//定义了一个数组名为函数参数的函数
//打印arr的地址
printf("arr的地址%p,长度为%lu\n",arr,sizeof(arr));
for(int i = 0;i < length;i++){
printf("%d\n",arr[i]);
}
}
int main(int argc,constchar * argv[]) {
int nums[] = {1,2,3};
func(nums, 3);
return 0;
}
// 1、判断一个数组中元素的值,如果值大于0,则打印该值,如果小于0,则输出0。
// 2、写一个程序,初始化一个数组。要求数组长度为10,里面的值为0-9的随机数,并且每一个数字出现一次。
#include <stdio.h>
//准备一个函数
//int translate(int num);
//如果是大于0的就不变,如果小于0就变为0
int translate(int num){
return num > 0 ? num : 0;
}
//为什么要返回,二不是在函数中打印
//使用函数的原则是尽量的短小,尽量的控制在单个任务中
int main(int argc,const char * argv[]) {
int nums[] = {0,-1,-20,3,21,5,4,-1,-4,10},temp;
for(int i = 0;i <sizeof(nums) / sizeof(int);i++){
temp =translate(nums[i]);
printf("%d\n",temp);
}
return 0;
}
// 数组练习2
//
// Created by 李佳乐 on 15-3-14.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
// 写一个程序,初始化一个数组。要求数组长度为10,里面的值为0-9的随机数,并且每一个数字出现一次。#include <stdio.h>
/*
1 创建数组
2 创建随机数
3 存到数组中 nums[i++] = ..
4 使用循环创建数据,并加入到数组中,while(i < 10)
5 创建数字,判断数组中是否有该数字,如果没有就加入,如果有就重新创建
6 如何判断一个数字在数组中或不在数组中
int nums[] = {1,2,3};
遍历一下,直到遍历结束,如果没有个数字,就表示不在.有的话 跳出
*/
#include <stdio.h>
#include <stdlib.h>
#define LEN 256
int main(int argc,const char * argv[]) {
//创建数组与必要的变量
int nums[LEN],i = 0,temp,index;
while(i < 10){
temp =arc4random_uniform(10);//0-9的随机数
//判断temp是否在数组中
for(index = 0;index < i;index++){
if(temp == nums[index]){//表示找到相同的了,即数组中存在
break;
}
}
if(index == i){
//for循环正常结束,即表示没有相同的
nums[i++] = temp;
}
}
//将随机数打印出来
for(int j = 0;j < 10;j++){
printf("第%d个数是%d\n",j+1,nums[j]);
}
return 0;
}
// 对数组初始化求数组的最大最小和与平均
//
// Created by 李佳乐 on 15-3-14.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
#include <stdio.h>
//写一个可以对数组初始化的函数
void initArray(int nums[],int length)
{
printf("请输入一个数字:\n");
for(int i = 0;i < length;i++){
scanf("%d",&nums[i]);
}
}
//写出函数,求数组的最大最小
int max(int nums[],int length){
int maxnum = nums[0];
for(int i = 1;i < length;i++){
if(nums[i] > maxnum)maxnum = nums[i];
}
return maxnum;
}
int min(int nums[],int length)
{
int minnum = nums[0];
for(int i = 1;i < length;i++){
if(nums[i] < minnum)minnum = nums[i];
}
return minnum;
}
//写函数求数组的和与平均
int sum(int nums[],int length){
int sum = 0;
for(int i = 0;i < length;i++){
sum += nums[i];
}
return sum;
}
double avg(int nums[],int length){
return sum(nums,length) * 1.0 / length;
}
int main(int argc, const char * argv[]) {
int nums[10];
initArray(nums, 10);
printf("最大值为%d\n", max(nums, 10));
printf("最小值为%d\n", min(nums, 10));
printf("平均值为%lf\n", avg(nums, 10));
printf("和为%d\n", sum(nums, 10));
return 0;
}