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

   }

相关文章
|
7月前
|
算法 调度
【算法设计与分析】— —基础概念题(one)可作为日常联系或期末复习
【算法设计与分析】— —基础概念题(one)可作为日常联系或期末复习
|
人工智能 算法 BI
【AcWing算法基础课】第四章 数学知识(未完待续)(2)
从2到n枚举每个数,删掉其所有的倍数,枚举完之后,没有被删掉的数为质数。
116 0
|
存储 人工智能 算法
【AcWing算法基础课】第四章 数学知识(未完待续)(3)
根据下面公式来预处理出等式右边的组合数的值,那么等式左边就可以用等式右边已经算过的值来进行计算(有点像dp)。
83 0
|
6月前
|
IDE 编译器 开发工具
详细解读C语言程序设计:现代方法(第2版)第二章全部习题答案
详细解读C语言程序设计:现代方法(第2版)第二章全部习题答案
47 0
|
算法 关系型数据库 Java
数据库原理第四章课后题答案(第四版)
数据库原理第四章课后题答案(第四版)
341 0
|
算法
【AcWing算法基础课】第五章 动态规划(未完待续)(1)
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且 总价值最大 。
67 0
【AcWing算法基础课】第五章 动态规划(未完待续)(1)
|
人工智能 算法
【AcWing算法基础课】第四章 数学知识(未完待续)(1)
利用秦九韶算法来实现其他进制转十进制的结果求解
84 0
|
人工智能 算法 JavaScript
【AcWing算法基础课】第五章 动态规划(未完待续)(2)
给定一个如下图所示的数字三角形,从 顶部 出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点, 一直走到底层 ,要求找出一条路径,使 路径上的数字的和最大。
69 0
[课后习题]C Primer Plus【第六版】编程练习 第二章习题参考答案
[课后习题]C Primer Plus【第六版】编程练习 第二章习题参考答案
|
域名解析 缓存 网络协议
计网实验复习超详细总结
计网实验复习超详细总结