一起刷C语言菜鸟教程100题(4-14含解析)

今天也要加油,不能因为一时的疲惫忘掉脚下的路,当心中有了方向,就会忘掉一切,努力的做好,今天我们来继续刷题


C 语言经典100例 | 菜鸟教程 (runoob.com)

使用方法:

1.先看题目自己想思路,自己做

2.自己做不出来看解题思路,再次尝试

3.实在不会,看解题思路和代码一起理解


题目4输入某年某月某日,判断这一天是这一年的第几天? 

解题思路:判断某一天,我们应该考虑是否为闰年,如果是闰年,三月份以后的天数会比非闰年多一天,因此我们就可以写代码啦,菜鸟教程给的代码是 switch 大家可以尝试写一下

#include <stdio.h>
int main()
{
	int year = 0, month = 0, day = 0, sum = 0;
	scanf("%d %d %d",&year,&month,&day);
	//非闰年的天数
	if (month == 1) sum = day;
		else if (month == 2) sum = day + 31;
		else if (month == 3) sum = day + 59;
		else if (month == 4) sum = day + 90;
		else if (month == 5) sum = day + 120;
		else if (month == 6) sum = day + 151;
		else if (month == 7) sum = day + 181;
		else if (month == 8) sum = day + 212;
		else if (month == 9) sum = day + 243;
		else if (month == 10) sum = day + 273;
		else if (month == 11) sum = day + 304;
		else if (month == 12) sum = day + 334; 
	//判断闰年
	if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
	{
		if (month >= 3)
		{
			printf("%d",sum+1);
		}
		else
		{
			printf("%d",sum);
		}
	} 
	else
	{
		printf("%d",sum);
	}
	return 0;
}

题目5:输入三个整数x,y,z,请把这三个数由小到大输出。 

解题思路:这道题菜鸟教程的思路很巧妙,所以建议大家记住这个思路就好,就是对三个整数两两比较,让小的数字永远在 x 中,前两个 if 就做到了,在第三个判断是把小的数字放到 y 中,这样就可以解决这道题了

#include <stdio.h> 
int main()
{
    int x,y,z,t;
    scanf("%d %d %d",&x,&y,&z);
    if (x>y) 
	{ 
        t=x;x=y;y=t;
    }
    if(x>z) 
	{ 
        t=z;z=x;x=t;
    }
    if(y>z) 
	{ 
        t=y;y=z;z=t;
    }
    printf("%d %d %d\n",x,y,z);
	return 0;
}

题目6:用*号输出字母C的图案。 

解题思路:面向结果,用 printf 输出就好,记得换行符号

#include <stdio.h>
int main()
{
    printf("用 * 号输出字母 C!\n");
    printf(" ****\n");
    printf(" *\n");
    printf(" * \n");
    printf(" ****\n");
}

题目7 : 根据char类型去看ASCII码,这道题也是输出的题,因为简单,所以这里让大家手熟悉一下ASCII码,记住大小写字母的ASCII值,后续练习可能会用到,下面给大家在百度找到一个ASCII码表的图片,可以参考一下

 

题目8:输出9*9乘法表。 

解题思路:典型的循环嵌套,第一个 for 循环判断行,第二个 for 循环判断列,注意换行就行

PS:有个细节就是关于左对齐和右对齐“%-3d”的负号表示左对齐,“%3d”表示右对齐,数字代表对齐几格

#include <stdio.h>
int main() {
    for (int i = 1; i < 10; i++) {
        for (int j = 1; j <= i; j++) {
            printf("%d*%d=%-3d", i, j, i*j); 
        }
        printf("\n"); 
    }
    return 0;
}

题目9:要求输出国际象棋棋盘 ,1代表白格子,0代表黑格子

解题思路:棋盘的样子如下图(在网上找的图片),我们可以发现,奇数行奇数列为白格子,偶数行偶数列为黑格子,根据这个我们就可以写代码啦

 

#include<stdio.h>
int main()
{
    for (int i = 1; i <= 8; i++)
    {
    	for (int j = 1; j <= 8; j++)
    	{
    		if ((i % 2 == 0 && j % 2 == 0) || (i % 2 == 1 && j % 2 == 1))
    		{
    			printf("%d ",1);
			}
			else 
			{
				printf("%d ",0);
			}
		}
		printf("\n");
	}
    return 0;
}

题目10:用数字一打印10层上三角形(如图)。

解题思路: 也是典型的循环嵌套,第一个 for 循环判断行,第二个 for 循环判断列,可以和九九乘法表配套练习(你也可以尝试倒三角,沙漏等)

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

题目11:古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)

解题思路:当我们罗列出前几个数字,我们发现这就是一个斐波那契数列问题,一般这种问题我们会用递归函数代码会简洁一些(但是也分题,有的题循环就方便)

斐波那契数列就是前两个数字的和等于后一个数字,前两个数字为1,下面代码函数就是斐波那契数列的递归函数写法

#include<stdio.h>
 
long int fib(int n)
{
	if (n == 1) return 1;
	if (n == 2) return 2;
	return fib(n - 1) + fib(n - 2);
	
}

int main()
{
	for (int i = 1; i <= 39;i++)
	{
		long int sum = fib(i);
		printf("%ld\n",sum);	
	}

    return 0;
}

题目12:判断 m 到 n 之间的素数,m,n 均为整数

解题思路:这是一个统计素数的题目,素数是除了它本身和1都不能被整除的数字叫素数

#include <stdio.h>
int main()
{
    int m = 0, n = 0, i = 0;
    scanf("%d %d",&m,&n);
    for (i = m;i<=n;i++)
    {
        int j = 2;
        for (j = 2;j < i;j++)
        {
            if (i%j == 0)
                break;
        }
        if (j>=i)
        {
            printf("%d\n",i);
        }
    }
    if (m == 1)
    {
        printf("%d\n",i);
    }   
    return 0;
}

题目13:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 

解题思路:先遍历100~999,然后拆分各个位,在三次方,就做出来了,这里就直接给菜鸟教程的答案了,后续大家可以试试n位数字的水仙花数

#include<stdio.h>
int main()
{
    int i,x,y,z;
    for(i=100;i<1000;i++)
    {
        x=i%10;
        y=i/10%10;
        z=i/100%10;
        
        if(i==(x*x*x+y*y*y+z*z*z))
        printf("%d\n",i);
        
    }
    return 0;
}

题目14:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5 

解题思路:一个数除以比它小的数字,一直除下去,最后一次也是它的因数,这里也可以达到将一个正整数分解质因数,只不过因数的顺序是不是从小到大的,但是代码会简洁

#include <stdio.h>
  
int main()
{
    int n = 0;
    scanf("%d",&n);
    printf("%d=",n);
    for (int i = 2; i < n; i++)
    {
    	if (n % i == 0)
    	{
    		printf("%d*",i);
    		n = n/i;
		}
		//printf("*");
	}
	printf("%d",n);
    return 0;
}

今天刷了十道题,都比较基础,希望大家好好理解,多多练习,希望和大家一起努力,一起加油呀! 

  • 44
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值