0
点赞
收藏
分享

微信扫一扫

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

探头的新芽 2022-07-12 阅读 70

 

 

 正文开始:

目录

一、经典垃圾代码

二 、虾仁猪心

 三、X形图案

四、获得月份天数

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

六、计算求和

七、打印菱形


一、经典垃圾代码

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

#include <stdio.h>
int main()
{
    int i = 1;
    int ret = (++i)+(++i)+(++i);
    printf("ret = %d\n", ret);
	return 0;
}

二 、虾仁猪心

#include <stdio.h>
int i;
int main()
{
    i--;
    if (i > sizeof(i))
    {
        printf(">\n");
    }
    else
    {
        printf("<\n");
    }
    return 0; 
}

 三、X形图案

🍎问题描述:

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

🍿输出样式:

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

四、获得月份天数

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

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

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

六、计算求和

🍔🍔代码实现:

#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

举报

相关推荐

0 条评论