liu10 发表于 2020-2-13 22:15:25

S1E24 指针和二维数组(数组指针方法,内含答案前答案后版本)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#if(0)                                                          // 全部的代码我只想说一句(看答案之后我在思考我要不要学习编程了)
    // 0 编写一个程序,接收用户的输入,并将前 9 个字符以正方形矩阵(3 * 3)的方式输出
    int main(void){
      char (*p) ;                                  //声明一个数组指针
      int i,n=0;
      char str;                                  //接收用户输入的任意东西
      printf("请输入一穿内容:\n");
      scanf("%s",str);
      for (int i = 0; i < 3; i++)
      {
            for (int j = 0; j < 3; j++)
            {
                *(*(p+i)+j) = str;                   // 对数组指针进行赋值
                n++;
            }
      }
      for (int i = 0; i < 3; i++)
      {
            for (int j = 0; j < 3; j++)
            {
                printf("%c", *(*(p+i)+j));      //对数组指针进行打印输出
            }
            printf("\n");
      }
      system("pause");
    }
#endif
#if(0)
    // 1 要求程序自动计算用户输入的字符,并以最大的正方形矩阵输出;
    int main(){
      char str;
      int length , n=1,m=0;
      
      printf("请输入一段内容");
      scanf("%s",str);                        //获取输入的任意字符串
      length = strlen(str);                   // 获取输入的字符串的长度
      while ((n*n)<length)                  //得到最适合输出的方针数组
      {
            n++;
      }
      char (*p);                         // 声明数组

      for (int i = 0; i < n-1; i++)
      {
            for (int j = 0; j < n-1; j++)
            {
                *(*(p+i)+j) = str;                   //对二维数组的赋值
                m++;
            }
      }
      //打印二维数组的内容
      for (int i = 0; i < n-1; i++)
      {
            for (int j = 0; j < n-1; j++)
            {
                printf("%c",*(*(p+i)+j));             //对数组指针的打印
            }
            printf("\n");
      }
      system("pause");

    }
#endif
#if(0)
    //2用户输入待查询年月份(输入格式:2015-03),输出该月份的 PM2.5 值。(个人版初版)
    int main(){
      float arr={
            {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 31.3, 35.5, 58.7, 49.6, 55.5},
            {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38.5, 41.5, 44.7, 38.1, 41.5},
            {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34.3, 0.0, 0.0, 0.0, 0.0}
      };
      float (*p) ;
      p = arr;                                          //数组指针的初始化
      int year , month;
      printf("请输入带查询的日期(年-月):");
      scanf("%d-%d",&year,&month);                        // 接收用户的输入 并判断 出结果
      switch (year)                  
      {
      case 2014:
            // printf("2014");
            printf("%d年%d月PM2.5的值为:%.2f\n",year,month,**(p+(month-1)));
            break;
      case    2015:
            // printf("2015");
            printf("%d年%d月PM2.5的值为:%.2f\n",year,month,*(*(p+1)+(month-1)));
            break;
      case    2016:
            printf("%d年%d月PM2.5的值为:%.2f\n",year,month,*(*(p+2)+(month-1)));
      default:
            break;
      }
      system("pause");
    }
#endif
#if(0)
    //2用户输入待查询年月份(输入格式:2015-03),输出该月份的 PM2.5 值。(个人版初版)
    int main(){
      float arr={
            {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 31.3, 35.5, 58.7, 49.6, 55.5},
            {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38.5, 41.5, 44.7, 38.1, 41.5},
            {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34.3, 0.0, 0.0, 0.0, 0.0}
      };
      float (*p) ;
      p = arr;
      int year , month;
      printf("请输入带查询的日期(年-月):");
      scanf("%d-%d",&year,&month);
      printf("%d年%d月PM2.5的值为:%.2f\n",year,month,*(*(p+(year-2014))+(month-1)));         //不需要判断年份,年份-2014 得到的值为数组的偏移量
   
      system("pause");
    }
#endif

#if(0)
    // 将下列数据打印为横向直方图 无大小值          (没看答案之前的代码,真的是太可爱了)
    int main(){
          float arr={
             {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 31.3, 35.5, 58.7, 49.6, 55.5},
            {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38.5, 41.5, 44.7, 38.1, 41.5},
            {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34.3, 0.0, 0.0, 0.0, 0.0}
      };
      float (*p) = arr;
      for (int i = 0; i < 3; i++)
      {
            for (int j = 0; j < 12; j++)
            {
                if(i==0){                                                       //蠢到不想解释
                  if(*(*(p+i)+j)==0 ){
                        continue;
                  }else
                  {
                        printf("2014年%2d月:",j);
                        for (int m = 0; m < *(*(p+i)+j); m++)
                        {
                           printf("*");
                        }
                        printf("\n");
                  }
                }else if(i==1){
                     if(*(*(p+i)+j)==0 ){
                        continue;
                  }else
                  {
                        printf("2015年%2d月:",j);
                        for (int m = 0; m < *(*(p+i)+j); m++)
                        {
                           printf("*");
                        }
                        printf("\n");
                  }
                }else
                {
                  if(*(*(p+i)+j)==0 ){
                        continue;
                  }else
                  {
                        printf("2016年%2d月:",j);
                        for (int m = 0; m < *(*(p+i)+j); m++)
                        {
                           printf("*");
                        }
                        printf("\n");
                  }
                }
               
            }
            
      }
      
      
      system("pause");
    }
#endif

#if(1)
       //4 将下列数据打印为横向直方图
    int main(){
          float arr={
            {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 31.3, 35.5, 58.7, 49.6, 55.5},
                {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38.5, 41.5, 44.7, 38.1, 41.5},
                {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34.3, 0.0, 0.0, 0.0, 0.0}
      };
      float (*p) = arr;                                           //数组指针的初始化
      float MAX ,MIN;
         MAX = MIN =arr;
      for (int i = 0; i < 3; i++)
      {
            for (int j = 0; j < 12; j++)
            {
                if(*(*(p+i)+j)==0 ){                                    //当值为0的时候 不进行任何操作
                  continue;
                }else
                  {
                  if(*(*(p+i)+j) > MAX){                              // 大小值得 判断
                        MAX = *(*(p+i)+j);
                  }
                  if(*(*(p+i)+j) < MIN){
                        MIN = *(*(p+i)+j);
                  }
                }
            }
      }
      printf("最小值:%.2f,最大值%.2f\n",MAX,MIN);
      
      for (int i = 0; i < 3; i++)
      {
            for (int j = 0; j < 12; j++)
            {
                if(*(*(p+i)+j)==0 ){                                    //当值为0的时候 不进行任何操作
                  continue;
                }else
                {
                  printf("%d年%2d月:",i+2014,j+1);               // 打印年月
                  for (int m = 0; m < *(*(p+i)+j); m++)            // 打印 *
                  {
                        printf("*");
                  }
                  printf("\n");
                }
            }
            
      }
      system("pause");
    }
#endif
页: [1]
查看完整版本: S1E24 指针和二维数组(数组指针方法,内含答案前答案后版本)