zoukankan      html  css  js  c++  java
  • C语言-数组

    学习了这么久的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("数组元素为:
    ");
    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("
    ");
    17     printf("奇数的个数:%d
    ",odd);
    18     printf("偶数的个数:%d
    ",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("排序后:
    ");
    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:
    ");/* 输出矩阵MA */
    10     for(i=0;i<3;i++){
    11         for(j=0;j<3;j++){
    12             printf("%4d",a[i][j]);
    13         }
    14         printf("
    ");
    15     }
    16     printf("矩阵2:
    ");/* 输出矩阵MB */
    17     for(i=0;i<3;i++){
    18         for(j=0;j<3;j++){
    19             printf("%4d",b[i][j]);
    20         }
    21         printf("
    ");
    22     }
    23     printf("2个矩阵之差:
    ");/* 输出矩阵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("
    ");
    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]:
    ");
    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]:
    ");
    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("
    ");
    21     }
    22     printf("matix d[3][2]:
    ");
    23     for(j=0;j<3;j++){
    24         for(i=0;i<2;i++)
    25             printf("%4d",d[j][i]);
    26         printf("
    ");
    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):
    ");
    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:
    ");
    32     printf("%6s%6s%6s:
    ","chinese","math","sum");
    33     for(i=0;i<4;i++)/* 输出每个学生的成绩和总分 */
    34         printf("%6d%6d%6d
    ",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):
    ");
    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:
    ");
    59     printf("%6s%6s%6s:
    ","chinese","math","sum");
    60     for(i=0;i<4;i++)/* 输出每个学生的成绩和总分 */
    61         printf("%6d%6d%6d
    ",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:
    ");
     9     for(i=0;i<10;i++)
    10         scanf("%c",&d[i]);/* 必须输入10个字符,不会自动加结束符'' */
    11     d[i]='';/* 在末尾加上结束符'' */
    12     for(i=0;i<10;i++)
    13         printf("%c",d[i]);
    14     printf("
    ");
    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
    ",strlen(str1),strcmp(str1,str2));
    17     gets(str1);
    18     printf("%d %d
    ",strlen(str1),strcmp(str1,str2));
    19     puts(strcpy(str1,str2));
    20     printf("%d %d
    ",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
    ",str);/* 用字符型数组整体输出字符串 */ 
     9     printf("%s
    ",nstr);/* 用字符指针整体输出字符串 */ 
    10     gets(str);/* 用字符型数组整体输入带空格的字符串 */ 
    11     printf("%s
    ",str);
    12     gets(p);/* 用字符指针整体输入带空格的字符串 */ 
    13     printf("%s
    ",str);/* 与printf("%s
    ",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:
    ");
    10     for(p=a;p<a+4;p++)
    11         gets(*p);
    12     printf("Output srtings:
    ");
    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...
    ");
    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: 
    ",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...
    ");
    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...
    ");
    23             exit(0);/* 终止程序运行,返回操作系统 */
    24         }
    25         for(j=0;j<n2;j++){
    26             array[i][j]=i+j+1;
    27             printf("%d	",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、 用动态数组实现二维数组的创建和使用
  • 相关阅读:
    HomeBrew安装MongoDB如何启动
    Express + Mongoose 极简入门
    Express + Mongoose 极简入门
    浅谈 PHP 与手机 APP 开发(API 接口开发)
    浅谈 PHP 与手机 APP 开发(API 接口开发)
    统计与分布之伯努利分布与二项分布
    统计分布之泊松分布
    统计与分布之高斯分布
    Python 2 和 3 的区别及兼容技巧
    组合与排列
  • 原文地址:https://www.cnblogs.com/purplec/p/5547217.html
Copyright © 2011-2022 走看看