【牛客刷题】/*关于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;

   }

相关文章
|
JSON 数据格式
使用axios发送get和post请求
使用axios发送get和post请求
325 0
|
定位技术 API
基于Leaflet.draw的自定义绘制实战
本文介绍了如何基于leaflet.draw进行自定义绘制,同时获取对象的bbox和geojson信息。
1135 0
基于Leaflet.draw的自定义绘制实战
|
XML JSON API
淘宝天猫API接入说明(淘宝天猫商品详情+关键词搜索商品列表)商品详情数据,商品sku数据,商品优惠券数据
业务场景:作为全球最大的 B2C 电子商务平台之一,淘宝天猫平台提供了丰富的商品资源,吸引了大量的全球买家和卖家。为了方便开发者接入淘宝天猫平台,淘宝天猫平台提供了丰富的 API 接口,其中历史价格接口是非常重要的一部分。大家有探讨稳定采集淘宝(天猫)京东阿里拼多多等平台整站实时商品详情历史价格数据接口,通过该接口开发者可以更好地了解商品的情况,商品详情数据详细信息查询,数据参数包括:商品链接,商品列表主图、价格、标题,sku,库存,销量,店铺昵称,店铺等级,商品详情SKU属性,商品视频,商品优惠券,促销信息,详情属性描述,宝贝ID,区域ID,发货地,发货至,快递费用,物流费用等页面上有的数据
|
存储 数据采集 JSON
数据存储的正确规范:csv/xlsx和JSON全方位解析
数据存储的正确规范:csv/xlsx和JSON全方位解析
274 1
|
算法 安全 Java
重学操作系统----17 | 进程和线程:进程的开销比线程大在了哪里?
进程(Process),顾名思义就是正在执行的应用程序,是软件的执行副本。而线程是轻量级的进程。
407 0
|
机器学习/深度学习 安全 测试技术
【Docker项目实战】在Docker环境下使用RustScan端口扫描工具
【6月更文挑战第9天】在Docker环境下使用RustScan端口扫描工具
440 5
|
消息中间件 安全 搜索推荐
概述软件架构的定义与分类
【5月更文挑战第8天】软件架构是指导大型软件系统设计的抽象模式集合,旨在简化复杂工程,通过模块化实现系统各方面的分工。
|
存储 数据可视化 关系型数据库
矢量数据库在地理空间数据处理中的应用
【4月更文挑战第30天】矢量数据库在地理空间数据处理中展现优势,高效存储管理高维向量数据,支持快速查询、空间分析与可视化。分布式处理能力适应大数据量需求,提供高效、灵活、可扩展及可视化支持,是处理地理空间数据的理想选择。随着技术进步,其应用将更加广泛。
|
SQL 关系型数据库 MySQL
|
存储 关系型数据库 MySQL
数据库之魅:MySQL表设计的艺术与技巧
【4月更文挑战第20天】
316 0