C语言经典例题

                              ### 学习中碰到的许多例题
  • 水仙花数
    水仙花数指的是指一个三位数,其各位数字立方和等于该数,如:153就是一个水仙花数,153=1×1×1+5×5×5+3×3×3
    题目:找出三位数的所有水仙花数;
    代码要求找出所有的水仙花数,代码如下:
#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就可以输出各种奇葩乘法表;如
11*11乘法表

  • 回文数
    回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数
    代码如下:
#include <stdio.h>
int main()
{
	int t,s=0,n;
	printf("输入数字:");//输出
	scanf("%d",&n);//输入
	t=n;//赋值
	while(t)//当t<10时,t/10=0,t=0时就是循环结束时
	s=s*10+t%10,t/=10;//这个运算方法是关键
	if(s==n)printf("是\n");//判断
	else printf("不是\n");
}
	

回文数并不是很难。用数组处理也可以,当然要麻烦些,所以,麻烦的东西就用来处理麻烦的事情吧!

回文字符串

回文字符串就是正读反读都一样的字符串,如“abcba”、“abccba”。要求从键盘输
入字符串。

先看思路:
回文字符串的思路
1,定义一个数组,字符数组,再定义四个整形常量i c n j=0
2, 在不知道输入多少个字符时,最好利用while循环输入while((c=getchar())!=’\n’)这条语句就是
在输入回车时,结束循环,当然,循环次数需要一个计数器,于是进去一个计数器j,执行j++
3,把j的值赋给n,
4,接下来进行循环,for语句中i=0;i<n/2;i++,j–,各项要注意
5, for循环中要添加if语句if(a[i]==a[j-1])

 			if(a[i]==a[j-1]){/*如果有5个字母,n=5,n/2=2,
 			只需要对比a[0]和a[4];a[1]和a[3];所以,只需要控制
 			i的范围在n/2以内,不包括n/2,中间字母不用对比。
 			这个就可以导出循环的控制语句。*/
 					if(i==n/2-1)
					{
						printf("YES!");
					}	}	
			else
			{
			printf("NO!");
			break;
			}
		是回文字符串输出yes,不是输出no
		代码如下:
#include<stdio.h>
int main()
{
	char a[30];
	int i,c,n,j=0;
	while((c=getchar())!='\n')
	{
		a[j]=c;
		j++;	
	}
	n=j; 
	for(i=0;i<n/2;i++,j--)
	{
		if(a[i]==a[j-1])
		{
			if(i==n/2-1)
			{
				printf("YES!");
			}		
		}
		else
		{
			printf("NO!");
			break;
		}
	}
	return 0;
}

利用更简便的方法解决问题,才是学习的关键。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值