数组
一、降序一个数组
/*
2017年3月17日09:53:46
功能:降序一个数组中的元素
*/
#include"stdio.h"
#define N 10
int main ()
{
int i, j, t;
int a[N];
printf("please input a array : \n");
for (i = 0; i < N; i++)
{
printf("please input the %dth number: ", i+1);
scanf("%d",&a[i]);
}
for(i = 0; i < N; i++)
for (j = i+1; j < N; j++) //实现交换,相同下标元素之间是对角线关系
{
if(a[i] <= a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
for (i = 0; i < N; i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
/*
总结:
在VC++6.0中显示的结果:
————————————————————
please input a array :
please input the 1th number: 1
please input the 2th number: 2
please input the 3th number: 3
please input the 4th number: 4
please input the 5th number: 5
please input the 6th number: 6
please input the 7th number: 7
please input the 8th number: 8
please input the 9th number: 9
please input the 10th number: 10
10 9 8 7 6 5 4 3 2 1
————————————————————
*/
二、在升序的整型数组中插入一个数据仍为升序
/*
2017年3月17日11:05:33
功能:在升序的整型数组中插入一个数据仍为升序
*/
#include"stdio.h"
#define N 5
int main ()
{
int i, j, m, t;
int a[N];
printf("please input a array: ");
for (i = 0; i < N; i++)
{
printf("please input %dth number: ", i+1);
scanf("%d",&a[i]);
}
printf("please input a number: ");
scanf("%d",&m);
for (i = 0; i < N; i++)
for(j = i; j < N; j++)
{
if(a[i] >= a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
for (i = 0; i < N; i++)
{
if(a[i] >= m && a[i-1] <=m)
break;
}
for(j = N-1; j > i; j--)
{
a[j+1] = a[j];
}
a[j] = m;
return 0;
}
三、在一个数组中插入一个数仍然有序
/*
2017年7月1日15:32:27
在一个数组中插入一个数仍然有序
*/
#include"stdio.h"
void insert (int, int*);
void insert1(int, int*, int);
int main()
{
int insertNum;
int a[100] = {2,4,6,8,10,12};
printf("请输入一个数,保证有序序列继续有序:");
scanf("%d",&insertNum);
insert(insertNum, a);
printf("%d %d %d %d %d %d %d\n",a[0],a[1],a[2],a[3],a[4],a[5],a[6]);
return 0;
}
void insert (int insertNum, int *a)
{
if(insertNum >= a[5])
{
a[6] = insertNum;
}
else if (insertNum > a[0])
{
for(int i =0; i < 6; i++)
{
if(insertNum >= a[i] && insertNum <= a[i+1] )
{
insert1(i+1, a, insertNum);
break;
}
}
}
else if(insertNum <= a[0])
{
insert1(0, a, insertNum);
}
}
void insert1(int i,int*a,int insertNum)
{
for(int j = 5; j >= i;j--)
{
a[j+1] = a[j];
}
a[i] = insertNum;
}
/*
在VC++6.0中显示的结果:
——————————————————————
请输入一个数,保证有序序列继续有序:4
2 4 4 6 8 10 12
——————————————————————
*/
四、对角线上的各元素求和,以及对角线上行,列下标均为偶数的各元素之和
/*
2017年3月15日19:38:29
功能:对角线上的各元素求和,以及对角线上行,列下标均为偶数的各元素之和
*/
#include"stdio.h"
int main ()
{
int i, j, sum = 0, mul = 1, a[5][5]; //循环输入5*5的矩阵数组
printf("input 5*5 array:\n");
for(i = 0; i < 5; i++)
for(j = 0; j < 5; j++)
scanf("%d",&a[i][j]);
printf("\n");
for (i = 0; i < 5; i++) //对行数进行确定,对哪些元素进行操作,是在行确定的基础下进行的
{
sum += a[i][i]; //对左对角线元素进行累加
if (i != 2) //对右对角线上的元素进行累加(对角线中间元素除外)
sum +=a[i][4-i];
if (i % 2 != 0) //如果行下标为奇数,进入下一次循环
continue;
mul *= a[i][i]; //对左对角线元素进行累乘
if (i != 2)
mul *=a[i][4-i]; //对右对角线上的元素进行累乘(对角线中间元素除外
}
printf ("sum = %d mul = %d\n",sum, mul);
return 0;
}
/*
总结:
在VC++6.0中显示的结果:
————————————————————————————
input 5*5 array:
7 2 7 4 8
9 3 5 7 4
8 3 5 6 7
4 8 5 3 5
2 4 8 9 1
sum = 44 mul = 560
————————————————————————————
*/
五、循环输出方阵
/*
2017年3月14日20:48:38
功能:循环输出方阵
*/
#include"stdio.h"
int *fun(int *a,int n);
int main ()
{
int a[10] ;
int n, m;
printf("please input some number: ");
scanf("%d",&n);
for(int i = 0; i < n; i++)
{
printf("please input %dth number:",i+1);
scanf("%d",&a[i]);
}
m = n;
while(m--)
{
fun(a,n);
for (int j = 0; j < 6; j++)
printf("%d ",a[j]);
printf("\n");
}
return 0;
}
int *fun(int *a,int n)
{
int m, t;
m = n-1;
t = a[m];
while(n--)
{
a[m] = a[m-1];
m--;
}
a[0] = t;
return a;
}
/*
总结:
在VC++6.0中显示的结果:
————————————————————————
please input some number: 6
please input 1th number:1
please input 2th number:2
please input 3th number:3
please input 4th number:4
please input 5th number:5
please input 6th number:6
6 1 2 3 4 5
5 6 1 2 3 4
4 5 6 1 2 3
3 4 5 6 1 2
2 3 4 5 6 1
1 2 3 4 5 6
————————————————————————
*/
七、杨辉三角形(二维数组)
/*
2017年3月16日08:03:31
功能:杨辉三角形
*/
#include"stdio.h"
#define N 6 //宏定义
void main ()
{
int i, j, a[N][N]; //定义变量
for (i = 0; i < N; i++) //外循环代表输入所在行的元素
{
a[i][0] = 1; //行首元素的值
a[i][i] = 1; //行尾元素的值
for (j = 1; j < i; j++) //此for()循环是确定此行中在其他列中的元素
a[i][j] = a[i-1][j-1] + a[i-1][j];
}
for (i = 0; i < N; i++) //显示结果
{
for (j = 0; j < N-i-1; j++) //在数的前面添加相应的空格
printf(" ");
for (j = 0;j <= i; j++)
printf("%2d ",a[i][j]); //此时输出存入对应下标的元素
printf("\n");
}
}
/*
总结:
1、设计思想:对于有6行的杨辉三角形,可以用一个6行6列的二维数组a[6][6]来表示。对于第i行的元素:a[i][0]=1,a[i][i]=1(i=0,1,2,...,5),
a[i][j] = a[i-1][j-1]+a[i-1][j](j=1,2,...,i-1).然后显示二维数组中的计算的结果,其中第1行的显示1个数据。。。第6行的显示6 个数据
2、for(i = 0; i < N; i++)
for(j = 0; j <= i; j++)
这样的双for()循环的用处是给矩阵左下元素赋值
3、for(i = 0; i < N; i++)
for(j = i; j < N; j++)
这样的双for()循环的用处是给矩阵右上元素赋值
4、for(i = 0; i < N; i++)
for(j = i; j <= i ; j++)
这样的双for()循环的用处是给矩阵主对角线元素赋值
5、for(i = 0; i < N; i++)
for(j = N-i; j >= N-i; j--)
这样的双for()循环的用处是给矩阵负对角线元素赋值
6、在VC++6.0中显示的结果:
————————————————————————————————
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
————————————————————————————————
*/
八、统计非负数之和
/*
2017年3月16日11:28:56
功能:统计非负数之和
*/
#include "stdio.h"
int main ()
{
int m, n = 0, sum = 0;
int a[100];
printf("please input 20 number: \n");
for (int i = 0; i < 20; i++)
{
printf("the number is %dth : ", i+1);
//a[i] = scanf("%d", &m); //scanf()函数输入成功返回1,error
scanf("%d",&a[i]); //此为正确输入的格式
if (a[i] >= 0) //满足条件执行if()语句中的内容,否则执行i++
{
sum += a[i];
n++;
}
}
printf(" n = %d\n",n);
return 0;
}
/*
总结
在VC++6.0中显示的结果:
——————————————————————————
please input 20 number:
the number is 1th : 1
the number is 2th : 2
the number is 3th : 3
the number is 4th : 4
the number is 5th : 5
the number is 6th : 6
the number is 7th : 7
the number is 8th : -4
the number is 9th : 5
the number is 10th : 3
the number is 11th : 3
the number is 12th : 3
the number is 13th : 3
the number is 14th : 3
the number is 15th : 3
the number is 16th : 3
the number is 17th : 3
the number is 18th : 3
the number is 19th : 3
the number is 20th : 3
n = 19
——————————————————————————
*/
九、将数组中数字元素放于非数字元素的后面
/*
2017年7月1日18:04:34
将数组中数字元素放于非数字元素的后面
*/
#include"stdio.h"
int main()
{
int n = 0;
char a[100];
char b[100];
char c[100];
printf("please input a string: ");
gets(a);
char *pa = a;
char *pb = b;
char *ppb = b;
char *pc = c;
while(*pa)
{
if(*pa >= '1'&& *pa <= '9')
{
*pb = *pa;
pb++;
n++;
}
else
{
*pc = *pa;
pc++;
}
pa++;
}
*pb = '\0';
while(n--)
{
*pc = *ppb;
pc++;
ppb++;
}
*pc = '\0';
puts(c);
return 0;
}
十、将数组中数字元素后面插入*
/*
2017年7月1日18:04:03
将数组中数字元素后面插入*
*/
#include"stdio.h"
int main ()
{
int n = 0;
char a[100];
char b[100];
char c[100];
printf("please input a string : ");
gets(a);
char *pa = a;
char *ppa = a;
char *pb = b;
char *ppb = b;
char *pc = c;
while(*pa)
{
if((*pa >= '1')&&(*pa <= '9'))
{
*pb = '*';
pb++;
n++;
}
pa++;
}
*pb = '\0';
while(*ppa)
{
*pc = *ppa;
if((*pc >='1')&&(*pc <= '9'))
{
pc++;
*pc = *ppb;
pb++;
}
pc++;
ppa++;
}
*pc = '\0';
puts(c);
return 0;
}
十一、计算数组中所有元素的平均数,将低于平均数的数值输出
/*
2017年7月1日18:03:27
计算数组中所有元素的平均数,将低于平均数的数值输出
*/
#include"stdio.h"
int main()
{
int m, i, j = 0, sum = 0, aver = 0;
int a[100], b[100];
printf("请输入需要统计人数的个数:");
scanf("%d",&m);
for(i = 0; i < m; i++)
{
printf("请输入%d个人的分数:",i+1);
scanf("%d",&a[i]);
sum += a[i];
}
aver = sum / m;
for(i = 0; i < m; i++)
{
if(a[i] < aver)
b[j++] = a[i];
}
for(i = 0; i < j; i++)
{
printf("%d ",b[j]);
}
return 0;
}
十二、找出数组中最大的数据
/*
2017年7月1日18:02:06
找出数组中最大的数据
*/
#include"stdio.h"
#define M 100
int main ()
{
int i, max;
int a[M];
for(i = 0; i < M; i++)
{
printf("please input %dth the number: ",i+1);
scanf("%d",&a[i]);
if(a[i] == 0)
break;
}
max = a[0];
for(int j = 0; j < i; j++)
{
if(a[j] > max)
max = a[j];
}
printf("the result is %d\n",max);
return 0;
}
十三、找出指定数到100之间,并且能够被指定数整除所有的质数
/*
2017年7月1日18:01:01
找出指定数到100之间,并且能够被指定数整除所有的质数
*/
#include"stdio.h"
int main()
{
int m, i, j = 0;
int a[100];
printf("please input a number: ");
scanf("%d",&m);
for(i = m; i < 100; i++)
{
if((i % m == 0)&&(i % 2 != 0))
a[j++] = i;
}
for(i = 0; i < j; i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
十四、将数组中偶数位的元素循环逆置
/*
2017年3月13日08:42:48
功能:将数组中偶数位的元素循环逆置
*/
#include"stdio.h"
#include"string.h"
#define N 100
int main()
{
int m = 0;
int n = 0;
int x = 0;
int y = 0;
int q = -1;
char a[N];
char b[N];
char c[N];
char d[N];
printf("please input a string :");
gets(a);
for(int i = 0; a[i] != '\0';i++)
{
if(i % 2 == 0)
b[m++] = a[i];
else
c[n++] = a[i];
b[m] = '\0';
c[n] = '\0';
}
while( x < strlen(a))
{
d[x++] = b[y++];
d[x++] = c[((q++)+n)%n];
}
d[x] = '\0';
if(strlen(a) % 2 == 0)
puts(d);
else
{
d[x-1] = '\0';
puts(d);
}
}
/*
总结:
在VC++6.0中显示的结果:
————————————————————
1、please input a string :12345678
18325476
2、please input a string :123456789
183254769
————————————————————
*/
十五、交换两个数组对应的值
/*
2017年3月13日10:40:04
功能:交换两个数组对应元素的值
*/
#include"stdio.h"
int main(void)
{
int n = 0, m = 0, i;
int a[100] = {1,3,5,7,9};
int b[100] = {2,4,6,8,10,12,14,16};
int *ppa = a;
int *pa = a;
int *ppb = b;
int *pb = b;
int t;
while(*ppa)
{
n++;
ppa++;
}
while(*ppb)
{
m++;
ppb++;
}
while(*pa && *pb )
{
t = *pa;
*pa = *pb;
*pb = t;
pa++;
pb++;
}
for ( i = 0; i < n; i++)
{
printf("%d ",a[i]);
}
printf ("\n");
for ( i = 0; i < m; i++)
{
printf("%d ",b[i]);
}
printf ("\n");
return 0;
}
/*
总结:
在VC++6.0中显示的结果:
——————————————————————
2 4 6 8 10
1 3 5 7 9 12 14 16
——————————————————————
*/
十六、升序,奇数在前,偶数在后
/*
2017年3月14日12:52:39
功能:升序,奇数在前,偶数在后
*/
#include "stdio.h"
int main ()
{
int j = 0, k = 0;
int a[10];
int b[10];
int c[10];
int *pa = a;
printf("please input 10 number: \n");
for (int i = 0; i < 10; i++)
{
printf("please input %dth number: ",i+1);
scanf("%d",&a[i]);
if(a[i] % 2 ==0)
b[j++] = a[i];
else
c[k++] = a[i];
}
int *pb = b;
int *pc = c;
for(int p = 0; p < j; p++)
for(int p1 = p; p1 < j; p1++) //此处不能定义int p1 = 1;
if(b[p] >= b[p1])
b[p1] = b[p];
for(int q = 0; q < k; q++)
for(int q1 = q; q1 < k; q1++)
if(c[q] >= c[q1])
c[q1] = c[q];
while(j) //此处不能用while(*pc)语句跳出循环
{
*pa = *pc;
pa++;
pc++;
j--;
}
while(k)
{
*pa = *pb;
pa++;
pb++;
k--;
}
for (i = 0; i < 10; i++)
printf("%d ",a[i]);
return 0;
}
/*
总结:
在VC++6.0中显示的结果::
——————————————————————————
please input 10 number:
please input 1th number: 1
please input 2th number: 2
please input 3th number: 3
please input 4th number: 4
please input 5th number: 5
please input 6th number: 6
please input 7th number: 7
please input 8th number: 8
please input 9th number: 9
please input 10th number: 10
1 3 5 7 9 2 4 6 8 10
——————————————————————————
*/
十七、在a数组后面添加b数组的值
/*
2017年3月12日14:07:05
功能:在a数组后面添加b数组的值
*/
#include"stdio.h"
int main()
{
int i = 0;
char a[20];
char b[20];
char *pa = a;
char *pb = b;
printf("请输入字符串a:");
gets(a);
printf("请输入字符串b:");
gets(b); //使用gets()函数时,最后元素不需要添加结尾标识符'\0'
while (b[i++] != '\0')
{
;
}
int string_b_len = i; //求出b[]数组的长度
while (*pa)
{
pa++;
} //将a[]数组的指针移到末尾
if (string_b_len < 5)
{
for (int n = 0; n < string_b_len; n++)
{
*pa = *pb;
pa++;
pb++;
}
puts(a);
}
else if (string_b_len >= 5)
{
for (int n = 0; n < 5; n++)
{
*pa = *pb;
pa++;
pb++;
}
puts(a);
}
}
/*
总结:
在VC++6.0中显示的结果:
——————————————————————
请输入字符串a:asdfghjkl
请输入字符串b:dft
asdfghjkldft
——————————————————————
*/
十八、在a数组后面添加b数组的值(数组实现)
源代码程序(数组实现):
/*
2017年3月12日14:07:05
功能:在a数组后面添加b数组的值(数组实现)
*/
#include"stdio.h"
int main()
{
int j = 0;
int i = 0;
char a[20];
char b[20];
printf("请输入字符串a:");
gets(a);
printf("请输入字符串b:");
gets(b);
while (b[i] != '\0')
{
i++;
}
while (a[j] != '\0')
{
j++;
}
if (i < 5)
{
for (int x = 0; x < i; x++)
{
a[j++] = b[x];
}
a[j] = '\0';
}
else if (i >= 5)
{
for (int y = 0; y < 5; y++)
{
a[j++] = b[y];
}
a[j] = '\0';
}
puts(a);
}
/*
总结:
在VC++6.0中显示的结果:
——————————————————————
请输入字符串a:asdfghjkl
请输入字符串b:dft
asdfghjkldft
——————————————————————
*/