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;
}
相关推荐
是苏浙5 小时前
零基础入门C语言之C语言实现数据结构之单链表经典算法
c语言·开发语言·数据结构·算法
71-37 小时前
C语言练习题——判断水仙花数(0-100000)
c语言·笔记·学习
jzhwolp8 小时前
从基本链表到侵入式链表,体会内核设计思路
c语言·后端·设计模式
biter down8 小时前
c语言18:结构体位段联合体
c语言·开发语言
程序员buddha10 小时前
C语言操作符详解
java·c语言·算法
云知谷12 小时前
【经典书籍】《代码整洁之道》第六章“对象与数据结构”精华讲解
c语言·开发语言·c++·软件工程·团队开发
树在风中摇曳13 小时前
C语言 | 文件操作详解与实战示例
c语言·开发语言
雨落在了我的手上13 小时前
C语言入门(十六):指针(2)
c语言
say_fall14 小时前
C语言编程实战:每日刷题 - day 1
c语言·开发语言·学习
IoT智慧学堂14 小时前
C语言流程控制:if判断语句全解析
c语言·开发语言