C语言经典实例

 

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

     程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去选择满足条件的

#include <stdio.h>
int main(void) { 
	for(int i=1;i<5;i++)
	   for(int j=1;j<5;j++)
	       for(int k=1;k<5;k++)
	       {
	           if(i!=j&&i!=k&&j!=k)
	           printf("%d%d%d ",i,j,k);
	           
	       }
	return 0;
}

题目2:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

      程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果

#include <stdio.h>
#include <math.h>
int main(void) { 
	long int i,x,y,z;
	for(i=1;i<100000;i++)
	{
	    x=sqrt(i+100);
	    y=sqrt(i+268);
	    if(x*x==i+100&&y*y==i+268)
	    printf("%ld\n",i);
	    
	}
	return 0;
}

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

  程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小

#include <stdio.h>
#include <math.h>
int main(void) { 
	int x,y,z,t;
	scanf("%d %d %d",&x,&y,&z);
	if(x>y)
	{
	    t=x;
	    x=y;
	    y=t;
	}
	if(x>z)
	{
	    t=x;
	    x=z;
	    z=t;
	}
	if(y>z)
	{
	    t=y;
	    y=z;
	    z=t;
	}
	return 0;
}

题目4:输出9*9口诀。

     程序分析:分行与列考虑,共9行9列,i控制行,j控制列

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

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

      质因数素因数质因子)在数论里是指能整除给定正整数质数。除了1以外,两个没有其他共同质因子的正整数称为互质。因为1没有质因子,1与任何正整数(包括1本身)都是互质。正整数的因数分解可将正整数表示为一连串的质因子相乘,质因子如重复可以用指数表示。根据算术基本定理,任何正整数皆有独一无二的质因子分解式 [1]  。只有一个质因子的正整数为质数。

每个合数都可以写成几个质数(也可称为素数)相乘的形式 [2]  ,这几个质数就都叫做这个合数的质因数。如果一个质数是某个数的因数,那么就说这个质数是这个数的质因数;而这个因数一定是一个质数。

1没有质因子。

5只有1个质因子,5本身。(5是质数)

6的质因子是2和3。(6 = 2 × 3)

2、4、8、16等只有1个质因子:2。(2是质数,4 =2²,8 = 2³,如此类推)

10有2个质因子:2和5。(10 = 2 × 5)

合数指自然数中除了能被1和本身整除外,还能被其他数(0除外)整除的数。与之相对的是质数,而1既不属于质数也不属于合数。最小的合数是4

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:  

        (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可

          ( 2 )如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,  重复执行第一步。 

          ( 3 )如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

#include <stdio.h>
int main()
{
    int i,n;
    printf("please input a nmber:");
    scanf("%d",&n);  
    for(i=2;i<n;i++)
    {
        while(n!=i)
        {
            if(n%i==0)
            {
                printf("%d*",i);
                n/=i;
            }
            else
                break;
        }
        
    }
    return 0;
}

 


题目6:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

程序分析:请抓住分子与分母的变化规律。

#include <stdio.h>
int main(void) { 
	float s=0,a=2,b=1;
	int i,t;
	for(i=1;i<=20;i++)
	{
	    s=s+a/b;
	    t=a;a=a+b;b=a;
	}
	printf("%f",s);
	return 0;
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

const

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值