C语言百日刷题第一天

C语言刷题第一天

    • 1.判断一个整数n是否是闰年
    • 2.输入4个数,输出其中最大的数
    • 3. 二的n次方计算
    • 4.判断这个整数能被 2 3 7 中哪几个数整除,并按升序输出
    • 5.判断三角形类型
    • 6. 输出99乘法表
    • 7.反向输出一个四位数
    • 8.计算最高分与最低分的分差
    • 9.求 1~2019中共有多少个数包含数字9
    • 10.为她偷偷的写一棵圣诞树吧~ ~

1.判断一个整数n是否是闰年

C语言百日刷题第一天_第1张图片
题目分析:解答此题之前,要搞明白什么是闰年。
闰年:能被4整除且不能被100整数,或者能被400整数
那么我们自然而然的就想起了if分支语句

#include
int main()
{
	int year;
	scanf("%d", &year);
	if (year % 400 == 0) //能被400整除一定是闰年!
		printf("闰年!");
	else if (year % 4 == 0 && year % 100 != 0)//能被4整除且不能被100整除才是闰年!
		printf("闰年!");
	else
		printf("非闰年!");
	return 0;
}

2.输入4个数,输出其中最大的数

C语言百日刷题第一天_第2张图片
题目分析:判断四个数中的最大整数,
解法一:我们可以假设其中的一个数为最大数,然后不断用分支语句来验证这个数是不是最大数,如果不是最大数,就将比他的的数假设为最大数,直到比对完全结束。

#include
int main()
{
	int a, b, c, d;
	int max;
	scanf("%d %d %d %d", &a, &b, &c, &d);
	max = a;
	if (b > max)
		max = b;
	if (c > max)
		max = c;
	if (d > max)
		max = d;
	printf("%d", max);
	return 0;
}

解法二:使用三目运算符

#include
int main()
{
	int a, b, c, d, max1,max2;
	scanf("%d %d %d %d",&a,&b,&c,&d);
	max1 = (a> b) ? a : b;
	max2 = (c > d) ? c : d;
 if (max1 > max2)
	printf("%d", max1);
 else
	 printf("%d", max2);
	return 0;
}

解法三:上述代码if语句出现的次数有点多,四个还好,但是要是100个数就显得特别麻烦,这时我们自然想到可以用循环语句来减少这种重复性的操作。

#include
#define NUMBER 4 //定义NUMBER 为 4
int main()
{
	int a;
	int i = 0;
	int max = 0;
	for (i = 0; i < NUMBER; i++)
	{
		scanf("%d", &a);
		if (a > max)
			max = a;
	}
	printf("%d", max);
	return 0;
}

3. 二的n次方计算

C语言百日刷题第一天_第3张图片
题目分析:计算2的n次方,我们第一反应就是一直累乘,但是题目要求我们不能累乘。
解法一:利用pow函数。
C语言百日刷题第一天_第4张图片

#include 
#include
int main() 
{
    int a = 0;
    scanf("%d", &a);
    printf("%.lf\n", pow(2, a));
    return 0;
}

解法二:利用题目的提示:左移(<<)运算符
左移(<<)运算符的作用:
将数值转化为二进制数后再左移一位。
移位规则:左边抛弃、右边补0
所以,在数字没有溢出的情况下,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

#include 
int main()
{
    int a = 0;
    scanf("%d", &a);
    printf("%d\n", 1 << a);
    return 0;
}

4.判断这个整数能被 2 3 7 中哪几个数整除,并按升序输出

C语言百日刷题第一天_第5张图片
解法一:利用分支语句,直接将所有的情况全部罗列出来

#include
int main()
{
    int n;
    scanf("%d", &n);
    if (n % 2 == 0 && n % 3 == 0 && n % 7 == 0) 
        printf("2 3 7\n");
    else if (n % 2 == 0 && n % 3 == 0 && n % 7 != 0) 
        printf("2 3\n");
    else if (n % 2 == 0 && n % 3 != 0 && n % 7 == 0) 
        printf("2 7\n");
    else if (n % 2 != 0 && n % 3 == 0 && n % 7 == 0) 
        printf("3 7\n");
    else if (n % 2 == 0 && n % 3 != 0 && n % 7 != 0) 
        printf("2\n");
    else if (n % 2 != 0 && n % 3 == 0 && n % 7 != 0) 
        printf("3\n");
    else if (n % 2 != 0 && n % 3 != 0 && n % 7 == 0) 
        printf("7\n");
    else 
        printf("n\n");
    return 0;
}

解法二:利用循环,减少操作。

