C语言经典100例-第一篇


题目来自菜鸟教程,所写内容,如有问题,还请见谅。

C练习实例1

  • 题目:有1,2,3,4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

  • 代码展示:

#include<stdio.h>
 
int main()
{
    int i,j,k;
    printf("\n");
    for(i=1;i<5;i++)
     { 
        for(j=1;j<5;j++)
         {
            for (k=1;k<5;k++)      //三重循环是为了找出所有的三位数
            {                       // 确保i、j、k三位互不相同
               	 if (i!=k&&i!=j&&j!=k) 
               	 { 
                   printf("%d,%d,%d\n",i,j,k);
              	 }
           	}
        }
    }
}
  • 运行结果:
1,2,3
1,2,4
1,3,2
1,3,4
1,4,2
1,4,3
2,1,3
2,1,4
2,3,1
2,3,4
2,4,1
2,4,3
3,1,2
3,1,4
3,2,1
3,2,4
3,4,1
3,4,2
4,1,2
4,1,3
4,2,1
4,2,3
4,3,1
4,3,2

C练习实例2

  • 题目:企业发放的奖金根据利润提成。

利润(I)低于或等于10万元时,奖金可提10%;
利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
20万到40万之间时,高于20万元的部分,可提成5%;
40万到60万之间时高于40万元的部分,可提成3%;
60万到100万之间时,高于60万元的部分,可提成1.5%;
高于100万元时,超过100万元的部分按1%提成。
从键盘输入当月利润I,求应发放奖金总数?

  • 代码展示:
#include<stdio.h>
int main()
{
    double i;
    double bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
    printf("你的净利润是:\n");
    scanf("%lf",&i);
    bonus1=100000*0.1;
    bonus2=bonus1+100000*0.075;
    bonus4=bonus2+200000*0.05;
    bonus6=bonus4+200000*0.03;
    bonus10=bonus6+400000*0.015;
    if(i<=100000) {
        bonus=i*0.1;
    } else if(i<=200000) {
        bonus=bonus1+(i-100000)*0.075;
    } else if(i<=400000) {
        bonus=bonus2+(i-200000)*0.05;
    } else if(i<=600000) {
        bonus=bonus4+(i-400000)*0.03;
    } else if(i<=1000000) {
        bonus=bonus6+(i-600000)*0.015;
    } else if(i>1000000) {
        bonus=bonus10+(i-1000000)*0.01;
    }
    printf("提成为:bonus=%lf",bonus);
 
    printf("\n");
}
  • 运行结果:
    在这里插入图片描述

C练习实例3

  • 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
    假设该数为 x。
  • 程序分析:

1、则:x + 100 = n2, x + 100 + 168 = m2

2、计算等式:m2 - n2 = (m + n)(m - n) = 168

3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数

4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。

5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。

6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1。

7、接下来将 i 的所有数字循环计算即可。
注:上面的6,7步,我不理解,所以代码和菜鸟教程上相同

  • 代码展示:
#include <stdio.h>
 
int main (void)
{
    int  i, j, m, n, x;
    for (i = 1; i < 168 / 2 + 1; i++)
    {
        if (168 % i == 0)
        {
            j = 168 / i;
            if ( i > j && (i + j) % 2 == 0 && (i - j) % 2 == 0)
            {
                m = (i + j) / 2;
                n = (i - j) / 2;
                x = n * n - 100;
                printf ("%d + 100 = %d * %d\n", x, n, n);
                printf ("%d + 268 = %d * %d\n", x, m, m);
            }
        }
    }
    return 0;
}
  • 运行结果:
-99 + 100 = 1 * 1
-99 + 268 = 13 * 13
21 + 100 = 11 * 11
21 + 268 = 17 * 17
261 + 100 = 19 * 19
261 + 268 = 23 * 23
1581 + 100 = 41 * 41
1581 + 268 = 43 * 43

C练习实例4

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

  • 代码展示:

