复习c语言8-28

#include <stdio.h>
//1.实现一个对整型数组的冒泡排序
//int main()
//{
//    int arr[10] = { 2,3,1,5,7,4,6,9,8,10 };
//    int len = sizeof(arr)/sizeof(arr[0]);
//    printf("%d\n", len);
//    int i = 0;
//    int j = 0;
//      int flase = 0;
//    for (i = 0; i < len - 1; i++)
//    {
//        for(j=0;j<len-1-i;j++)
//        {
//            if (arr[j] > arr[j + 1])
//            {
//                flase = 1;//交换了
//                int tmp = arr[j];
//                arr[j] = arr[j + 1];
//                arr[j + 1] = tmp;
//            }
//        }
//        if (flase == 0)
//        {
//            break;
//        }
//
//    }
//    for (i = 0; i < len; i++)
//    {
//        printf("%d ", arr[i]);
//    }
//    return 0;
//}
//2.创建一个整形数组完成对数组的操作
//1.实现函数int()初始化数组为全0
//2.实现printf() 打印数组的每个元素
//3.实现reverse()函数完成数组元素的逆置
//要求:自己设计以上函数的参数,返回值
//void InitArr(int arr[10],int sz)
//{
//    int i = 0;
//    for (i = 0; i < sz; i++)
//    {
//        arr[i] = 0;
//    }
//}
//void Print(int arr[10], int sz)
//{
//    int i = 0;
//    for (i = 0; i < sz; i++)
//    {
//        printf("%d ", arr[i]);
//    }
//}
//void reverse(int arr[10],int sz)//二分法查找
//{
//    int left = 0;
//    int right = sz - 1;
//    while (left < right)
//    {
//        int tmp = arr[left];
//        arr[left] = arr[right];
//        arr[right] = tmp;
//        left++;
//        right--;
//    }
//}
//int main()
//{
//    int i = 0;
//    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//    int sz = sizeof(arr) / sizeof(arr[0]);
//    //初始化数组
    InitArr(arr,sz);