#include
int main()
{
    int arr[3] = { 2,3,7 };
    int ch, f = 0;
    scanf("%d", &ch);
    for (int i = 0; i < 3; i++)
    {
        if (ch % arr[i] == 0)
        {
            f = 1;
            printf("%d ", arr[i]);
        }
    }
    if (f == 0)
        printf("n");
    return 0;
}

5.判断三角形类型

C语言百日刷题第一天_第6张图片
题目分析:和判断闰年那题差不多,这题我们要先判断是否能构成三角形,再来判断是那种三角形

#include 
int main()
{
    int a,b,c;
    while(scanf("%d %d %d",&a,&b,&c)!=EOF)
    {
        if((a+b)>c && (a+c)>b && (b+c)>a)//判断能构成三角形
        {
            if((a==b) && (a==c) && (b==c))
            {
                printf("Equilateral triangle!\n");
            }
            else if(((a==b) && (a!=c)) || ((a==c) && (a!=b)) || ((b==c) && (b!=a)))
            {
                printf("Isosceles triangle!\n");
            }
            else
            {
                printf("Ordinary triangle!\n");
            }
        }
        else
        {
            printf("Not a triangle!\n");
        }
    }
    return 0;
}

6. 输出99乘法表

C语言百日刷题第一天_第7张图片
题目分析:99乘法表的格式是x*x=y的格式,所以我们要嵌套两个循环

#include
int main()
{
    for(int i=0;i<9;i++)
    {
        for(int j=1;j<=i;j++)
        {
            printf("%d*%d=%2d ",j,i,i*j);
        }
        printf("\n"); 
    }
    return 0;
}

7.反向输出一个四位数

C语言百日刷题第一天_第8张图片
题目分析:取余可以得到最后一位数字,再将数字除10再取余可以得到倒数第二位的数字,以此类推

#include 
int main()
{
    int n;
    scanf("%d",&n);
    while(n!=0)
    {
        printf("%d",n%10);
        n=n/10;
    }
    return 0;
}

8.计算最高分与最低分的分差

C语言百日刷题第一天_第9张图片
题目分析:和第二题的解法三类似

#include 
int main()
{
    int a,b,c,d,i;
    scanf("%d",&a);
    for(i=0;i<a;i++)
    {
        scanf("%d ",&d);
        if(d>b)
            b=d;
        if(d<c)
            c=d;
    }
    printf("%d",b-c);
}

9.求 1~2019中共有多少个数包含数字9

题目分析:对个、十、百位数字取余,若取余结果为9,就是包含数字9的数

#include
int main() 
{
    int n = 0, i = 0;
    for (i = 0;i < 2019;i++) 
    {
        if (i % 10 == 9 || (i / 10) % 10 == 9 || (i / 100) % 10 == 9)
        {
            n++;
        }
    }
    printf("%d", n);
}

10.为她偷偷的写一棵圣诞树吧~ ~

C语言百日刷题第一天_第10张图片

思路:
将圣诞树的树叶部分分成三层,第一层打印一个星第二层打印两个星第三层打印三个星
再设置打印的间距,及应该打印的目标行数。

#include 
int main() 
{
    int n;
    printf("请输入圣诞树的层数:");
    scanf("%d", &n);
    for (int i = 1; i <= 3 * n; i++) 
    { //圣诞树头
        if (i % 3 == 1)
        { //第一层一个*的
            for (int j = i; j < 3 * n; j++)
                printf(" ");
            for (int k = i; k > 0; k -= 3)
            {
                printf("*     ");
                system("color 1");
            }
            printf("\n");
        }
        else if (i % 3 == 2) {//第二层两个*的
            for (int j = i; j < 3 * n; j++)
                printf(" ");
            for (int k = i; k > 0; k -= 3)
            {
                printf("* *   ");
                system("color 2");
            }
            printf("\n");
        }
        else if (i % 3 == 0) {//第三层三个*的
            for (int j = i; j < 3 * n; j++)
                printf(" ");
            for (int k = i; k > 0; k -= 3)
            {
                printf("* * * ");
                system("color 3");
            }
            printf("\n");
        }
        }
        for (int i = 1; i <= n; i++) {//树干,n个1*的
            for (int i = 1; i < 3 * n; i++)
                printf(" ");
            printf("*\n");
            system("color 0c");
        }
    return 0;
    //圣诞树好难啊,看了半天才看明白
    //可是和你聊天更难啊,看了几个星期还没看懂~
    //printf("  你已经很好了,可是我是个懦弱的胆小鬼!\n");
    //printf("  希望你每天都能开心!");
}

你可能感兴趣的:(#,C语言百日刷题,c语言,算法)