概述
这次我们先讲一维数组
类型名 数组名 [数组长度](这里数组长度为常量)
类型名:数组元素的类型
数组名:数组(变量)的名称,标识符
数组长度:常量表达式,给定数组的大小
比如说
int a[10];
定义一个含有10个整型元素的数组 a
char c[200];
定义一个含有200个字符元素的数组 c
float f[5];
定义一个含有5个浮点型元素的数组 f
当然要记得先定义后使用,且在使用的过程中记得
int a[10];
10个数组元素:a[0]、a[1]、…… a[9]
数组元素:数组名[下标]
下标:整型表达式
下标取值范围:[0,数组长度-1](不要越界!)
接下来我们就来拿一维数组编程
for ( i = 0; i < n; i++ ){
printf ( "%d ", a[i] );
}
数组下标作为循环变量,通过循环,逐个
处理数组元素
还是斐波那契:用数组计算fibonacci数列的前10个数,并按每行打印5个数的格式输出。这些兔子课真会生
# include <stdio.h>
# define MAXN 46 /* 符号常量 */
int main(void)
{ int i, n;
int fib[MAXN] = {1, 1}; /* 数组初始化 */
printf ("Enter n: "); scanf ( "%d", &n );
for ( i = 2; i < n; i++ ){
fib[i] = fib[i - 1] + fib[i - 2];
}
for ( i = 0; i < n; i++ ){
printf ( "%11d", fib[i] );
if ( (i + 1) % 5 == 0 ){ /* 5个数换行 */
printf("n"); }
}
if(n % 5 != 0) { printf("n"); } /* 总数不是5的倍数换行 */
return 0;
}
这里穿插一下我对于数组的一个奇怪的用法
这样一道题,由于这两位傲娇的师傅非得扫同一段路(直接裁掉算了[doge]),我们将数组赋0,将扫过的地段赋1,相当于我们之前那个flag的那种感觉:
#include<stdio.h>
int main(void)
{
int d, Q, m, n, leave;
scanf("%d",&d);
scanf("%d",&Q);
int i,j,count=0,t;
int a[d];
for(i=0;i<d;i++)
a[i]=0;
for(i=1;i<=Q;i++)
{
scanf("%d %d", &m, &n);
for(j=m;j<=n;j++)
{
a[j-1]=1;
}
}
for(t=0;t<d;t++)
{
if(a[t]==0)
count++;
}
leave=count;
printf("%d",leave);
}
这道题思路比较简单,但是几个for循环记住不要乱,我开始时头脑一热搞了嵌套的,整得花里胡哨的,把自己都弄傻了
自降难度,来看道入门题,简单的进行插入排序:
就是输入了N个数,+1只有把X搞进去,然后进行排序
#include<stdio.h>
int main(void)
{
int N,X,i,t,j;
scanf("%d",&N);
int a[N];
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&X);
N+=1;
a[N-1]=X;
for(i=0;i<N;i++)
{
for(j=0;j<N-i-1;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(i=0;i<N;i++)
printf("%d ",a[i]);
}
在这里我们又看见了熟悉的元素交换,其实就是最大小值的比较,再加上一个for循环,简单的排序就完成了
这道题呢
#include<stdio.h>
int main()
{
int n,m,count=0;
int a[30],b[30],c[100];
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=0;i<m;i++)
scanf("%d",&b[i]);
for(int i=0;i<n;i++)
{ //先判断a数组的每个元素是否与b数组的元素相等
int flag1=1;
for(int k=0;k<m;k++)
{
if(a[i]==b[k])
{
flag1=0;
break;
}
}
if(flag1==1)
{ //如果与b数组的每个元素都不相等
int flag2=1;
for(int l=0;l<count;l++)
{ //判断该数是不是已经在c数组中了
if(a[i]==c[l])
{
flag2=0;
break;
}
}
if(flag2==1) //如果不在c中则存进c数组中
c[count++]=a[i];
}
}
for(int i=0;i<m;i++)
{ //先判断b数组的每个元素是否与a数组的元素相等
int flag1=1;
for(int k=0;k<n;k++)
{
if(b[i]==a[k])
{
flag1=0;
break;
}
}
if(flag1==1)
{ //如果与a数组的每个元素都不相等
int flag2=1;
for(int l=0;l<count;l++)
{ //判断该数是不是已经在c数组中了
if(b[i]==c[l])
{
flag2=0;
break;
}
}
if(flag2==1) //如果不在c中则存进c数组中
c[count++]=b[i];
}
}
for(int i=0;i<count;i++)
{ //输出c数组
if(i==0)
printf("%d",c[i]);
else
printf(" %d",c[i]);
}
return 0;
}
要留意这个重复出现的数是否已经在同一个数组里了
既然有比较的题,那我们来看看查找的:输入正整数n (1≤n≤10)和整数x,再输入n个整数并存入数组a中, 然后在数组中查找x,如果找到,输出所有满足条件的元素的下标,否则,输出“Not Found”。
# include <stdio.h>
# define MAXN 10
int main(void)
{ int i, flag, n, x; int a[MAXN];
printf ("Enter n, x: ");
scanf("%d%d", &n, &x);
for ( i = 0; i < n; i++ )
{
scanf ( "%d", &a[i] );
}
flag = 0;
for ( i = 0; i < n; i++ ) {
if ( a[i] == x ){
printf ( "Index is %dn", i );
flag = 1;
}
}
if ( flag == 0 ) {
printf("Not Foundn");
}
return 0;
}
今天刚好带了电脑(主要是上机课就写完了),就在电脑上敲了
下周见
最后
以上就是活泼柜子为你收集整理的C语言学习笔记-数组的全部内容,希望文章能够帮你解决C语言学习笔记-数组所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复