C语言从入门到精通(吐血分享)6
- 格式:pdf
- 大小:149.37 KB
- 文档页数:14
注:对于后面两种与数组的定义"形似",在系统处理的过程中, 后两种处理成第一种形式(*a) 5>算法(下标 循环)
<1>最值(最大) 通过形参返回 5 8 9 10 20 4 5 30 6 max=30 #include "stdio.h" #define N 10 void fun(int *p,int *m) { int i,max; max=p[0]; for(i=0;i<N;i++) if(max<p[i]) max=p[i]; *m=max; } main() { int a[N]={5,2,13,14,8,92,10,4,5,9},max; fun(a,&max); printf("最大值是:%d",max); } <2>求和
<6>数组名:代表是数组的首地址。(数组中第一个元素的 地址) 代表是地址常量(不可以给数组名进行赋值)
a→&a[0] 2>数组赋值 <1> int a[6]={5,7,1,2,4,9}; <2> int a[6]={5,9,8};(用 0 补齐) <3> int a[]={8,2,3,4};(由赋值决定数组的大小) <4> 利用 scanf 语句赋值 for(i=0;i<N;i++) scanf("%d",&a[i]); 3>表示数组的地址和元素 <1> 地址:&数组名[下标表达式] 元素:数组名[下标表达式](下标表达式:常量、变量、六 个表达式) <2> 地址:数组名+整数(单元个数) 元素:*(数组名+整数) int a[6],*p; p=a; <3>地址:指针变量名+ - 整数(整数:单元个数) 元素:*(指针变量名+ - 整数) <4>带下标的指针变量 元素:指针变量名[下标表达式]<=> *(指针变量名+ - 整 数)
(1)全部数求和 0 1 2 3 4 5 6 7 8 5 8 9 10 20 4 5 30 6 #include "stdio.h" int add(int p[]) { int i,sum=0; for(i=0;i<10;i++) sum+=p[i]; return sum; } main() { int a[10]={5,1,2,8,9,4,3,25,12,14},s; s=add(a); printf("s=%d",s); } (2)间隔求和 s=0 s=22 s=0 s=15s=0 s=12 s=0 0 1 2 3 4 5 6 7 8 9 10 11 5 8 9 2 4 9 5 6 1 4 8 7 b[0] b[1] b[2] j=0 b[3] s=19
2 5 8 11
3 %3==0 (i+1)%3==0 6 9 12 b[1]=s s=0 b[2]=s s=0
b[0]=s s=0 j++
b[3]=s s=0
#include "stdio.h" void fun(int a[12],int b[4]) { int i,j=0,s; for(i=0;i<12;i++) { s+=a[i]; if((i+1)%3==0) { b[j]=s; j++; s=0; } } } main() { int i; int a[12]={1,8,5,2,4,7,12,23,45,10,2,5},b[4]; fun(a,b); for(i=0;i<4;i++) printf("%d",b[i]); } // b[0]=s //b[j++]=s j=1
int del(int *a,int k) { int i; for(i=k;i<9;i++) a[i]=a[i+1]; return 10-1; } main() { int i,a[10]={5,6,4,7,8,1,2,4,5,8},k,n; printf("qing shu ru yao shan chu de xia biao:\n"); scanf("%d",&k); n=del(a,k); for(i=0;i<n;i++) printf("%3d",a[i]); }
九、数组(大量数据\数据不连续) 1.数组的特点 <1>相同的数据类型 <2>相同的名字 <3>不同的下标(下标从 0 开始) <4>在内存中,系统会为数组开辟一串连续存储空间 2.一维数组 1>定义数组 格式:类型名 数组名[常量表达式] <1>类型名:int float double char <2>数组名:遵循用户标识符 <3>常量表达式:元素的个数 <4>在内存中,系统会为一维数组自动开辟一串连续存储空 间 int a[6]; <5>不同的下标(下标从 0 开始)(下标和个数之间相差 1) 个数:N 下标:N-1
printf("%3d",a[i]); } 一分为二 偶数: i j
0 1 2 3 4 5 5 9 2 3 1 4 3 1 4 5 9 2 i j 0 3 1 4 2 5 奇数: 0 1 2 3 4 5 9 2 3 1 3 1 2 5 9 i 0 1 i=0 j 3 4 i++ i<N/2 j++ j=(N+1)/2 i<N/2 i++ j++ i=0 i++ i<N/2 j=N/2 j++
注:在次数组 b 中的变量 j 有两个作用:<1>j++表达式的值 代表了数组的下标 b[j++]=s 数 <2>变量 j 代表了数组中元素的个
<3>统计 int tt[10] tt:(0~9) 5 4 2 1 3 1 2 4 5 9 8 7 0 1 2 4 pp[5]=2 pp[5] pp[4]pp[2]pp[1] pp[3] pp[5]++ pp[5]=1 tt[i] 0 pp[0] 0 pp[ tt[i] ]++ n j++ j=j+1 1 pp[1] 0 pp[0]=pp[0]+1 2 pp[2] 0 3 pp[3] 0 4 pp[4] 9 pp[9] 0 #include "stdio.h" #define N 20 void count(int *tt,int *pp) { int i; for(i=0;i<10;i++) pp[i]=0; pp[5]++
(1)统计数组是否清零 (2)统计数组和统计元素寻找规律. <4>排序(升序小到大 降序 大到小) i j i:0~N-2 j: i+1~N-1 0 1 2 3 4 5 8 9 2 4 2 8 9 5 4 2 4 9 8 5 2 4 5 9 8 2 4 5 8 9
#include "stdio.h" void sort(int *a) { int i,j,t; for(i=0;i<8;i++) for(j=i+1;j<8;j++) if(a[i]<a[j]) { t=a[i]; a[i]=a[j]; a[j]=t; } } main() { int i; int a[8]={8,52,13,41,75,65,12,3}; sort(a); for(i=0;i<8;i++) printf("%4d",a[i]); } <5>逆序 i j N/2
后移:插入 i 0 1 1 2 3 N-2 N-1 1 2 3 4 5 4 7 9 2 3 4 7 9 a[i+1]=a[i]; N-1 N-2
for(i=N-2;i>=k;i--)
k+1 k #include "stdio.h" void insert(int *a,int k) { int i=0,j; while(a[i]<=k) i++; for(j=10-2;j>=i;j--) a[j+1]=a[j]; a[i]=k; } main() { int i,a[10]={1,3,4,9,10,12,13,40,50},k; printf("qing shu ru cha ru de shu zi:\n"); scanf("%d",&k); insert(a,k); for(i=0;i<10;i++) printf("%3d",a[i]); }
0 1 2 3 4 5 5 9 2 3 1 4 4 1 3 2 9 5
i j 0 5 1 4 2 3 0 1 2 3 4 5 9 2 3 1 1 3 2 9 5 i j 0 4 1 3 i=0Fra biblioteki=0
i++ j--
i<j i<N/2
j=N-1
i++ i<j i<N/2
j=N-1 j--
#include "stdio.h" void fun(int *b) { int i,j,t; for(i=0,j=9;i<10/2;i++,j--) { t=b[i]; b[i]=b[j]; b[j]=t; } } main() { int i,a[10]={4,5,6,7,8,1,2,0,1,4}; fun(a); for(i=0;i<10;i++)