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;
}
相关推荐
.普通人1 小时前
c语言--力扣简单题目(回文链表)讲解
c语言·leetcode·链表
星迹日1 小时前
C语言:联合和枚举
c语言·开发语言·经验分享·笔记
Huazzi.1 小时前
算法题解:斐波那契数列(C语言)
c语言·开发语言·算法
DdddJMs__1351 小时前
C语言 | Leetcode C语言题解之题409题最长回文串
c语言·leetcode·题解
元气代码鼠1 小时前
C语言程序设计(进阶)
c语言·开发语言·算法
做完作业了2 小时前
【C语言】预处理详解
c语言·预处理
aqymnkstkw3 小时前
2024年【电气试验】考试题库及电气试验模拟试题
大数据·c语言·人工智能·嵌入式硬件·安全
Happy鱿鱼6 小时前
C语言-数据结构 有向图拓扑排序TopologicalSort(邻接表存储)
c语言·开发语言·数据结构
KBDYD10106 小时前
C语言--结构体变量和数组的定义、初始化、赋值
c语言·开发语言·数据结构·算法
LWDlwd05256 小时前
shell指令及笔试题
c语言