鱼C论坛

 找回密码
 立即注册
查看: 1617|回复: 0

[技术交流] S1E24 指针和二维数组(数组指针方法,内含答案前答案后版本)

[复制链接]
发表于 2020-2-13 22:15:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #if(0)                                                          // 全部的代码我只想说一句(看答案之后我在思考我要不要学习编程了)
  5.     // 0 编写一个程序,接收用户的输入,并将前 9 个字符以正方形矩阵(3 * 3)的方式输出
  6.     int main(void){
  7.         char (*p)[3] ;                                  //声明一个数组指针
  8.         int i,n=0;
  9.         char str[255];                                  //接收用户输入的任意东西
  10.         printf("请输入一穿内容:\n");
  11.         scanf("%s",str);
  12.         for (int i = 0; i < 3; i++)
  13.         {
  14.             for (int j = 0; j < 3; j++)
  15.             {
  16.                 *(*(p+i)+j) = str[n];                   // 对数组指针进行赋值
  17.                 n++;
  18.             }
  19.         }
  20.         for (int i = 0; i < 3; i++)
  21.         {
  22.             for (int j = 0; j < 3; j++)
  23.             {
  24.                 printf("%c  ", *(*(p+i)+j));        //对数组指针进行打印输出
  25.             }
  26.             printf("\n");
  27.         }
  28.         system("pause");
  29.     }
  30. #endif
  31. #if(0)
  32.     // 1 要求程序自动计算用户输入的字符,并以最大的正方形矩阵输出;
  33.     int main(){
  34.         char str[255];
  35.         int length , n=1,m=0;
  36.         
  37.         printf("请输入一段内容");
  38.         scanf("%s",str);                        //获取输入的任意字符串
  39.         length = strlen(str);                   // 获取输入的字符串的长度
  40.         while ((n*n)<length)                    //得到最适合输出的方针数组
  41.         {
  42.             n++;
  43.         }
  44.         char (*p)[n-1];                         // 声明数组

  45.         for (int i = 0; i < n-1; i++)
  46.         {
  47.             for (int j = 0; j < n-1; j++)
  48.             {
  49.                 *(*(p+i)+j) = str[m];                   //对二维数组的赋值
  50.                 m++;
  51.             }
  52.         }
  53.         //  打印二维数组的内容
  54.         for (int i = 0; i < n-1; i++)
  55.         {
  56.             for (int j = 0; j < n-1; j++)
  57.             {
  58.                 printf("%c  ",*(*(p+i)+j));             //对数组指针的打印
  59.             }
  60.             printf("\n");
  61.         }
  62.         system("pause");

  63.     }
  64. #endif
  65. #if(0)
  66.     //  2用户输入待查询年月份(输入格式:2015-03),输出该月份的 PM2.5 值。  (个人版初版)
  67.     int main(){
  68.         float arr[3][12]={
  69.             {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 31.3, 35.5, 58.7, 49.6, 55.5},
  70.             {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38.5, 41.5, 44.7, 38.1, 41.5},
  71.             {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34.3, 0.0, 0.0, 0.0, 0.0}
  72.         };
  73.         float (*p)[12] ;
  74.         p = arr;                                            //数组指针的初始化
  75.         int year , month;
  76.         printf("请输入带查询的日期(年-月):");
  77.         scanf("%d-%d",&year,&month);                        // 接收用户的输入 并判断 出结果
  78.         switch (year)                  
  79.         {
  80.         case 2014:
  81.             // printf("2014");
  82.             printf("%d年%d月PM2.5的值为:%.2f\n",year,month,**(p+(month-1)));
  83.             break;
  84.         case    2015:
  85.             // printf("2015");
  86.             printf("%d年%d月PM2.5的值为:%.2f\n",year,month,*(*(p+1)+(month-1)));
  87.             break;
  88.         case    2016:
  89.             printf("%d年%d月PM2.5的值为:%.2f\n",year,month,*(*(p+2)+(month-1)));
  90.         default:
  91.             break;
  92.         }
  93.         system("pause");
  94.     }
  95. #endif
  96. #if(0)
  97.     //  2用户输入待查询年月份(输入格式:2015-03),输出该月份的 PM2.5 值。  (个人版初版)
  98.     int main(){
  99.         float arr[3][12]={
  100.             {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 31.3, 35.5, 58.7, 49.6, 55.5},
  101.             {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38.5, 41.5, 44.7, 38.1, 41.5},
  102.             {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34.3, 0.0, 0.0, 0.0, 0.0}
  103.         };
  104.         float (*p)[12] ;
  105.         p = arr;
  106.         int year , month;
  107.         printf("请输入带查询的日期(年-月):");
  108.         scanf("%d-%d",&year,&month);
  109.         printf("%d年%d月PM2.5的值为:%.2f\n",year,month,*(*(p+(year-2014))+(month-1)));         //不需要判断年份,年份-2014 得到的值为数组的偏移量
  110.      
  111.         system("pause");
  112.     }
  113. #endif

  114. #if(0)
  115.     // 将下列数据打印为横向直方图 无大小值          (没看答案之前的代码,真的是太可爱了)
  116.     int main(){
  117.           float arr[3][12]={
  118.              {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 31.3, 35.5, 58.7, 49.6, 55.5},
  119.             {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38.5, 41.5, 44.7, 38.1, 41.5},
  120.             {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34.3, 0.0, 0.0, 0.0, 0.0}
  121.         };
  122.         float (*p)[12] = arr;
  123.         for (int i = 0; i < 3; i++)
  124.         {
  125.             for (int j = 0; j < 12; j++)
  126.             {
  127.                 if(i==0){                                                       //蠢到不想解释
  128.                     if(*(*(p+i)+j)==0 ){
  129.                         continue;
  130.                     }else
  131.                     {
  132.                         printf("2014年  %2d月:",j);
  133.                         for (int m = 0; m < *(*(p+i)+j); m++)
  134.                         {
  135.                            printf("*");
  136.                         }
  137.                         printf("\n");
  138.                     }
  139.                 }else if(i==1){
  140.                      if(*(*(p+i)+j)==0 ){
  141.                         continue;
  142.                     }else
  143.                     {
  144.                         printf("2015年  %2d月:",j);
  145.                         for (int m = 0; m < *(*(p+i)+j); m++)
  146.                         {
  147.                            printf("*");
  148.                         }
  149.                         printf("\n");
  150.                     }
  151.                 }else
  152.                 {
  153.                     if(*(*(p+i)+j)==0 ){
  154.                         continue;
  155.                     }else
  156.                     {
  157.                         printf("2016年  %2d月:",j);
  158.                         for (int m = 0; m < *(*(p+i)+j); m++)
  159.                         {
  160.                            printf("*");
  161.                         }
  162.                         printf("\n");
  163.                     }
  164.                 }
  165.                
  166.             }
  167.             
  168.         }
  169.         
  170.         
  171.         system("pause");
  172.     }
  173. #endif

  174. #if(1)
  175.        //4 将下列数据打印为横向直方图
  176.     int main(){
  177.           float arr[3][12]={
  178.               {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 31.3, 35.5, 58.7, 49.6, 55.5},
  179.                 {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38.5, 41.5, 44.7, 38.1, 41.5},
  180.                 {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34.3, 0.0, 0.0, 0.0, 0.0}
  181.         };
  182.         float (*p)[12] = arr;                                           //数组指针的初始化
  183.         float MAX ,MIN;
  184.          MAX = MIN =arr[1][0];
  185.         for (int i = 0; i < 3; i++)
  186.         {
  187.             for (int j = 0; j < 12; j++)
  188.             {
  189.                 if(*(*(p+i)+j)==0 ){                                    //当值为0的时候 不进行任何操作
  190.                     continue;
  191.                 }else
  192.                     {
  193.                     if(*(*(p+i)+j) > MAX){                              // 大小值得 判断
  194.                         MAX = *(*(p+i)+j);
  195.                     }
  196.                     if(*(*(p+i)+j) < MIN){
  197.                         MIN = *(*(p+i)+j);
  198.                     }
  199.                 }
  200.             }
  201.         }
  202.         printf("最小值:%.2f,最大值%.2f\n",MAX,MIN);
  203.         
  204.         for (int i = 0; i < 3; i++)
  205.         {
  206.             for (int j = 0; j < 12; j++)
  207.             {
  208.                 if(*(*(p+i)+j)==0 ){                                    //当值为0的时候 不进行任何操作
  209.                     continue;
  210.                 }else
  211.                 {
  212.                     printf("%d年  %2d月:",i+2014,j+1);                 // 打印年月
  213.                     for (int m = 0; m < *(*(p+i)+j); m++)              // 打印 *
  214.                     {
  215.                         printf("*");
  216.                     }
  217.                     printf("\n");
  218.                 }
  219.             }
  220.             
  221.         }
  222.         system("pause");
  223.     }
  224. #endif
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 14:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表