C:数组

数组、排序

关于排序 :参考 

关于数组: 参考

求a[i][j]行与列的和然后求平均值 参考   

二维数组使用指针的表示方法  参考

字符串数组:char  name [5][20] ={ {} , {} ,{} ,{} ,{} };  或者 char name[5][20] = { "xxx", "xxx", "xxx",  "xxx", "xxx"};

二维数组就是一维数组的组合,数组维度大于2就是多维数组. 

二维数组如何用指针表示int b[2][5]用下标方法表示如下int b[i][j]假设i = 0; j = 0,1,2,3,4;用指针方法表示为* (* (b+i)+j) 也可演变为* (b[i]+j) 也可演变 (* (b+i) ) [j]
二维数组如何用指针表示
int b[2][5]
用下标方法表示如下
int b[i][j]
假设i = 0; j = 0,1,2,3,4;
用指针方法表示
* (* (b+i)+j) 演变 * (b[i]+j) 演变 (* (b+i) ) [j]

二维数组可以看成是指针的指针,b[][] = **b;
比如b[2][5];
它是一个2行5列的二维数组,也可以看成是二级指针,一级存放的是行指针,然后每个行指针里面其实又是指向了5个列元素.
*(*(b+i)+j),*(b+i)是先取行指针,然后+j偏移到所要的列,然后*取值就得到i行j列的数据了.

实战代码:

 

 //计算到每一列的和之后,求平均值      short a[3][4] = { 0 }, sum = 0;
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 4; j++) {
                a[i][j] = arc4random() % ( 40 - 30 + 1 ) + 30;
                printf("%d \t", a[i][j]);
            }
            printf("\n");
        }
    printf("\n");
    for (int j = 0; j < 4 ; j++) {
        for (int i = 0; i < 3; i++) {
//            b[i][j] = arc4random() % ( 40 - 30 + 1 ) + 30;
            printf("%d \t", a[i][j]);
            sum += a[i][j];
        }
        printf("平均值 %.2f ",sum *1.0 / 3 );
        printf("\n");
        sum = 0;
    }

 

//假如有这样一个数组num[i][j]
for(i=0;i<行数;i++)
{
    n=0;
    for(j=0;j<列数;j++)
    {
        n=n+num[i][j];//各行之和
    }
    n=n/列数;//各行平均值
//内外for 调换求出的就是各列平均值。
for(j=0;j<列数;j++)
{
    n=0;
    for(i=0;i<行数;i++)
    {
        n=n+num[i][j];//各列之和
    }
    n=n/行数;//各列平均值

 

 //将数组的行与列互换位置然后打印
    short a[3][4] = { 0 }, sum = 0;
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            a[i][j] = arc4random() % ( 40 - 30 + 1 ) + 30;
            printf("%d \t", a[i][j]);
        }
        printf("\n");
        
    }
    printf("\n");printf("\n");
    for (int j = 0; j < 4; j++) {
        for (int i = 0; i < 3; i++) {
            printf("%d \t", a[i][j]);
        }
        printf("\n");
  }

 

//求行或列中最大元素
short a[4][5] = { 0 }, max = 0;
    int row = 0;//行标
    int colume = 0;//列标
    for (int i = 0 ; i < 4; i ++) {
        for (int j = 0 ; j < 5; j ++) {
            a[i][j] = arc4random() % (40 - 30 + 1 )+ 30;
            printf("%d \t",a[i][j]);
        
        if (max < a[i][j] ) {
            max = a[i][j];
            row = i;
            colume = j;
        }
        }
        printf("最大值为%d 行:%d 列 %d",max,row + 1,colume + 1);
        max = 0;
        printf("\n");
    }
    printf("\n");

 

  //耶稣门徒游戏
      //第一步;如何表示这13个人?用一个一维数组 【13】
      //第二部;如何报数?   count
      //第三部;什么时候报到3的人退出游戏? 标记退出游戏的人的状态,让其置为0,在数组中就是该元素置为0
      //第四部;什么时候结束游戏?   剩余1个人的时候游戏结束,用 while 循环
      //第五步;如何记录下一轮循环
  /*
      int a[13] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
      int count = 0;//记录报数
     int pernum = 13;//记录还能游戏的人
     int i = 0;//初始化循环变量
     while (pernum > 1) {
         if (a[i] != 0) {//a[i] != 0 表示当前此人还在游戏中 ,报数有效
             count ++;//记录报数
         }
         if (count == 3) {
             count = 0;//计数器清零
             pernum --;//游戏人数要减一,此人退出游戏
             a[i] = 0;//标记此人退出游戏
         }
         i++;
         //当i == 13时,说明该第14个人报数,此时转到第一个人继续游戏
         if (i == 13) {
             i = 0;//进入下一轮游戏
         }
     }
     //数组中元素不为 0 的人就是叛徒
     for (int i = 0; i < 13; i++) {
         if (a[i] != 0 ){
             printf("叛徒就是第 %d 个人",a[i]);
         }
     }

字符串排序

 char s[6][50];
    int n,i,j,k;
    printf("请输入比较字符串的个数:\n");
    scanf("%d",&n);
    printf("请输入字符串,然后按回车键:\n");
    for(i=0;i<n;i++){
        scanf("%s",s[i]);
    }
    //        gets(s[i]);
    for(i=0;i< n ;i++)
    {
        k=i;//记录字符串的下标
        for(j = 0 ;j < i;j++)
            if(strcmp(s[i],s[j])<0){
                k=j;
                char t[50];
                strcpy(t,s[i]);
                strcpy(s[i],s[j]);
                strcpy(s[j],t);
            }
    }
    


    printf("================================================\n");
    for(i=0;i<n;i++){
        printf("%s  \t",s[i]);
    }

 

posted @ 2015-07-29 09:02  ywda  阅读(312)  评论(0编辑  收藏  举报