0719 一维数组的应用

0719 一维数组的应用

1.学习

1.1.变量类型的储存地址解析

#include<stdio.h>

int main()
{
        /*long long型 数组空间储存*/ 
        long long arr_3[3]={111,222,333};
        printf("long long 字符大小 %d\n",sizeof(long long));
        printf("arr_3[0] 地址%#p\n",&arr_3[0]);
        printf("arr_3[1] 地址%#p\n",&arr_3[1]);
        printf("arr_3[2] 地址%#p\n",&arr_3[2]);
//        return 0;
        
        /*int型 数组空间储存*/
        int arr_2[3]={11,12,13};
        printf("int 字符大小 %d\n",sizeof(int));
        printf("arr_2[0] 地址%#p\n",&arr_2[0]);
        printf("arr_2[1] 地址%#p\n",&arr_2[1]);
        printf("arr_2[2] 地址%#p\n",&arr_2[2]);
//        return 0;
        
        /*char型 数组空间储存*/
        char arr_1[3]={'a','b','c'};
        printf("char 字符大小 %d\n",sizeof(char));
        printf("arr_1[0] 地址%#p\n",&arr_1[0]);
        printf("arr_1[1] 地址%#p\n",&arr_1[1]);
        printf("arr_1[2] 地址%#p\n",&arr_1[2]);
        return 0;
 } 

 

 运行结果:  b48bf175aa0e47058dcd22075e3e411e.png

 

变量类型的储存地址解析
类型字符大小数组元素编译地址内容
char1arr_1[3]arr_1[0]0X0061FE9Da'
   arr_1[1]0X0061FE9Eb'
录入一个占1个字符空间arr_1[2]0X0061FE9Fc'
int4arr_2[3]arr_2[0]0X0061FE9411
    0X0061FE95
    0X0061FE96
    0X0061FE97
   arr_2[1]0X0061FE9812
    0X0061FE99
录入一个占4个字符空间 0X0061FE9A
 0X0061FE9B
   arr_2[2]0X0061FE9C13
    0X0061FE9D
    0X0061FE9E
    0X0061FE9F
long long8arr_3[3]arr_3[0]0X0061FE88111
    0X0061FE89
    0X0061FE8A
    0X0061FE8B
    0X0061FE8C
    0X0061FE8D
    0X0061FE8E
录入一个占8个字符空间 0X0061FE8F
arr_3[1]0X0061FE90222
    0X0061FE91
    0X0061FE92
    0X0061FE93
    0X0061FE94
    0X0061FE95
    0X0061FE96
    0X0061FE97
   arr_3[2]0X0061FE98333
    0X0061FE99
    0X0061FE9A
    0X0061FE9B
    0X0061FE9C
    0X0061FE9D
    0X0061FE9E
    0X0061FE9F

1.2 对数组中元素逆序排列

#include <stdio.h> 
void swap(int arr[],int a);

int main()
{
        int arr[5]={11,12,13,14,15};
        int i;
        for(i=0;i<5;i++)
        printf("原来第%d个元素:%d\n",i,arr[i]);
        swap(arr,5);
        for(i=0;i<5;i++)
        printf("变序后第%d个元素:%d\n",i,arr[i]);        
        return 0;
}

void swap(int arr[],int a)
{
        int i;
        int temp;
        for(i=0;i<a/2;i++)
        {
                temp=arr[a-i-1];
                arr[a-i-1]=arr[i];
                arr[i]=temp;
        }        
}

运行结果: 599530df1a17438bb7ce0c6ce000cb17.png

1.3冒泡排序

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void wei(int arr[],int a);

int main()
{
        int arr[5]={0};
        int i;
        srand((unsigned)time(NULL));
        printf("对数组中元素进行降序排列\n");
        for(i=0;i<5;i++)
                arr[i]=rand();
        for(i=0;i<5;i++)
                printf("第%d个元素为%d\n",i,arr[i]);
        wei(arr,5) ;
        for(i=0;i<5;i++)
                printf("改变后第%d个元素为%d\n",i,arr[i]);
        return 0;
}

void wei(int arr[],int a)
{
        int i,j;
        int temp;
        int n=a-1;
        for(i=1;i<a;i++)
        {
                for(j=0;j<n;j++)
                {
                        if(arr[j]<arr[j+1])
                        {
                        temp=arr[j+1];
                        arr[j+1]=arr[j];
                        arr[j]=temp;
                        }
                }
                n--;
        }

}

运行结果:f64866ae364f445292fdb5c4c58c15ae.png

 2.应用

1.编写一个函数,返回一个double数组中存储的最大值,并在主函数中打印输出

#include <stdio.h>
/*编写一个函数,返回一个double数组中存储的最大值,并在主函数中打印输出。*/
double max(double arr[],int a);

