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;
}
运行结果:
变量类型的储存地址解析 | |||||
类型 | 字符大小 | 数组 | 元素 | 编译地址 | 内容 |
char | 1 | arr_1[3] | arr_1[0] | 0X0061FE9D | a' |
arr_1[1] | 0X0061FE9E | b' | |||
录入一个占1个字符空间 | arr_1[2] | 0X0061FE9F | c' | ||
int | 4 | arr_2[3] | arr_2[0] | 0X0061FE94 | 11 |
0X0061FE95 | |||||
0X0061FE96 | |||||
0X0061FE97 | |||||
arr_2[1] | 0X0061FE98 | 12 | |||
0X0061FE99 | |||||
录入一个占4个字符空间 | 0X0061FE9A | ||||
0X0061FE9B | |||||
arr_2[2] | 0X0061FE9C | 13 | |||
0X0061FE9D | |||||
0X0061FE9E | |||||
0X0061FE9F | |||||
long long | 8 | arr_3[3] | arr_3[0] | 0X0061FE88 | 111 |
0X0061FE89 | |||||
0X0061FE8A | |||||
0X0061FE8B | |||||
0X0061FE8C | |||||
0X0061FE8D | |||||
0X0061FE8E | |||||
录入一个占8个字符空间 | 0X0061FE8F | ||||
arr_3[1] | 0X0061FE90 | 222 | |||
0X0061FE91 | |||||
0X0061FE92 | |||||
0X0061FE93 | |||||
0X0061FE94 | |||||
0X0061FE95 | |||||
0X0061FE96 | |||||
0X0061FE97 | |||||
arr_3[2] | 0X0061FE98 | 333 | |||
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;
}
}
运行结果:
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--;
}
}
运行结果:
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];
}
结果:
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;
}
结果:
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;
}
}
}
}
结果:
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;
}
结果:
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--;
}
}
结果: