代码改变世界

C语言-数组

2016-05-31 19:53  Purples  阅读(376)  评论(0编辑  收藏  举报

学习了这么久的C语言,相信大家对数组并不陌生了,在这里写些数组应用,望采纳.

 1 #include <stdio.h>
 2 
 3 //定义一个由整数组成的数组,求出其中奇数的个数和偶数的个数,并打印 
 4 
 5 int main(){
 6     int a[]={1,2,3,4,5,6,8};
 7     int i,odd=0,even=0;
 8     int len=sizeof(a)/sizeof(int); 
 9     printf("数组元素为:\n");
10     for(i=0;i<len;i++)
11     {
12         if(a[i]%2==0) even++;
13         else odd++;
14         printf("%d ",a[i]); 
15     }
16     printf("\n");
17     printf("奇数的个数:%d\n",odd);
18     printf("偶数的个数:%d\n",even);
19     return 0;
20 }
1、 定义一个由整数组成的数组,求出其中奇数的个数和偶数的个数,并打印
 1 #include <stdio.h>
 2 
 3 /*从键盘输入序列{48,62,35,77,55,14,35,98,22,40},
 4 用冒泡排序法由低到高排序并输出排序结果*/
 5 
 6 int main(){
 7     int i,j,change=1;
 8     int a[10]={48,62,35,77,55,14,35,98,22,40};
 9     for(i=0;i<10&&change;i++)/* 如果比较一趟没有发生交换,这说明已经有序 */
10     {
11         change=0;
12         for(j=0;j<10-i-1;j++)
13         if(a[j]>a[j+1])
14         {
15             a[j]^=a[j+1];
16             a[j+1]^=a[j];
17             a[j]^=a[j+1];
18             change=1;
19         }
20     }
21     printf("排序后:\n");
22     for(i=0;i<10;i++)    printf("%d ",a[i]);
23     return 0;
24 }
2、 数组的冒泡排序法
 1 #include <stdio.h>
 2 
 3 //二维数组计算两个矩阵MA和MB之差,将结果存储在MA中
 4 
 5 int main(){
 6     int i,j;
 7     int a[3][3]={5,6,7,4,3,8,2,9,1,10};
 8     int b[3][3]={1,5,4,6,9,8,7,3,2,10};
 9     printf("矩阵1:\n");/* 输出矩阵MA */
10     for(i=0;i<3;i++){
11         for(j=0;j<3;j++){
12             printf("%4d",a[i][j]);
13         }
14         printf("\n");
15     }
16     printf("矩阵2:\n");/* 输出矩阵MB */
17     for(i=0;i<3;i++){
18         for(j=0;j<3;j++){
19             printf("%4d",b[i][j]);
20         }
21         printf("\n");
22     }
23     printf("2个矩阵之差:\n");/* 输出矩阵MA-MB的结果 */
24     for(i=0;i<3;i++){
25         for(j=0;j<3;j++){
26             a[i][j]-=b[i][j];
27             printf("%4d",a[i][j]);
28         }
29         printf("\n");
30     }
31     return 0;
32 }
3、 二维数组计算两个矩阵MA和MB之差,将结果存储在MA中
 1 #include <stdio.h>
 2 
 3 //从键盘输入一个2行3列的矩阵,并将其转置(行和列元素互换)并存到二维数组中
 4 
 5 int main(){
 6     int c[2][3];
 7     int d[3][2];
 8     int i,j;
 9     printf("Input matix c[2][3]:\n");
10     for(i=0;i<2;i++){
11         for(j=0;j<3;j++)
12             scanf("%d",&c[i][j]);
13     }
14     printf("matix c[2][3]:\n");
15     for(i=0;i<2;i++){
16         for(j=0;j<3;j++){
17             printf("%4d",c[i][j]);
18             d[j][i]=c[i][j];
19         }
20         printf("\n");
21     }
22     printf("matix d[3][2]:\n");
23     for(j=0;j<3;j++){
24         for(i=0;i<2;i++)
25             printf("%4d",d[j][i]);
26         printf("\n");
27     }
28     return 0;
29 }
4、 一个2行3列的矩阵的转置(行和列元素互换)
 1 #include <stdio.h>
 2 
 3 //从键盘输入4个学生语文和数学课程的成绩,求每个学生两门课的总分,并按总分从高到低的顺序输出每个学生两门课程的成绩和总分
 4 
 5 //方法一:两次循环,外层循环只找总最大值的一行和首行交换,和总分放在另一个数组,两个数组分别交换值 
 6 
 7 int main(){
 8     int i,j,k,t,score[4][2],sum[4];/* 定义数组和变量 */
 9     printf("Input 4 student`s scores(Chinese and Math):\n");
10     for(i=0;i<4;i++){
11         scanf("%d,%d",&score[i][0],&score[i][1]);/* 输入成绩 */
12         sum[i]=score[i][0]+score[i][1];
13     }
14     for(i=0;i<4;i++){
15         k=i;/* 用k存储第一趟总分最高者的下标 */
16         for(j=i+1;j<4;j++)
17             if(sum[j]>sum[k])    k=j;
18         if(k!=i)
19         {
20             for(j=0;j<2;j++)
21             {
22                 t=score[i][j];/* 变量t用来作交换值的中间值 */
23                 score[i][j]=score[k][j];
24                 score[k][j]=t;
25             }
26             t=sum[i];/* 变量t用来作交换值的中间值 */
27             sum[i]=sum[k];
28             sum[k]=t;
29         }
30     }
31     printf("The sorted scores:\n");
32     printf("%6s%6s%6s:\n","chinese","math","sum");
33     for(i=0;i<4;i++)/* 输出每个学生的成绩和总分 */
34         printf("%6d%6d%6d\n",score[i][0],score[i][1],sum[i]);
35     return 0;
36 }
37 
38 //方法二:用到了三重循环(数组冒泡排序),并且将总分分别加入每个一维数组中 
39 
40 int main2(){
41     int i,j,k,t,score[4][3];/* 定义数组和变量 */
42     printf("Input 4 student`s scores(Chinese and Math):\n");
43     for(i=0;i<4;i++){
44         scanf("%d,%d",&score[i][0],&score[i][1]);/* 输入成绩 */
45         score[i][2]=score[i][0]+score[i][1];
46     }
47     for(i=0;i<3;i++){/* 控制前一行 */ 
48         for(k=i+1;k<4;k++){/* 控制后一行 */ 
49             if(score[i][2]<score[k][2]){/* 如果前一行的总分比后一行的小 */ 
50                 for(j=0;j<3;j++){/* 交换两行的每一列 */
51                     t=score[i][j];
52                     score[i][j]=score[k][j];
53                       score[k][j]=t;
54                 }
55             }
56         }
57     }
58     printf("The sorted scores:\n");
59     printf("%6s%6s%6s:\n","chinese","math","sum");
60     for(i=0;i<4;i++)/* 输出每个学生的成绩和总分 */
61         printf("%6d%6d%6d\n",score[i][0],score[i][1],score[i][2]);
62     return 0;
63 }
5、 二维数组的排序和输出
 1 #include <stdio.h>
 2 #include <stdlib.h> 
 3 
 4 //用格式符%c逐个输入字符到字符数组,然后逐个字符输出
 5 
 6 int main(){
 7     char d[20];int i;
 8     printf("please input 10 char:\n");
 9     for(i=0;i<10;i++)
10         scanf("%c",&d[i]);/* 必须输入10个字符,不会自动加结束符'\0' */
11     d[i]='\0';/* 在末尾加上结束符'\0' */
12     for(i=0;i<10;i++)
13         printf("%c",d[i]);
14     printf("\n");
15     printf("%s",d);/* 因为在末尾加了结束符,所以可以整体输出 */ 
16     return 0;
17 } 
18 
19 7.10 用格式符%c逐个输入字符到字符数组,然后逐个字符输出
6、 用格式符%c逐个输入字符到字符数组,然后逐个字符输出
 1 #include <stdio.h>
 2 #include <string.h>/* 字符串处理函数 */
 3 
 4 //字符串长度函数        strlen(字符串) 
 5 //字符串整行输入函数    gets(字符串)
 6 //字符串整体输出函数    puts(字符串)
 7 //字符串比较函数        strcmp(字符串1,字符串2)
 8 //字符串复制函数        stecpy(字符串数组1,字符串2)
 9 //字符串连接函数        strcat(字符串数组1,字符串2)
10 
11 //上述6个字符串处理函数应用举例
12 
13 int main(){
14     char str1[30]="Happy birthday",str2[30]="2014";
15     puts(strcat(str1,str2));
16     printf("%d %d\n",strlen(str1),strcmp(str1,str2));
17     gets(str1);
18     printf("%d %d\n",strlen(str1),strcmp(str1,str2));
19     puts(strcpy(str1,str2));
20     printf("%d %d\n",strlen(str1),strcmp(str1,str2));
21     gets(str1);
22     puts(strcat(str1,str2));
23     return 0;
24 }
7、 字符串处理函数应用举例
 1 #include<stdio.h>
 2 #include<malloc.h>
 3 int insert(int s[],int n)
 4 {
 5     int i,j,t;
 6     for(i=1;i<n;i++)
 7     {
 8         t=s[i];
 9         j=i-1;
10         while((j>=0)&&(t<s[j]))
11         {
12             s[j+1]=s[j];
13             j--;
14         }
15         s[j+1]=t;
16     }
17 }
18 int main()
19 {
20     int i,n;
21     scanf("%d",&n);
22     int *arr=(int *)malloc(sizeof(int)*n);
23     for(i=0;i<n;i++)
24     scanf("%d",&arr[i]);
25     insert(arr,n);
26     for(i=0;i<n;i++)
27     printf("%d ",arr[i]);
28 }
8、 插入排序
 1 #include <stdio.h>
 2 
 3 //用字符型数组名和字符指针变量两种方法整体输入与输出字符串 
 4 
 5 int main(){
 6     char str[62]="good moring!",*p=str;/* 定义ps为指向字符串的首字符的指针变量 */
 7     char *nstr="nice to meet you";
 8     printf("%s\n",str);/* 用字符型数组整体输出字符串 */ 
 9     printf("%s\n",nstr);/* 用字符指针整体输出字符串 */ 
10     gets(str);/* 用字符型数组整体输入带空格的字符串 */ 
11     printf("%s\n",str);
12     gets(p);/* 用字符指针整体输入带空格的字符串 */ 
13     printf("%s\n",str);/* 与printf("%s\n",p); 等价 */ 
14     return 0;
15 }
9、 用字符型数组名和字符指针变量两种方法整体输入与输出字符串
 1 #include <stdio.h>
 2 
 3 /*利用指向分数组的指针变量,输入多个字符串,
 4 将它们按行存储在二维字符数组中,然后输出全部字符串*/ 
 5 
 6 int main(){
 7     char a[4][20];
 8     char (*p)[20];/* p是指向分数组的指针变量 */
 9     printf("Input srtings:\n");
10     for(p=a;p<a+4;p++)
11         gets(*p);
12     printf("Output srtings:\n");
13     for(p=a;p<a+4;p++)
14         printf("%s ",*p);
15     return 0;
16 }
10、 利用指向分数组的指针变量在二维数组中输入和输出字符串
 1 #include <stdio.h>
 2 #include <malloc.h>
 3 #include <stdlib.h>
 4 
 5 //用动态数组实现一维数组的创建和使用 
 6 
 7 int main(){
 8     int *array = NULL,num,i;
 9     printf("please input the number of element:");
10     scanf("%d",&num);/* 申请动态数组使用的内存块 */
11     array=(int *)malloc(sizeof(int)*num);
12     if(array==NULL){
13         printf("out of memory,press any key to quit...\n");
14         exit(0);
15     }
16     /* 提示输入num个数据 */
17     printf("please input %d elements: ",num);
18     for(i=0;i<num;i++)
19         scanf("%d",&array[i]);
20     /* 输出刚输入的num个数据 */
21     printf("%d elements are: \n",num);
22     for(i=0;i<num;i++)
23         printf("%d,",array[i]);
24     free(array);/* 释放又malloc函数申请的内存块 */
25     return 0;
26 }
11、 用动态数组实现一维数组的创建和使用
 1 #include <stdio.h>
 2 
 3 //用动态数组实现二维数组的创建和使用
 4 
 5 int main(){
 6     int n1,n2;
 7     int **array,i,j;
 8     puts("输入一维长度:");
 9     scanf("%d",&n1);
10     puts("输入二维长度:");
11     scanf("%d",&n2);
12     /* 先遵循从外层到里层,逐层申请的原则: */
13     /* 第一维,开辟元素为n1的指针型数组,用来存放二维数组每行首地址 */
14     array=(int**)malloc(n1*sizeof(int*));
15     if(array==NULL){/* 内存申请失败,提示退出 */
16         printf("out of memory,press any key to quit...\n");
17         exit(0);/* 终止程序运行,返回操作系统 */
18     }
19     for(i=0;i<n1;i++){
20         array[i]=(int*)malloc(n2* sizeof(int));
21         if(array==NULL){/* 内存申请失败,提示退出 */
22             printf("out of memory,press any key to quit...\n");
23             exit(0);/* 终止程序运行,返回操作系统 */
24         }
25         for(j=0;j<n2;j++){
26             array[i][j]=i+j+1;
27             printf("%d\t",array[i][j]);
28         }
29         puts("");
30     }
31     /* 最后不要忘了释放这些内存,这要遵循释放的时候从里层到外层,逐层释放的原则 */
32     for(i=0;i<n1;i++)
33         free(array[i]);
34     free(array); 
35     return 0;
36 } 
12、 用动态数组实现二维数组的创建和使用