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;
}
相关推荐
YuforiaCode4 小时前
第十六届蓝桥杯 2025 C/C++组 破解信息
c语言·c++·蓝桥杯
南玖yy4 小时前
C++ 成员变量缺省值:引用、const 与自定义类型的初始化规则详解,引用类型和const类型的成员变量自定义类型成员是否可以用缺省值?
c语言·开发语言·c++·后端·架构·c++基础语法
YuforiaCode4 小时前
第十六届蓝桥杯 2025 C/C++组 旗帜
c语言·c++·蓝桥杯
YuforiaCode4 小时前
第十六届蓝桥杯 2025 C/C++B组 第二轮省赛 全部题解(未完结)
c语言·c++·蓝桥杯
keep intensify5 小时前
数据结构---单链表的增删查改
c语言·数据结构·c++·经验分享·学习·算法·分享
算法歌者5 小时前
[C]基础13.深入理解指针(5)
c语言
XWXnb65 小时前
STM32 中断系统深度剖析
c语言·开发语言·stm32·嵌入式硬件
大模型铲屎官6 小时前
Unity C# 与 Shader 交互入门:脚本动态控制材质与视觉效果 (含 MaterialPropertyBlock 详解)(Day 38)
c语言·unity·c#·交互·游戏开发·材质·shader
夜夜敲码14 小时前
C语言教程(十八):C 语言共用体详解
c语言·开发语言
努力创造奇迹1 天前
C 语言联合体、枚举、typedef 详解
c语言·开发语言