经典C语言例题之Linux

本文介绍了C语言中的几个实用编程技巧,包括如何不使用中间变量交换两个整数的值、求解100到999之间的水仙花数、找出1至100内的所有素数以及寻找1000以内的完数。这些技巧不仅展示了C语言的强大能力,还提供了理解数学概念的独特视角。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

#include<stdio.h>

/*
*********************************************
*不使用中间变量,将两个整数的值交换
*   int a b;
*   a=a+b;
*   b=a-b;
*   a=a-b;
*此答案未考虑到溢出的问题
*********************************************

*int 正数的最大值 2^32-1
*补码: 正数的补码是起本身,负数的补码:绝对值的源码取反+1
*有符号:最高位是符号位 1:负数   0:正数
*   a=a^b;
*   b=a^b;
*   a=a^b;
*/

int main(int argc ,char *argv[])
{
    int a,b;
    scanf("%d %d",&a,&b);
    a=a+b;
    b=a-b;
    a=a-b;
    printf("%d, %d\n",a,b);

}

这里写图片描述

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

#define N 100

/*********************************************
*质数/素数:除了1和本身以外不能被别的数所整除
*求1-100以内所有的素数
*********************************************
*/

int main(int argc,int argv[])
{
    int i,j;
    //int count=1;//计数

    for(i=3;i<=N;i=i+2)
    {
        for(j=3;j<=(i/2);j+=2)
        {
            if((i%j) == 0)
            {
                break;
            }
        }
        if(j>=i/2)
            {
                printf("  %d",i);
            }
        //if(i%5==0)
            //printf("\n");
    }
    printf("\n");
}

这里写图片描述

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

#define N 999

/*
************************************************************
*   求100-999之间的所有水仙花数
*   153=1^3+5^3+3^3
*   某个数=个数的立方+十位的立方+百位的立方
*   重点:求一个3位数的个位 十位 百位
************************************************************
*/


//int  accum(int n);
int  calculate(const int i);

int main(int argc, char  argv[])
{
    //int uint,decade,hundreds;//uint:个位    decade:十位   hundreds:百位
    int count=0,i;

    for( i=100;i<=N;i++)
    {
        int temp=calculate(i);
        if(temp==i)
        {
            printf("%5d",i);
            count++;
        }
        //if(count%5==0)
                //printf("\n");

    }
    printf("\n");
}

/*
*********************************
*       数的累积
*********************************
*/
int  accum(int n)
{
    return n*n*n;
}

/*
*********************************
*       数的个位 十位 百位
*********************************
*/
int  calculate(const int i)
{
    int ones,decade,hundreds;   //ones:个位   decade:十位   hundreds:百位
    ones=i%100%10;  //个位
    decade=i/10%10; //十位
    hundreds=i/100; //百位

    int sum=0;
    sum=ones*ones*ones+decade*decade*decade+hundreds*hundreds*hundreds;
    //return  accum(ones)+accum(decade)+accum(hundreds);
    return sum;

}

这里写图片描述

#include<stdio.h>

/*
**************************************************
*       求1000以内的所有的完数
*       完数=所有的因子的和(不包括本身)
*       6=1+2+3
**************************************************
*/

int main(int argc,char argv[])
{
    int i,j,sum;
    for(i=2;i<=1000;i++)
    {
        sum =0;
        for(j=1;j<i/2+1;j++)
        {
            if(i%j==0)
            {
                sum=sum+j;
            }

        }
        if(sum==i)
        {
            printf("%d  ",i);
        }

    }
    printf("\n");
}

这里写图片描述

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值