C语言小练

给定两个数,求这两个数的最大公约数

本算法主要利用辗转相除法求出两个数的最大公约数。

cpp 复制代码
`int main(){
    int m=0;
    int n=0;
    int r=0;
    scanf("%d %d",&m,&n);
    while(r=m%n){
        m=n;
        n=r;
    } 
    printf("%d\n",n);
    return 0;
}`

打印斐波那契数列指定位置的值

菲波那切数列:指的是这样一个数列:1、1、2、3、5、8、13、21、34、......这个数列从第3项开始,每一项都等于前两项之和。

复制代码
int fib(int n){
    if(n<=2)
        return 1;
    else
        return fib(n-1)+fib(n-2);
}
 
int main(){
    int i=0;
    int ret=0;
    scanf("%d",&i);
    ret=fib(i);
    printf("ret=%d",ret);
    return 0;
}

给定两个数,求这两个数的最大公约数

本算法主要利用辗转相除法求出两个数的最大公约数。

复制代码
int main(){
    int m=0;
    int n=0;
    int r=0;
    scanf("%d %d",&m,&n);
    while(r=m%n){
        m=n;
        n=r;
    } 
    printf("%d\n",n);
    return 0;
}

三个数从大到小输出

复制代码
int main(){
    int a=0;
    int b=0;
    int c=0;
    scanf("%d%d%d",&a,&b,&c);
    //算法实现:a中放最大值   b次之   c中放最小值
    if(a<b){
        int tmp=a;
        a=b;
        b=tmp;
    } 
    if(a<c){
        int tmp=a;
        a=c;
        c=tmp;
    }
    if (b<c){
        int tmp=b;
        b=c;
        c=tmp;
    }
    printf("%d %d %d\n",a,b,c);
    return 0;    
} 

模拟用户登陆情况,且只能输如三次

复制代码
int main(){
    int i=0;
    char password[20]={0};
    for(i=0;i<3;i++){
        printf("请输入密码:>");
        scanf("%s",password);
        if(strcmp(password,123456)==0){  //==不能用来比较两个字符串是否相等,应该使用一个库函数--strcmp 
            printf("登陆成功\n");
            break;
        }else{
            printf("密码错误\n");
        }
    }
    if(i==3)
    printf("三次密码错误,退出程序\n");
    return 0;

采用二分法查找数组中的指定元素

复制代码
int main(){
    int arr[]={1,2,3,4,5,6,7,8,9,10};
    int k=7;
    
    int sz=sizeof(arr)/sizeof(arr[0]);  //计算元素个数 
    int left=0;      //左下标 
    int right=sz-1;  //右下标 
    while(left<=right){
        int mid=(left+right)/2;
        if(arr[mid]>k){
            right=mid-1;
        }
        else if(arr[mid]<k){
            left=mid+1;
        }
        else{
            printf("找到了,下标是:%d\n",mid);
            break;
        }    
    }
    if(left>right){
        printf("找不到\n");
    }
    return 0;
}

打印输出九九乘法表

复制代码
int main()
{
    int i=0;
    int j=0;
    for(i=1;i<10;i++)
    {    //一共9行 
        for(j=1;j<=i;j++)
        {
            printf("%d*%d=%-2d ",i,j,i*j);  //"%-2d"的作用是使打印的结果左对齐 
        }
        printf("\n");   //打印完一行再分行 
    }
    return 0;
}

数一下1-100中所有整数出现多少个数字9

复制代码
int main(){
    int i=0;
    int count=0;
    for(i=1;i<=100;i++){
        if(i%10==9){
            count++;
        }
        if(i/10==9){
            count++;
        }
    }
    printf("count=%d\n",count);
    return 0;
}

打印1-200之间的素数,并输出总共有多少个

复制代码
int main(){
    int i=0;
    int count=0;
    for(i=100;i<=sqrt(i);i++){
        int j=0;
        for(j=2;j<i;j++){
            if(i%j==0){
            break;
            }
        }
        if(j>sqrt(i)){  //sqrt(i)表示开平方 --记得调用数学库函数
            count++;
            printf("%d\n",i);
        }
    }
    printf("count=%d\n",count);
    return 0;
}

不引用第三个变量,交换两个数的值

复制代码
方法一:

int main(){
    int a,b;  
    scanf("%d %d",&a,&b);
    a=a+b;
    b=a-b;
    a=a-b;
    printf("a=%d b=%d\n",a,b);  
    return 0;
} 
这种方法有缺陷,可能会导致整形溢出 。

方法二:

int main(){
    int a,b;
    scanf("%d %d",&a,&b);
    a=a^b;
    b=a^b;
    a=a^b; 
    printf("a=%d b=%d\n",a,b); 
    return 0;
}
相关推荐
敲上瘾7 分钟前
Linux I/O 多路复用实战:Select/Poll 编程指南
linux·服务器·c语言·c++·select·tcp·poll
海天胜景22 分钟前
编译器错误消息: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET... 拒绝访问
c语言·windows
草莓熊Lotso2 小时前
【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day8
c语言·开发语言·c++·刷题·强化训练
pusue_the_sun11 小时前
数据结构:二叉树oj练习
c语言·数据结构·算法·二叉树
曙曙学编程14 小时前
stm32——GPIO
c语言·c++·stm32·单片机·嵌入式硬件
XH华20 小时前
C语言第九章字符函数和字符串函数
c语言·开发语言
♞沉寂1 天前
信号以及共享内存
linux·c语言·开发语言
SunnyKriSmile1 天前
【冒泡排序】
c语言·算法·排序算法
_poplar_1 天前
08.5【C++ 初阶】实现一个相对完整的日期类--附带源码
c语言·开发语言·数据结构·c++·vscode·算法·vim
意疏1 天前
探秘C语言:数据在内存中的存储机制详解
c语言·开发语言