鱼C论坛

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

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

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

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

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

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

        for (int i = 0; i < n-1; i++)
        {
            for (int j = 0; j < n-1; j++)
            {
                *(*(p+i)+j) = str[m];                   //对二维数组的赋值
                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[3][12]={
            {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)[12] ;
        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[3][12]={
            {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)[12] ;
        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[3][12]={
             {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)[12] = 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[3][12]={
              {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)[12] = arr;                                           //数组指针的初始化
        float MAX ,MIN;
         MAX = MIN =arr[1][0];
        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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-24 11:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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