C语言从初识到认识(3)

                              ### 学习中碰到的许多例题
  • 水仙花数
    水仙花数指的是指一个三位数,其各位数字立方和等于该数,如:153就是一个水仙花数,153=111+555+333。

代码要求找出所有的水仙花数,代码如下:

#include <stdio.h>
int main()
{
    //定义三位数num,个位数sd,十位数td,百位数hd
    int num, sd, td, hd;
    //循环所有三位数
    for(num=100;num<1000;num++)
    {
        //获取三位数字num百位上的数字
        hd = (num/100) ;
        //获取三位数字num十位上的数字
        td = (num%100)/10 ;
        //获取三位数字num个位上的数字
        sd = (num%100)%10  ;
        //水仙花数的条件是什么?
        if( hd*hd*hd+td*td*td+sd*sd*sd == num ) 
        {
            printf("水仙花数字:%d\n", num);    
        }
    }
    return 0;    
}

水仙花数的大概算法就是通过for循环提取出每一位数,再利用if语句判断最后输出。
当然,也可以换一种循环,大致就是这样的算法。

  • 9×9乘法表
    乘法表是for循环中比较有代表性的东西,还可以各种变向,先来一个最平常的吧。
#include<stdio.h>
int main()
{
	int i,j;//定义变量
	for(i=1;i<10;i++)
	{
		for(j=1;j<=i;j++)
		{
			printf("%d*%d=%-4d",j,i,i*j);/*为了代码能够美观,
			利用格式字符的不同变化形式控制间距*/
		}
	}
	return 0;
}	

利用for循环的嵌套还可以,做出许多更强的东西。此时此刻,我想要引用某位大佬的题目。打印n*n法表,要求位与位对齐,这时我们只需要稍微改进下;
如以下代码:

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

只要输入n*n就可以输出各种奇葩乘法表;如
C语言从初识到认识(3)

  • 回文数
    回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数
    代码如下:
#include <stdio.h>
int main()
{
	int t,s=0,n;
	printf("输入数字:");
	scanf("%d",&n);
	t=n;
	while(t)
	s=s*10+t%10,t/=10;
	if(s==n)printf("是\n");
	else printf("不是\n");
}