IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【牛客刷题】/*关于C学习过程中的经典习题剖析*/ -> 正文阅读

[C++知识库]【牛客刷题】/*关于C学习过程中的经典习题剖析*/

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

?

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

?

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

?正文开始:

目录

一、经典垃圾代码

二 、虾仁猪心

?三、X形图案

四、获得月份天数

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

六、计算求和

七、打印菱形


一、经典垃圾代码

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

#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;
}

七、打印菱形

🍎问题描述:打印如下图形,这里只是给大家参考一下这个菱形图片并不是要打印这样的菱形,具体输出结果往下翻翻:

715f4556a28e4c5198d9c9a79724af67.jpeg

#include<stdio.h>
int main()
{
    char str[] = "             ";  //定义为空

    int i = 0, j = 0;
    for (i = (strlen(str) / 2), j = (strlen(str) / 2); i >= 0 && j <= strlen(str); i--, j++)
    {
        str[i] = '*';
        str[j] = '*';
        printf("%s\n", str);
    }
    for (i = 0, j = (strlen(str) - 1); i < (strlen(str) / 2) && j >= (strlen(str) / 2); i++, j--)
    {
        str[i] = ' ';
        str[j] = ' ';
        printf("%s\n", str);
    }
}

🌮🌮代码解读:这个方法非常容易理解,我们要打印的是上下对称的菱形,我们可以选择从中间开始打印,第一个for循环我们打印*,第二个for循环我们打印空格:

??输出结果:

02e37db32fe34db7af07d49ae70cc287.png

?🍱🍱好啦,今天的习题分享就到这里啦,又看不懂的部分可以及时联系博主或者在下评论,我看到都会第一时间解答哒!谢谢阅读!期待一键三连!!!🤲🤲

7d655fce8b7d42caacac42a1be8f9bba.jpeg

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-05 23:22:06  更:2022-07-05 23:23:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 9:58:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码