c语言练习题

来源:互联网 发布:经典网络歌曲试听 编辑:程序博客网 时间:2024/04/28 16:24

int printf_er(int a){

    int sum=0,m=1,i=0;

    int b[32]={};

    for (a; a; a/=2) {

        if (a%2==0) {

            b[i]=0;

        }else{

            b[i]=1;

        }

        i++;

    }

    for (int j=0; j<=i; j++) {

        if (j%2==0) {

            int temp=b[j];

            b[j]=b[j+1];

            b[j+1]=temp;

        }

    }

    for (int j=0; j<=i; j++) {

        int c[i];

        c[j]=b[j]*m;

        m*=2;

        sum+=c[j];

    }

    return sum;

}





int max_value(int a,int b,int c){

    return (((a>b)?a:b)>c)?((a>b)?a:b):c;

}


#define Max(a,b,c)max_value((a),(b),(c))

#define Hu(x)printf_er((x))

int main(int argc, const char * argv[])

{

//    1、定义一个宏,求三个数的最大值

    printf("%d\n", Max(45,9,3));

    

//    2、定义一个宏,来实现一个整数奇偶比特位的交换。例如:6奇偶比特位交换后结果是9。如何用宏来实现?

    printf("%d",Hu(8));

    

       return 0;

    

}

typedef char (*pfun)(char);

void getValue(char str[],long strlen ,pfun p){

    for (int i=0; i<strlen; i++) {

        if (i==0||str[i-1]==' ') {

           str[i]= p(str[i]);

        }

    }

}

char putatoA(char a){

    return a-32;

}

////////////////////////////////////

int beivalue(int a,int b){

    int j=0;

    for ( j=(a>b?a:b); j<=a*b; j++) {

        if (j%a==0&&j%b==0) {

            break;

        }

    }

    return j;

}

int yuevalue(int a,int b){

    return a*b/beivalue(a, b);

}

int sumvalue(int a,int b){

    return a+b;

}

int chavalue(int a,int b){

    return a-b;

}

typedef int (*Pfun)(int,int);


typedef struct pfunl

{

    char name;

    Pfun p;

}FUN_POIN;

/////////////////////////////////////

typedef float (*Pun)(float,float);

typedef struct nameFunctionPair{

    char name[10];

    Pun q;

}NaFun;

float maxvalue(float a,float b){

    return (a>b)?a:b;

}

float minvalue(float a,float b){

    return (a<b)?a:b;

}

float avgvalue(float a,float b){

    return (a+b)/2;

}


int main(int argc, const char * argv[])

{

//1、输入一句英文句子,将其中所有单词首字符转换成大写,用回调函数实现。(修改单词功能写成回调函数)。

    char str[]="dhuf fsh iujwe fw rtgr df drgfd rrr";

    getValue(str, strlen(str), putatoA);

    printf("%s\n",str);

    

//    2、动态函数调用实现下列操作,输入2个数以及操作符计算结果。

//    @求最大公约数       $求最小公倍数

//    - 求差      + 求和   等等

    int a=0,b=0;

    char c;

    printf("第二题\n请输入两个数和操作符:");

    scanf ("%d,%c,%d",&a,&c,&b);

    FUN_POIN arr[4] = {'@',yuevalue,'$',beivalue,'+',sumvalue,'-',chavalue};

    for (int i=0;i<4;i++){

        if(arr[i].name==c){

            printf("%d\n",arr[i].p(a,b));

        }

    }


//    使用函数名的字符串调用函数 函数名   函数指针

//                            “max”   maxValue

//                            “min”   minValue

//                            “avg”   avgValue

    float m=0,n=0;

    printf("第三题\n请输入两个数:");

    scanf("%f%f",&m,&n);

    NaFun func[3]={"max",maxvalue,"min",minvalue,"avg",avgvalue};

    char strs[10] = {0};

    printf("请输入操作:");

    scanf("%s", strs);

    for (int i = 0; i < 3; i++) {

        if (strcmp(strs, func[i].name) == 0) {

            printf("结果为%.2f",func[i].q(m,n));

            break;

        }

    }

       return 0;

    

}



0 0
原创粉丝点击