int main()
{
	double arr[5]={5.3,54.1,64.3,32.1,32.1};
	double i;
	i=max(arr,5);
	printf("这个数组中最大值为:%f",i);
	return 0;
}

double max(double arr[],int a)
{
	int i;
	double temp;
	for(i=0;i<a-1;i++)
	{
		if(arr[i]>arr[i+1])
		{
		temp=arr[i];
	//	printf("%f\n",temp);
		arr[i]=arr[i+1];
		arr[i+1]=temp;
		}
		
	} 
//	printf("%f\n",arr[4]);
	return arr[4];
}

结果:2ff198e56b894a93a28e4fb6536f5d64.png

2.编写一个函数,返回一个double数组中最大和最小之间的差值,并在主函数中打印输出。

 

#include <stdio.h>
/*编写一个函数,返回一个double数组中最大和最小之间的差值,并在主函数中打印输出。*/
double max_min(double arr[],int a);

int main()
{
	double cha;
	double arr[5]={21.1,25.4,25.5,54.3,65.1};	
	cha=max_min(arr,5);
	printf("最大值跟最小值的差为:%f",cha);
	return 0;
}

double max_min(double arr[],int a)
{
	double ret,max=0,min=1000;
	int i;
	for(i=0;i<a;i++)
	{
		if(max<arr[i])
		max=arr[i];
	}
	for(i=0;i<a;i++)
	{
		if(min>arr[i])
		min=arr[i];
	}
	ret=max-min;
	return ret;
}

结果:53f2dd55f74846ff9727350861fd69b1.png

3.冒泡排序优化,提示,如果发现某一轮不需要进行任何交换,则可以提前终止循环。

#include <stdio.h>
/*冒泡排序优化,提示,如果发现某一轮不需要进行任何交换,则可以提前终止循环。*/
 void pai(int arr[],int a);

int main()
{
	int arr[5]={54,58,42,44,40};
	int i;
	for(i=0;i<5;i++)
		printf("原本第%d位元素为%d\n",i,arr[i]);
	pai(arr,5);
	for(i=0;i<5;i++)
		printf("排序后第%d位元素为%d\n",i,arr[i]);
	return 0;
 } 
 
 void pai(int arr[],int a)
 {
 	int i,j,temp;
 	for(i=0;i<a;i++)
 	{
 		if(arr[0]<arr[1]&&arr[1]<arr[2]&&arr[2]<arr[3]&&arr[3]<arr[4])
 			break;
 		for(j=0;j<a-1;j++)
 		{
 			if(arr[j]>arr[j+1])	
 			{
 				temp=arr[j];
				 arr[j]=arr[j+1];
				 arr[j+1]=temp;		
			}
		 }
	 }
 }

结果:8ddaa75fee424ebfab1f9b4549744ce8.png

4.输入10个数到数组t中,再输入x,如果有与x相等的数组元素,输出该数组元素的下标;否则,输出-1。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*输入10个数到数组t中,再输入x,如果有与x相等的数组元素,输出该数组元素的下标;否则,输出-1。
*/
int main()
{
	int t[10]={0};
	int i,x;
	srand((unsigned)time(NULL));
	for(i=0;i<10;i++)
		t[i]=rand()%10;
	for(i=0;i<10;i++)
		printf("第%d个元素为:%d\n",i,t[i]);
	printf("请输入需要的数:");
	scanf("%d",&x);
	for(i=0;i<10;i++)
	{
		if(x==t[i])
		printf("%d\n",i);
		else
		printf("-1\n");	
	}
	return 0;
}

 结果:7b6882615f4a48788a180dd90df23dcf.png

5.产生一个由10个元素组成的一维数组,并输出(由随机函数产生1-99),然后进行升序排序。

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void wei(int arr[],int a);

int main()
{
	int arr[10]={0};
	int i;
	srand((unsigned)time(NULL));
	printf("对数组中元素进行升序排列\n");
	for(i=0;i<10;i++)
		arr[i]=rand()%99+1;
	for(i=0;i<10;i++)
		printf("第%d个元素为%d\n",i,arr[i]);
	wei(arr,10) ;
	for(i=0;i<10;i++)
		printf("改变后第%d个元素为%d\n",i,arr[i]);
	return 0;
}

void wei(int arr[],int a)
{
	int i,j;
	int temp;
	int n=a-1;
	for(i=1;i<a;i++)
	{
		for(j=0;j<n;j++)
		{
			if(arr[j]>arr[j+1])
			{
			temp=arr[j+1];
			arr[j+1]=arr[j];
			arr[j]=temp;
			}
		}
		n--;
	}
}

结果:334b1ec990a440f39d32ed6035aae755.png

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值