//    //打印函数数组
//    Print(arr,sz);
//    printf("\n");
//    //逆置--大小顺序倒转
//    reverse(arr,sz);
//    Print(arr, sz);
//    return 0;
//}
//3.将数组A中的内容和数组B中的内容进行交换 (数组一样大)
//int main()
//{
//    int arr1[] = { 1,3,5,7,9 };
//    int arr2[] = { 2,4,6,8,0 };
//    int i = 0;
//    int tmp = 0;
//    int sz = sizeof(arr1) / sizeof(arr1[0]);
//    for (i = 0; i < sz ; i++)
//    {
//        tmp = arr1[i];
//        arr1[i] = arr2[i];
//        arr2[i] = tmp;
//    }
//    for (i = 0; i < sz ; i++)
//    {
//        printf("%d ", arr1[i]);
//    }
//    printf("\n");
//    for (i = 0; i < sz ; i++)
//    {
//        printf("%d ", arr2[i]);
//    }
//    return 0;
//}
//4.int main()
//{
//    int arr[] = { 1,2,3,4,5 };//4个字节
//    short* p = (short*)arr;//2个字节
//    int i = 0;
//    for (i = 0; i < 4; i++)
//    {
//        *(p + i) = 0;
//    }
//    for (i = 0; i < 5; i++)
//    {
//        printf("%d ", arr[i]);//00345
//    }
//    return 0;
//}
//int main()
//{
//    int a = 0X11223344;
//    char* pc = (char*)&a;
//    *pc = 0;
//    printf("%x\n", a);//11223300
//    return 0;
//}
//5.int i;//全局变量-不初始化-默认是0
//int main()
//{
//    i--;//-1转变成无符号数--非常大
//    if (i > sizeof(i))//sizeof()-计算变量/类型所占内存的大小->=0-是无符号数
//    {
//        printf(">\n");//>
//    }
//    else
//    {
//        printf("<\n");
//    }
//    return 0;
//
//}
//6.
//int main()
//{
//    int a, b, c;
//    a = 5;
//    c = ++a;//c=6a=6
//    b = ++c, c++, ++a, a++;//c=8,a=8,b =7
//    b += a++ + c;//b=b + a++ + c //7+8+8=23//a=9c=8
//    printf("a=%d b=%d c=%d\n:", a, b, c);//9 23 8
//    return 0;
//}
//7.统计二进制中1的个数
//写一个函数返回参数二进制中1的个数
//int count_bit_one(unsigned int a)//排查负数的符号位
//{
//    //参考123求每一位数123%10/10
//    //a=13--00000000000000000000000000001101
//    int count = 0;
//    while (a)
//    {
//        if (a % 2 == 1)
//        {
//            count++;
//        }
//        a = a / 2;
//    }
//    return count;
//}
//int count_bit_one (int a)
//{
//    int count = 0;
//    int i = 0;
//    for (i = 0; i < 32; i++)
//    {
//        if (((a >> i) & 1) == 1)
//        {
//            count++;
//        }
//    }
//    return count;
//}
//最精简的方法
//int count_bit_one(int a)
//{
//    int count = 0;
//    while (a)
//    {
//        /*
//        * a=13
//        * 1101
//        * 1100--12
//        * 1100--a
//        * 1011--11
//        * 1000--a
//        * 0111--7
//        * 0000--a
//        */
//        a = a & (a - 1);
//        count++;
//    }
//    return count;
//}
//int main()
//{
//    int a = 0;
//    scanf_s("%d", &a);
//    int num = count_bit_one(a);
//    printf("num = %d\n",num);
//    return 0;
//}
//8.求二进制中不同位的个数
//两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
//int count_bit_diff(int m, int n)
//{
//    int count = 0;
//    while (m)
//    {
//        if ((m % 2) != (n % 2))
//        {
//            //m = m / 2;
//            //n = n / 2;
//            count++;
//        }
//        m = m / 2;//9,4
//        n = n / 2;//11,5
//    }
//    return count;
//}
//int count_bit_diff(int m, int n)
//{
//    int i = 0;
//    int tmp = 0;
//    int count = 0;
//     tmp = m ^ n;
//    //printf("%d\n", tmp);
//    while (tmp)
//    {
//        tmp = tmp & (tmp - 1);
//        count++;
//    }
//    return count;
//}
//int main()
//{
//    int m = 0;//10011
//    int n = 0;//10110//00101
//    scanf_s("%d%d", &m,&n);
//    int count = count_bit_diff(m, n);
//    printf("%d\n", count);
//    return 0;
//}
//9.打印二进制的奇数位和偶数位
//获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
//void get_bit(int n)
//{
//    int i = 0;
//    printf("奇数位:>\n");
//    for (i = 30; i >= 0; i-=2)
//    {
//        printf("%d ", (n >> i) & 1);
//    }
//    printf("\n偶数位:>\n");
//    for (i = 31; i >= 1; i -= 2)
//    {
//        printf("%d ", (n >> i) & 1);
//    }
//
//}
//int main()
//{
//    int n = 0;
//    scanf_s("%d", &n);//10   00000000000000000000000000001010
//    get_bit(n);
//    return 0;
//}
//10.不创建临时变量,交换两个整数的内容
//int main()
//{
//    int a = 10;
//    int b = 20;
//    //01010
//    //10100
//    //11110--a
//    //10100
//    //01010--b
//    //11110--a
//    //10100--b
//    /*a = a ^ b;
//    b = a ^ b;
//    a = a ^ b;*/
//    a = a + b;//30=a
//    b = a - b;//20=b
//    a = a - b;//10=a
//    printf("a=%d\n", a);
//    printf("b=%d\n", b);
//    return 0;
//}
//11.写一个函数打印arr数组的内容,不使用数组下标,使用指针.arr是一个整型一维数组
//void DisplayArr(int* p ,int sz)
//{
//    int i = 0;
//    for (i = 0; i < sz; i++)
//    {
//        printf("%d ", *(p + i));
//    }
//}
//int main()
//{
//    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//    int sz = sizeof(arr) / sizeof(arr[0]);
//    DisplayArr(&arr,sz);
//    return 0;
//
//}
//12.实现一个函数,打印乘法口诀表.口诀表的行数和列数自己指定
//如:输入9,输出9*9口诀表,输出12,输出12*12的乘法口诀表
//void Print(int n)
//{
//    int i = 0;
//    int j = 0;
//    for (i = 1; i <= n; i++)
//    {
//        for (j = 1; j <= i; j++)
//        {
//            printf("%d * %d = %-3d   ", i, j, i * j);
//        }
//        printf("\n");
//    }
//}
//int main()
//{
//    int n = 0;
//    scanf_s("%d", &n);
//    Print(n);
//    return 0;
//}
//13.字符串逆序(递归实现)
//编写一个函数reverse_string(char* string)(递归实现)
//实现:将参数字符串中的字符反向排列
//要求:不能使用c函数库中的字符串操作函数
//#include <string.h>
//int my_strlen(char* str)
//{
//    int count = 0;
//    while (*str != '\0')
//    {
//        count++;
//        str--;
//    }
//    return count;
//}
//void reverse_string(char string[])
//{
//    int left = 0;
//    int right = my_strlen(string) ;
//    while (left<right)
//    {
//        int tmp = string[left];
//        string[left] = string[right];
//        string[right] = tmp;
//        left++;
//        right--;
//        //reverse_string(string);
//    }
//
//}
//递归方法
//void reverse_string(char* string[])
//{
//    char tmp = string[0];
//    int len = my_strlen(string);
//    string[0] = string[len - 1];
//    string[len - 1] = '\0';
//    if ((my_strlen(string + 1) >= 2))
//    {
//        reverse_string(string + 1);
//    }
//    string[len - 1] = tmp;
//}
//int main()
//{
//    char string[] = "abcdef";
//    reverse_string(string);
//    printf("%s\n", string);
//    return 0;
//}
//14.计算一个数的每一位之和(递归实现)
//写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
//例如:调用DisitSum(1729),则应该返回1+7+2+9,它的和是19
//输入:1729  ,输出:19
//int DisitSum(unsigned int n)
//{
//        if (n > 9)
//        {
//            return DisitSum(n / 10) + n % 10;
//        }
//        else 
//        {
//            return n;
//        }
//}
//int main()
//{
//    unsigned int n = 0;
//    scanf_s("%d", &n);
//    int sum = DisitSum(n);
//    printf("sum = %d\n", sum);
//    return 0;
//}
//15.递归实现n的k次方
//编写一个函数实现n的k次方,使用递归实现
//double Pow (int n, int k)
//{
//    if(k>0)
//    {
//        return n * Pow(n, k - 1);
//    }
//    else if (k == 0)
//    {
//        return 1;
//    }
//    else
//    {
//        return (1.0 / (Pow(n, -k)));
//    }
//}
//int main()
//{
//    int k = 0;
//    int n = 0;
//    scanf_s("%d%d ", &n,&k);
//   double ret = Pow(n, k);
//    printf(" ret = %lf\n ", ret);
//        return 0;
//}
//16.求出0-100000之间的所有"水仙花数"并输出
//"水仙花数"是指一个n位数,其各位数字的n次方之和刚好等于该数本身,如135 = 1^3+5^3+3^3;,则135是一个"水仙花数"
#include <math.h>//pow函数的头文件    1235
int main()
{
    int num = 0;
    int a=0, b=0, c=0, d=0,e=0;
    for (num = 0; num <= 99999; num++)
    {
        //个位:
        a = (((num % 10000) % 1000) % 100) % 10;
        //十位:
        b = (((num % 10000) % 1000) % 100) / 10;
        //百位:
        c = ((num % 10000) % 1000) / 100;
        //千位
        d =( num %10000)/1000;
        //万位
        e = num / 10000;

        if (num >= 0 && num <= 9)
        {
            printf("%d ", num);
        }
        else if (num >= 10 && num <= 99)
        {
            if (num == pow(a, 2.0) + pow(b, 2.0))
            {
                printf("%d ", num);
            }
        }
        else if (num >= 100 && num <= 999)
        {
            if (num == pow(a, 3.0) + pow(b, 3.0) + pow(c, 3.0))
            {
                printf("%d ", num);
            }
        }
        else if (num >= 1000 && num <= 9999)
        {
            if (num == pow(a, 4.0) + pow(b, 4.0) + pow(c, 4.0) + pow(d, 4.0))
            {
                printf("%d ", num);
            }
        }
        else 
        {
            if (num == pow(a, 5.0) + pow(b, 5.0) + pow(c, 5.0) + pow(d, 5.0) + pow(e, 5.0))
            {
                printf("%d ", num);
            }
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值