// 闰年二月是29天,不是闰年 二月是28天
//1,3,5,7,8,10,12   31
//4,6,9,11       30
#include <stdio.h>
int main()
{
	int year, month, day,sum=0,temp=0;
	printf("请输入-年-月-日:>");
	scanf("%d,%d,%d", &year, &month, &day);
	switch (month)
	{
	case 1:
		sum += day; break;
	case 2:
		sum = 31 + day; break;
	case 3:
		sum = 59 + day; break;
	case 4:
		sum = 90 + day; break;
	case 5:
		sum = 120 + day; break;
	case 6:
		sum = 151 + day; break;
	case 7:
		sum = 181 + day; break;
	case 8:
		sum = 212 + day; break;
	case 9:
		sum = 243 + day; break;
	case 10:
		sum = 273 + day; break;
	case 11:
		sum = 304 + day; break;
	case 12:
		sum = 334 + day; break;
	}
	if (((0 == year % 4) && (0 != year % 100)) || (0 == year % 400))
	{
		temp = 1;
		return temp;
	}
	else
		printf("\n%d不是闰年!\n",year);
	if (temp == 1)
	{
		sum += 1;
	}
	printf("\n%d年%d月%d日是这一年的第%d天!\n", year, month, day, sum);
	return 0;
}
  • 运行结果:
    在这里插入图片描述

C练习实例5

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

  • 代码展示:

#include <stdio.h>

int main()
{
	int t,i, j, k;
	printf("Enter there numbers:>");
	scanf("%d,%d,%d", &i, &j, &k);

	if (i > j)
	{
		t = i;
		i = j;
		j = t;
	}
	if (j > k)
	{
		t = j;
		j = k;
		k = t;
	}
	if (i > k)
	{
		t = i;
		i = k;
		k = t;
	}

	printf("%d,%d,%d",i,j,k);

}
  • 运行结果:
输入:
163
输出:
136

C练习实例6

  • 题目:用*号输出字母C的图案
  • 代码展示:
#include <stdio.h>
int main()
{
	printf("******\n");
	printf("*\n");
	printf("*\n");
	printf("******\n");
	return 0;
}

  • 运行结果:
输出:
******
*
*
******

C练习实例7

  • 题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!

  • 代码展示:

#include<stdio.h>
int main()
{
    char a=176,b=219;
    printf("%c%c%c%c%c\n",b,a,a,a,b);
    printf("%c%c%c%c%c\n",a,b,a,b,a);
    printf("%c%c%c%c%c\n",a,a,b,a,a);
    printf("%c%c%c%c%c\n",a,b,a,b,a);
    printf("%c%c%c%c%c\n",b,a,a,a,b);
    return 0;
}
  • 运行结果:
郑鞍?
佰佰?
鞍郑?
佰佰?
郑鞍?  

VC6.0下出现中文乱码(原因+解决方法):
176的16进制是B0,219的16进制是DB,0xB0DB是"佰"字的内码,所以输出的就是"佰"了。
主要原因是文件信息的代码页不同,我们所使用的操作系统中文状态下的代码页,要显示扩展的ASCII码需要在437 OEM-美国这个下面显示,这样就可以显示出你所希望的。具体修改控制台的默认代码页步骤如下:
1.点击运行界面左上角标题栏图标【c:\】,选择默认值一项
2.修改默认代码页,936(ANSI/OEM-简体中文GBK)为437 OEM-美国
3、关闭后重新运行一下即可
但是我用的是VS,所以没法改。

C练习实例8

  • 题目:输出99乘法口诀

  • 代码展示:

#include <stdio.h>
int main()
{
	int i, j,result;
	for (i = 1; i <= 9; i++)    //控制行数
	{
		for (j = 1; j <= i; j++)  //控制列数
		{
			result = i * j;
			printf("%d*%d=%-3d", i, j, result); //-3d的意思是左对齐,右边空三位。
		}
		printf("\n"); //每一行之后换行
	}

	return 0;
}
  • 运行结果:
    在这里插入图片描述

C练习实例9

  • 题目:要求输出国际象棋棋盘
  • 代码展示:
#include<stdio.h>
int main()
{
	int i, j;
	for (i = 0; i < 8; i++)  //i控制行,一共有8行
	{
		for (j = 0; j < 8; j++)  //j控制每行的格子数,也是一共有8个格子
		{
			if ((i + j) % 2 == 0)   
				printf("%c%c", 219, 219); //偶数格子位显示灰色格子
			else 
				printf("  ");  //奇数格子位显示黑色格子
		}
		printf("\n"); //输出八个格子后,换行
	}
	return 0;
}
  • 运行结果:

    上面是VS的运行结果
    实际结果结果如下:
    在这里插入图片描述

C练习实例10

  • 题目:打印楼梯,同时在楼梯上方打印两个笑脸。

  • 代码展示:

#include<stdio.h>
int main()
{
    int i,j;
    printf("\1\1\n"); /*输出两个笑脸*/
    for(i=1;i<11;i++)
    {
        for(j=1;j<=i;j++)
            printf("%c%c",219,219);
        printf("\n");
    }
    return 0;
}//这道题和99乘法口诀很像
  • 运行结果:
    在这里插入图片描述

  • 实际应该是:
    在这里插入图片描述

  • 程序分析:用 ASCII 1 来输出笑脸;用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。
    如果出现乱码情况请参考【C 练习实例7】的解决方法。
    下面一个是一张ASCLL码表照片:可知笑脸是ASCLL码非打印控制字符
    笑脸是非打印控制字符

C练习实例11

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

  • 代码展示:


  • 运行结果:

C练习实例12

  • 题目:判断 101 到 200 之间的素数。

  • 代码展示:

#include <stdio.h>
#include <math.h>

bool isPrimel_1(int n)
{
	int count = 0,i;  //不用再定义n,不然会出现形参重定义
	for (n = 101; n < 200; n++)
	{
		for (i = 2; i < n; i++)  //两重循环是根据素数的定义写出来的
		{
			if (n % i == 0)
			{
				break;
			}
		}
		if (i >= n)// 判断循环是否提前跳出,如果 j < i 说明在 2~j 之间, i 有可整除的数
		{
			count++;
			printf("%d ", n);
			if (count % 5 == 0)  //用count 计数 ,这两行是来换行的 , 每五个数换一行
				printf("\n");
		}
	}
	return 0; //记得返回一个值,不然会报错
}
int main()
{
	int n=101;
	isPrimel_1(n);
	return 0;
}
  • 运行结果:
    在这里插入图片描述

C练习实例13

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

  • 代码展示:

#include <stdio.h>
#include <math.h>
int main()
{
	int i, a, b, c,d;
	printf("请输入一个三位数:>\n");
	scanf("%d",&i);
	a = i % 10;
	b = i / 10 % 10;
	c = i / 100;
	a = pow(a, 3);
	b = pow(b, 3);
	c = pow(c, 3);
	if (i == (a + b + c))
		printf("%d是水仙花数!", i);
	else
		printf("%d不是水仙花数!", i);
	return 0;
}

  • 运行结果:
    在这里插入图片描述
    在这里插入图片描述

C练习实例14

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

  • 代码展示:

#include<stdio.h>

int main()
{
    int n, i;
    printf("\n请输入整数:\n");
    scanf("%d", &n);
    printf("%d = ", n);
    for (i = 2; i <= n; i++)
    {
        while (n % i == 0) 
        {
            printf("%d", i);
            n /= i;
            if (n != 1)
                printf("*");
        }
    }
    printf("\n");
    return 0;
} //虽然已经调试过了,可还不是太明白


  • 运行结果:
    在这里插入图片描述

C练习实例15

  • 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

  • tip: (a>b)?a:b 这是条件运算符

  • 代码展示:

#include <stdio.h>
int main()
{
	int score;
	char grate;
	printf("Enter score:>\n");
	scanf("%d", &score);
	grate = (score >= 90) ?'A': ((score >= 60) ?'B' :'C');
	printf("%c", grate);
	return 0;
}

  • 运行结果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

C练习实例16

  • 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

  • tips:求最大公约数和最小公倍数不仅仅有一种方法,最大公约数的求解方法有短除法,辗转相除法,更相减损法

  • 最大公约数计算器(检测运行结果)

  • 最小公倍数计算器(检测运行结果)

  • 辗转相除法 个人理解就是,不断将较大数除以较小数所得余数,直到余数为零为止,此时较小数即为原始两数的最大公约数。

  • 代码展示:


#include <stdio.h>
int main()
{
	int a, b,temp;
	printf("\nEnter two numbers:>\n");
	scanf("%d,%d", &a, &b);
	if (a > b)
	{
		temp = a;
		a = b;
		b = temp;  //确保a是较小的
	}
	int c = a % b;
	int d = a * b;  //a*b/最小公倍数 ==  最小公约数 
	while (c != 0)
	{
		a = b;    
		b = c;
		c = a % b;
	}  
	printf("这两个数的最大公约数为%d,最小公倍数为%d",b,d/b);
	return 0;
}

#include <stdio.h>
int main()
{
	int a, b,c;
	printf("请输入两个整数:>");
	scanf("%d,%d",&a,&b);
	c = a * b;
	while (a != b)
	{
		if (a > b)
		{
			a = a - b;
		}
		if (b > a)
		{
			b = b - a;
		}
		
	}
	printf("两数的最大公约数为%d\n", a);
	printf("两数的最小公倍数为%d\n",c/a);
	return 0;
}
  • 运行结果:
    在这里插入图片描述
  • 短除法 即:先把每个数的因数找出来,然后再找出公因数,最后在公因数中找出最大公因数。后来,使用分解质因数法来分别分解两个数的因数,再进行运算。之后又演变为短除法。短除法运算方法是先用一个被除数除以能被它除尽的一个质数,以此类推,除到两个数的商是互质数为止。
  • 代码展示:
#include <stdio.h>

int main()
{
	int a, b,min;
	int n = 0, m;
	printf("\n请输入两个数:>\n");
	scanf_s("%d,%d", &a, &b);

	m = a * b;

	min = (a < b) ? a : b;//三目运算符,把最小值赋予a;;
	for (int i = 1; i <= a; i++)
	{
		if (a % i == 0 && b % i == 0)
			n = i;
	}
	printf("两个数的最大公倍数为%d,最小公约数为%d\n",n,m/n);
}
  • 运行结果:
    在这里插入图片描述
    tips:在运行短除法的代码时,出现了一个问题如下:
    意思是说分母不应该为零
    也就是错在红色横线上:
    把0改为1就行了

C练习实例17

  • 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

  • ASCLL码表格

  • tips:int getchar() 是读取一个字符但返回的是int 类型的数值。

  • 代码展示:

int main()
{
	int letters=0, digits=0, spaces=0, others=0;
	char c;

	/*printf("请输入一些字母:>");  
	scanf("%c", &c);*/              //为什么错的呢?

	printf("请输入一些字母:>");
	while ((c=getchar())!= '\n')
	{
		if (c <= 'Z' && c >= 'A' || c >= 'a' && c <= 'z')
		{
			letters++;
		}
		else if (c <= '9' && c >= '0')
		{
			digits++;
		}
		else if (c == ' ')
		{
			spaces++;
		}
		else
		{
			others++;
		}
	}
	printf("letters=%d, digits=%d, spaces=%d, others=%d\n", letters, digits, spaces, others);
	return 0;
}

对以上问题进行解释,***在C语言中,string 是定义一个字符串,存储的是一段如“abcd”的数据,而且最后还有一个结束符’\0’;char 是定义一个字符,存储一个字符,占一个字节。***所以我

  • 运行结果:
    在这里插入图片描述

C练习实例18

  • 题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

  • 代码展示:


  • 运行结果:

C练习实例19

  • 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

  • 题目分析:本题分为两步,先找出一个数的所有因子,就和,再判断因子之和是否为这个数。

  • 代码展示:
    //代码错误

#include <stdio.h>
int main()
{
	int sum = 0;
	for (int j = 2; j <= 1000; j++)
	{
		for (int i = 1; i < j; i++)
		{
			if (j % i == 0)
			{
				sum += i;	
			}
			if (j == sum)
			{
				printf("%d ", j);
				sum = 0;
			}
		}
	}
	return 0;
}
  • 运行结果:

tips:错误代码展示:

#include <stdio.h>
int main()
{
	int sum=0;
	for (int j = 2; j <=1000; j++)
	{
		for (int i = 2; i <= j; i++)
		{
			if(j%i==0)
				sum += i;
		}
		if (j == sum)
			printf("%d ",j);
	}	
	return 0;
}

错误结果:

解释:0表示成功,-1表示出错并不是唯一的方案。这只是其中一种而已。

C练习实例20

  • 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
  • 代码展示:
#include <stdio.h>
#define N 10 

float  Game (float h) //Game函数是来求10次落地时,在空中总共运动的路程s;
{
	float s = 0;
	h = 100;     //注意不要把形参重定义了              
	for (int i = 1; i < N;i++)
	{
		s += h/2;
		h = h/2;  
	}
	printf("第10次反弹高度:>%f\n", h/2);
	s =(s*2+100); 
	return s;
}

int main()
{
	float x = 0;
	float y = Game(x);
	printf("第10次落地时,共经历的路程:>%f\n", y);
	return 0;

}
  • 运行结果:
    在这里插入图片描述

C练习实例21

  • 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
    第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
    的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
  • 代码展示:

  • 运行结果:

C练习实例22

  • 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
  • 代码展示:

  • 运行结果:

C练习实例23

  • 题目:打印出如下图案(菱形)
    在这里插入图片描述

  • 代码展示:


  • 运行结果:

C练习实例24

  • 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
  • 代码展示:
  • 运行结果:

C练习实例25

  • 题目:求1+2!+3!+…+20!的和。

  • 代码展示:

#include <stdio.h>
int main()
{
	int x;
	double y = 1, sum = 0;
	printf("请输入x的值:>");
	scanf("%d", &x);
	for (int i = 1; i <= x; i++)
	{
		y = y * i;
		sum = sum + y;
	}
	printf("sum = %lf\n", sum);

	return 0;
}
  • 运行结果:
    在这里插入图片描述
    上面 C语言实例25 代码是经过更改后的。实际上第一次运行结果比正确答案差的很离谱。我之前所写错误代码,如下:
  • 错误代码展示:
#include <stdio.h>
int main()
{
	int x,y=1,sum=0;
	printf("请输入x的值:>");
	scanf("%d", &x);
	for (int i = 1; i <= x; i++)
	{
		y = y * i;
		sum = sum + y;
	}
	printf("sum = %d\n", sum);
	return 0;
}
  • 运行结果:

结果错误

  • 错误分析:从结果可以看出,是***变量sum和y的类型定义错误!!***要定义成 float 或 double 类型的,为什么?其实是int 类型包含的范围太小了,1+2!+3!+…+20!的和,远远超过int 类型的最大值;
  • 知识点补充:
类型范围
int(-2147483648,2147483647)
long int(-2147483648,2147483647)
unsigned int(0,4294967295)
long(-2147483648,2147483647)
long long(-9223372036854775808,9223372036854775807)
unsigned long(0,4294967295)
char(-128,127)
unsigned char(0,255)
short(-32768,32767)
unsigned short(0,65535)
double(2.22507e-308,1.79769e+308)
long double(2.22507e-308,1.79769e+308)
float(1.17549e-308,3.40282e+038)
long float(2.22507e-308,1.79769e+308)

表格中有提到科学计数法,下面给大家举个例子:1e-6表示1乘以10的负6次方;1e+6表示1乘以10的6次方。(注意:e的前后都要有数字)

C练习实例26

  • 题目:利用递归方法求5!。递归公式:fn=fn_1*4!
  • 递归就是自身调用自己,把大问题化成小问题。
    递归条件:1 存在限制条件,当满足这个限制条件的时候,递归便不在继续。2 每次递归调用之后,越来越接近这个限制条件。
  • 代码展示:
