求长方体的长宽高求它的体积以及三个面的面积。

分析:体积V=lengthwidthheight,三个面的面积分别为s1=lengthwidth、s2=widthheight、s3=length*height
C语言中的函数只能有一个返回值,我们只能将其中的一份数据,也就是体积 v 放到返回值中,而将面积 s1、s2、s3 设置为全局变量。

#include <stdio.h>

int s1,s2,s3;//定义三个全局变量用来接收面积
int vs(int a,int b,int c);//声明一下函数

int main(int argc, const char * argv[]) {
    int v,length,width,height;
    printf("Input length, width and height: ");
    scanf("%d,%d,%d",&length,&width,&height);
    v = vs(length,width,height);
    printf("v=%d,s1=%d,s2=%d,s3=%d\n",v,s1,s2,s3);
    return 0;
}

int vs(int a,int b,int c){
    int v;
    v = a*b*c;//体积
    s1 = a*b;
    s2 = a*c;
    s3 = b*c;
    return v;
}

求两个整数的最大公约数。

分析:最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。例如:求24和60的最大公约数,先分解质因数,得24=2×2×2×3,60=2×2×3×5,24与60的全部公有的质因数是2、2、3,它们的积是2×2×3=12,所以,(24,60)=12。

#include <stdio.h>

int gcd(int a,int b);

int main(int argc,const char * argv[]){
    int a,b;
    scanf("%d,%d",&a,&b);
    printf("GCD: A=>%d, B=>%d (A,B)=%d\n",a,b,gcd(a,b));
    return 0;
}
int gcd(int a,int b){
    /*
     * 最大公约数的递归:
     * 1、若a可以整除b,则最大公约数是b
     * 2、如果1不成立,最大公约数便是b与a%b的最大公约数
     * 示例:求(140,21)
     * 140%21 = 14
     * 21%14 = 7
     * 14%7 = 0
     * 返回7
     * 示例:求(21,140)
     * 21%140 = 21
     * 140%21 = 14
     * ...
     * 返回7
     * */
    if(a%b==0){
        return b;
    }else{
        return gcd(b, a%b);
    }
}

查看给定的字符是否位于某个字符串中。

分析:遍历给的字符串中有字符和输入的字符相等

#include <stdio.h>
#include <string.h>

int strchar(char *str, char c);
int main(){
    char url[] = "zhangkai";
    char letter = 'a';
    if(strchar(url, letter) >= 0){
        printf("The letter is in the string.\n");
    }else{
        printf("The letter is not in the string.\n");
    }
    return 0;
}
int strchar(char *str, char c){
    for(int i=0,len = strlen(str); i<len; i++){  //i和len都是块级变量
        if(str[i] == c){
            return i;
        }
    }
    return -1;
}

字符串反转(逆置)

分析:

  • 非递归:遍历字符串,交换前后两个相应位置的字符;
  • 递归:将第一个字符保存在tmp中,将最后一个字符赋给第一个字符,递归调用。每次调用函数,都会把字符串的第 0 个字符保存到 ctemp 变量,并把最后一个字符填充到第 0 个字符的位置,同时用'0'来填充最后一个字符的位置。
#include <stdio.h>
#include <string.h>
char *reverse(char *str);
int main(int argc,const char * argv[]){
    char str[]="abcdefg";
    printf("%s\n",reverse(str));
    return 0;
}
char *reverse(char *str) {
    int len = strlen(str);//计算字符串长度,用来查找最后一个字符
    if (len > 1) {
        char ctemp = str[0];//将第一个字符保存临时变量里
        str[0] = str[len - 1];//将最后一个字符赋值给第一个字符
        str[len - 1] = '\0'; //交换后指针指向下一个字符,最后一个字符赋为’\0’
        reverse(str + 1);  //递归调用
        str[len - 1] = ctemp;//将保存的tmp值赋给左后一个字符
    }
    return str;
}

求菲波那契数

分析:菲波那契数就是一个数列,数列中每个数的值就是它前面两个数的和,这种关系常常用以下形式进行描述:
F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*)。

#include <stdio.h>
//递归计算斐波那契数
//双层递归的调用关系和数据结构中二叉树的结构完全吻合,所以双层递归常用于二叉树的遍历。
long fib(int n) {
    if (n <= 2) {
        return 1;
    }
    else {
        return fib(n - 1) + fib(n - 2);
    }
}
int main() {
    int a;
    printf("Input a number: ");
    scanf("%d", &a);
    printf("Fib(%d) = %ld\n", a, fib(a));
    return 0;
}

标签: none

添加新评论