【牛客刷题】/*关于C学习过程中的经典习题剖析*/

简介: 【牛客刷题】/*关于C学习过程中的经典习题剖析*/

   🥤🥤嗨嗨嗨!各位小伙伴们,我依旧是你们熟悉的那个……额,理想很远大,自己却很平凡,但一直努力的小白啦🤡。

 

   🚈🚈那么最近呢,一直在不断更新C语言的知识点,那么大概在七月二十日左右,应该就会陆续更新 java部分的知识点啦,毕竟C知识入门语言,把根基打牢,才能盖出属于自己的大楼🤟!!

 

   🎋🎋好了,回归正题,今天要更新的就是一些我在C语言的学习过程的部分经典习题分享,还希望看完的小伙伴们一键三连,谢谢啦 🥞!

正文开始:

一、经典垃圾代码

🍎首先先看一个经典的例子:

   #include <stdio.h>

   int main()

   {

       int i = 1;

       int ret = (++i)+(++i)+(++i);

       printf("ret = %d\n", ret);

    return 0;

   }

   🍊代码解读:

   表达式(++i)+(++i)+(++i),只有操作符的优先级和结合性,没法确定唯一计算路径

   所以这个表达式可能因为计算顺序的差异导致结果是不一致的,所以表达式是错误的表达式。

   可以在VS和Linux gcc测试,结果是有差异的!!🍫🍫

二 、虾仁猪心

   🛸🛸这道题也是非常坑的一道题,如果对C语言知识点掌握的不牢靠的话,很容易踩坑:

   #include <stdio.h>

   int i;

   int main()

   {

       i--;

       if (i > sizeof(i))

       {

           printf(">\n");

       }

       else

       {

           printf("<\n");

       }

       return 0;  

   }

   🍎代码解读:

   C语言中,0为假,非0即为真。

   全局变量,没有给初始值时,编译其会默认将其初始化为0。

   i的初始值为0,i--结果-1,i为整形,sizeof(i)求i类型大小是4,按照此分析来看,结果应该选择B,但是sizeof的返回值类型实际为无符号整形,因此编译器会自动将左侧i自动转换为无符号整形的数据,-1对应的无符号整形是一个非常大的数字,超过4或者8,故实际应该选择A

   这道题其实很隐蔽,真是虾仁猪心🍖🍖!!!

三、X形图案

🍎问题描述:

🍭从键盘输入一个整数比如5,6等等。

🍿输出样式:

*   *

* *  

 *  

* *  

*   *

   🍵🍵问题分析:我们可以看到输出结果是由一个X形的*组成的图案,我们可以将其想象成一个5*5的矩阵 ,通过两层for循环的方式来控制矩阵的行和列,我们发现当行和列相等的时候都要打印*,那么右斜线就打印好了,左斜线的行+列的和始终等于我们的n-1,OK按照这个思路我们来设计求解方法:👇

   #include <stdio.h>

   int main()

   {

     int n = 0;

     while(scanf("%d", &n) != EOF)

     {

         for(int i=0; i<n; i++)  //外循环为行

         {

            for(int j=0; j<n; j++) //内循环为列

            {

                if(i == j || i+j == n-1)  

        //最关键的地方,正斜线为[i][i]处是*, 反斜杠为[i][n-1-j]处是*,一行打印1个或2个*

                    printf("*");

                else

                    printf(" ");

            }

            printf("\n"); //打印完一行,换行

         }

     }

     return 0;

   }

四、获得月份天数

   🍊问题描述:输入年份和月份,计算这一年这个月有多少天。

   🍎问题思路:这一题关键就是这个月份天数我们怎么去实现,尤其是二月份闰年有29天,非闰年有28天,怎么让程序知道这一年是闰年呢(使用if语句来判断),我们可以将每个月的天数放在一个数组里面,然后根据输入是否为闰年,来输出我们的结果:

   #include<stdio.h>

   int fun(int y)

   {

    return ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0);

   }

   int main()

   {

    int y = 0;

    int m = 0;

    int d = 0;

    int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };

    while (scanf("%d%d", &y, &m) == 2)

    {

     int d = days[m];

     if (fun(y) == 1 && m == 2)

     {

      d++;

     }

     printf("%d\n", d);

    }

    return 0;

   }

五、逆序输出一个字符串的内容

   🍏问题描述:

   🍐输入: I am a student

   🍒输出:tneduts a ma I

   #include <stdio.h>

   #include <string.h>

   int main()

   {

    char str1[100];

    char str2[100];

    int a, i;

    gets(str1);

    a = strlen(str1);

    for (i = 0; i < a; i++)

    {

     str2[i] = str1[a - 1 - i];

    }

    str2[i] = 0;

    printf("%s", str2);

   }

六、计算求和

   🍎问题描述:

   假设求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,

   例如:2+22+222+2222+22222

   🍈问题分析:通过给出的问题描述可以发现,需要求和的第i项有i个a,所以可以假设第i项为temp,则第i+1项为temp*10+a;

🍔🍔代码实现:

   #include<stdio.h>

   int main()

   {

    int a = 0;

    int n = 0;

    int i = 0;

    int sum = 0;

    int tmp = 0;

   

   

    scanf("%d%d", &a, &n);

    for(i=0; i<n; i++)

    {

     tmp = tmp*10+a;

     sum += tmp;

    }

    printf("%d\n", sum);

   

    return 0;

   }

相关文章
|
Web App开发 人工智能 数据可视化
RPA 快速入门|学习笔记
快速学习 RPA 快速入门
1132 0
RPA 快速入门|学习笔记
|
存储 运维 Cloud Native
The Snowflake Elastic Data WareHouse 论文解读
Snowflake是目前话题度超高的云原生数仓产品,从20年下半年上市到现在已经市值千亿了。它的流行进一步印证了云的重要性。纵观现在大大小小的数据库厂商,上云是必然要走的战略步骤,而snowflake则更加直接,类似于AWS Aurora或我们的PolarDB,它就是围绕着云基础设施构建的OLAP数据库产品。
1741 0
The Snowflake Elastic Data WareHouse 论文解读
|
9月前
|
数据采集 边缘计算 缓存
|
9月前
|
JSON API 开发者
京东商品列表 API 接口全攻略
京东商品列表API接口是京东开放平台提供的开发者工具,支持关键词搜索、店铺ID指定和商品分类筛选等查询方式,实时获取商品基础及拓展信息。接口数据丰富、查询灵活、更新及时且安全可靠,适用于电商数据分析、比价应用开发等场景。Python调用示例展示了如何安装必要库、构造请求参数及签名、发送请求并处理响应,确保开发者能高效利用该接口。
320 11
|
9月前
|
敏捷开发 人工智能 自然语言处理
“教育+AI”,阿里云可以做什么?
“教育+AI”,阿里云可以做什么?
|
机器学习/深度学习 安全 测试技术
【Docker项目实战】在Docker环境下使用RustScan端口扫描工具
【6月更文挑战第9天】在Docker环境下使用RustScan端口扫描工具
509 5
|
网络协议 数据库 开发工具
|
存储 搜索推荐 算法
基于向量模型的推荐系统案例(java版本)
基于向量模型的推荐系统案例(java版本)
484 0
|
消息中间件 Java Kafka
Spring Cloud Bus 原理简介和实现(一)
Spring Cloud Bus 原理简介和实现
505 0
Spring Cloud Bus 原理简介和实现(一)