#include<stdio.h>
int Fac(int n)
{
	int sum = 1;
	if (n == 1)
		return 1;
	else
	{
		sum = n * Fac(n - 1);
		return sum;
	}
}
int main()
{
	int n;
	printf("请输入整数n:>\n");
	scanf("%d", &n);
	int k = Fac(n);
	printf("%d的阶乘为%d\n", n, k);
	return 0;
}
  • 运行结果:
    在这里插入图片描述

C练习实例27

  • 题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
  • 代码展示:
#include <stdio.h>
int F(int n)
{
	int c;
	if (n == 1)
	{
		c = getchar();
		putchar(c);
	}
	else
	{
		c = getchar();  //以abcde顺序进去。
		F(n - 1);   
		putchar(c);   //以edcba顺序输出。
		//F(n - 1);    //以abcde顺序输出。
	}
	return c;  //要有返回值。
}
int main()
{
	printf("\n请输入字符串:>\n");
	F(5);
	return 0;
}
  • 运行结果:
    在这里插入图片描述

C练习实例28

  • 题目:题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
  • 程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
  • 代码展示:
#include <stdio.h>
int F(int a)
{
	int y=10;
	if (a == 1)
	{
		return 10;
	}
	else
	{
		for (int i = 1; i < a; i++)
		{
			y = y + 2;
		}
		return y;
	}
}
int main()
{
	int a;
	printf("请输入a的值:>");
	scanf("%d", &a);
	int y = F(a);
	printf("第%d个人的年龄是%d\n", a,y);
	return 0;
}
  • 运行结果:
    在这里插入图片描述

C练习实例29

  • 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
  • 菜鸟教程实例29
  • 代码展示:
#include <stdio.h>
int main()
{
	int a, b, c, d, e, n;
	printf("\n请输入一个不多于五位数的正整数:>\n");
	scanf("%d", &n);
	e = n % 10;     //个位
	d = n / 10 % 10;  //十位
	c = n / 100 % 10;  //百位
	b = n / 1000 % 10;  //千位
	a = n / 10000;     //万位
	if (a != 0)
	{
		printf("\n%d是五位数!%d的逆序为%d%d%d%d%d!\n", n, n, e, d, c, b,a);
	}
	else if (a == 0 && b != 0)
	{
		printf("\n%d是四位数!%d的逆序为%d%d%d%d\n",n,n,e,d,c,b);
	}
	else if (a == 0 && b == 0 && c != 0)
	{
		printf("\n%d是三位数! %d的逆序为%d%d%d!\n",n,n,e,d,c);
	}
	else if (a == 0 && b == 0 && c == 0 && d != 0)
	{
		printf("\n%d是两位数!%d的逆序为%d%d!\n",n,n,e,d);
	}
	else if(a==0&&b==0&&c==0&&d==0&&e!=0)  
	{
		printf("\n%d是一位数!%d的逆序为%d!\n",n,n,e);
	}

	return 0;
}

其实菜鸟教程上写的很简单,相比菜鸟教程上的,我还是有些小疑问,比如else if(b!=0) 可以表示为四位数,仅满足b!=0,要是a!=0怎么弄?后来我又想了一下,感觉自己好傻呀,其实是输入进去是按位进去的,如321 那么就来到 (c!=0)这一步,所以,还是在写代码之前先想好,再动手,不然要写好多,显得好废。

  • 运行结果:
    在这里插入图片描述

C练习实例30

  • 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

  • 代码展示:

#include <stdio.h>
int main()
{                                     //12321
	int a, b, c, d, e,n;
	printf("\n请输入一个五位数的整数:>");
	scanf("%d", &n);
	e = n % 10;     //个位
	d = n / 10 % 10;   //十位
	c = n / 100 % 10;   //百位
	b = n / 1000 % 10;   //千位
	a = n / 10000;    //万位
	if ((a * 10000 + b * 1000 + c * 100 + d * 10 + e) == n)
		printf("\n家人们! %d是回文数嘞!\n", n);
	else
		printf("错误哦!不是回文数!");

	return 0;
}
  • 运行结果:
    在这里插入图片描述
  • 44
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值