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就可以输出各种奇葩乘法表;如
- 回文数
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数
代码如下:
#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");
}