利用数组
- 1,对10个数组元素依次赋值,逆序输出。
- 2,利用数组输出一个斐波那契数列
- 3,冒泡排序,使输入的十个数从小到大正序输出
- 4,二维数组:有一个3*4的矩阵,要求编程求出其中值最大的那个元素的值,以及其所在行号和列号。
- 5,字符数组:输出一个已知的字符串。
- 6,输入一行字符,统计其中有多少个单词,单词之间用空格隔开
- 7,用筛选法求100内的素数
- 8,用选择法对十个整数排序
- 9,有一个已经排好序的数组,要求输入一个数后,按原来的排序的规律将他插入数组
- 10,将一个数组中的值按逆序重新存放。
- 11,输出直角排列的杨辉三角形
- 12,将字符数组s2中的全部字符复制到字符数组s1中。不用strcopy函数。复制时,‘/0’后面的字符不用复制。
1,对10个数组元素依次赋值,逆序输出。
#include "stdio.h"
int main()
{
int i,a[10];
printf("输入:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
printf("输出:");
for(i=9;i>=0;i--)
printf("%2d",a[i]);
return 0;
}
运行结果:
输入:1 2 3 4 5 9 8 5 2 4
输出: 4 2 5 8 9 5 4 3 2 1
2,利用数组输出一个斐波那契数列
#include "stdio.h"
int main()
{
int i,a[20]={1,1};
for(i=2;i<20;i++)
a[i]=a[i-1]+a[i-2];
for(i=0;i<20;i++)
{
if(i%5==0)printf("\n");
printf("%6d",a[i]);
}
return 0;
}
运行结果:
1 1 2 3 5
8 13 21 34 55
89 144 233 377 610
987 1597 2584 4181 6765
3,冒泡排序,使输入的十个数从小到大正序输出
#include"stdio.h"
int main()
{
int a[10];
int i,j,t;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
{
if(a[i>a[i+1]])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}
运行结果:
9 8 7 6 5 4 3 2 1 0
0 1 2 3 4 5 6 7 8 9
4,二维数组:有一个3*4的矩阵,要求编程求出其中值最大的那个元素的值,以及其所在行号和列号。
#include"stdio.h"
int main()
{
int i,j,r,c,max;
int a[3][4]={1,2,3,4,8,9,10,11,12,5,6,7};
max=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(a[i][j]>max)
{
max=a[i][j];
r=i;
c=j;
}
printf("最大为%d,行号:%d,列号:%d",max,r,c);
return 0;
}
最大为12,行号:2,列号:0
//因为这个输出结果我调了很久,因为下意识认为应该是三行零列才对,好久才反应过来,我定义的这个二位数组a[3][4]没有‘第三行’,也没有‘第四列’。
5,字符数组:输出一个已知的字符串。
#include "stdio.h"
int main()
{
char c[15]={'i',' ','a','m',' ','a',' ','s','t','u','d','e','n','t'};
int i;
for(i=0;i<15;i++)
{
printf("%c",c[i]);
}
return 0;
}
运行结果:
i am a student
6,输入一行字符,统计其中有多少个单词,单词之间用空格隔开
#include"stdio.h"
int main()
{
char string[81];
int i,num=0,word=0;
char c;
gets(string);
for(i=0;(c=string[i])!='\0';i++)
if (c==' ')word =0;
else if(word ==0)
{
word =1;
num++;
}
printf("共%d个单词",num);
return 0;
}
运行结果:
i am a student.
共4个单词
7,用筛选法求100内的素数
#include"stdio.h"
#include"math.h"
int main()
{
int i,j,n=0,a[101];
for(i=1;i<=100;i++)
a[i]=i;
a[1]=0;
for(i=2;i<sqrt(100);i++)
{
for(j=i+1;j<=100;j++)
{
if(a[j]!=0 && a[i]!=0)
{
if(a[j]%a[i]==0)
a[j]=0;
}
}
}
for(i=2;i<101;i++)
{
if(a[i]!=0)
{
printf("%5d",a[i]);
n++;
}
if(n==5)
{
printf("\n");
n=0;
}
}
return 0;
}
运行结果
2 3 5 7 11
13 17 19 23 29
31 37 41 43 47
53 59 61 67 71
73 79 83 89 97
8,用选择法对十个整数排序
#include"stdio.h"
int main()
{
int i,j,min,temp,a[11];
printf("enter data:\n");
for(i=1;i<11;i++) //这里只是想用a[1]到a[10],不是不知道有a[0]。
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
printf("the orginal numbers:\n") ;
for(i=1;i<11;i++)
{
printf("%5d",a[i]);
}
for(i=1;i<10;i++)
{
min=i;
for(j=i+1;j<11;j++)
{
if(a[min]>a[j])
min=j;
}
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
printf("\n");
printf("the sorted numbers:\n");
for(i=1;i<11;i++)
printf("%5d",a[i]);
return 0;
}
运行结果:
enter data:
a[1]=12
a[2]=15
a[3]=14
a[4]=87
a[5]=98
a[6]=54
a[7]=653
a[8]=32
a[9]=21
a[10]=10
the orginal numbers:
12 15 14 87 98 54 653 32 21 10
the sorted numbers:
10 12 14 15 21 32 54 87 98 653
9,有一个已经排好序的数组,要求输入一个数后,按原来的排序的规律将他插入数组
#include"stdio.h"
int main()
{
int a[11]={1,4,6,8,9,12,13,28,46,96};
int temp1,temp2,number,end,i,j;
printf("array a:\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
printf("insert number:\n");
scanf("%d",&number);
end=a[9];
if(number>end)
{
a[10]=number;
}
else
{
for(i=0;i<10;i++)
{
if(a[i]>number)
{
temp1=a[i];
a[i]=number;
for(j=i+1;j<11;j++)
{
temp2=a[j];
a[j]=temp1;
temp1=temp2;
}
break;
}
}
}
printf("now array a:\n");
for(i=0;i<11;i++)
{
printf("%5d",a[i]);
}
return 0;
}
运行结果:
array a:
1 4 6 8 9 12 13 28 46 96
insert number:
16
now array a:
1 4 6 8 9 12 13 16 28 46 96
10,将一个数组中的值按逆序重新存放。
#include"stdio.h"
#define N 5//改变N的值就可以改变数组中可以逆序的数
int main()
{
int a[N],i,temp;
printf("enter array a:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("array a:\n");
for(i=0;i<N;i++)
printf("%4d",a[i]);
for(i=0;i<N/2;i++)
{
temp=a[i];
a[i]=a[N-i-1];
a[N-i-1]=temp;
}
printf("\n");
printf("now array a:\n");
for(i=0;i<N;i++)
{
printf("%4d",a[i]);
}
return 0;
}
enter array a:
1 2 3 4 5
array a:
1 2 3 4 5
now array a:
5 4 3 2 1
11,输出直角排列的杨辉三角形
#include"stdio.h"
#define N 10//改变定义的N值可以改变输出的杨辉三角的行数
int main()
{
int i,j,a[N][N];
for(i=0;i<N;i++)
{
a[i][i]=1;
a[i][0]=1;
}
for(i=2;i<N;i++)
{
for(j=1;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for(i=0;i<N;i++)
{
for(j=0;j<=i;j++)
printf("%4d",a[i][j]);
printf("\n");
}
return 0;
}
运行结果:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
12,将字符数组s2中的全部字符复制到字符数组s1中。不用strcopy函数。复制时,‘/0’后面的字符不用复制。
#include"stdio.h"
#include"string.h"
int main()
{
char s1[80],s2[80];
int i;
printf("input s2:");
scanf("%s",s2);
for(i=0;i<=strlen(s2);i++)
s1[i]=s2[i];
printf("s1:%s\n",s1);
return 0;
}
input s2:ceshi
s1:ceshi