zoukankan      html  css  js  c++  java
  • 循环控制 例题解析

    例题1.输出以下图形。

                *   

                        * * *     

                      * * * * *    

                    * * * * * * *   

                      * * * * *

                        * * *  

                        *  

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    
    void main()
    {
        int i, j, k;
        for (i = 0; i <= 3; i++)
        {
            for (j = 0; j <= 2 - i; j++)     putchar(' ');
            for (k = 0; k <= 2 * i; k++)     putchar('*');
            putchar('
    ');
        }
        for (i = 0; i <= 2; i++)
        {
            for (j = 0; j <= i; j++)        putchar(' ');
            for (k = 0; k <= 4 - 2 * i; k++)        putchar('*');
            putchar('
    ');
        }
    
        system("pause");
    }

    2. 计算n的阶乘

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    
    void main()
    {
        int n, factorial = 1;
        scanf("%d", &n);
    
        while (n != 0)
        {
            factorial *= n;
            --n;
        }
        printf("%d", factorial);
    
        system("pause");
    }

    3.求 1到 100之间的奇数之和、偶数之和。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    
    void main()
    {
        int odd_number = 0;
        int even_number = 0;
        for (int i = 1; i <= 100; i++)
        {
            if (i % 2)    //奇数
            {
                odd_number += i;
            }
            else
                even_number += i;
        }
        printf("奇数和为%d
    ", odd_number);
        printf("偶数和为%d", even_number);
    
        system("pause");
    }

    4. 输入一行字符,统计其中的英文字母、数字、空格和其他字符个数。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    
    void main()
    {
        char x;
        int letter = 0, digit = 0, space = 0, other = 0;
        printf("please input a string:
    "); 
    
        while ((x = getchar()) != '
    ')
        {
            if (x >= 'A'&&x <= 'Z' || x >= 'a'&&x <= 'z')
            {
                letter++;
            }
            else if (x >= '0'&&x <= '9')
            {
                digit++;
            }
            else if (x == ' ')
            {
                space++;
            }
            else
                other++;
        }
    
        printf("英文字符个数为%d
    ", letter);
        printf("数字字符个数为%d
    ", digit);
        printf("空格字符个数为%d
    ", space);
        printf("其他字符个数为%d
    ", other);
    
        system("pause");
    }

    5. 用循环语句编写求 20 + 21 + 22 + 23 + …… + 263 的程序。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    
    void main()
    {
        double sum = 1;
        double temp = 1;
        for (int i = 0; i<63; i++)
        {
            temp *= 2;
            sum += temp;
        }
        printf("和为:%g", sum);  //格式字符 %e %E %g %G 与 %f 作用相同,可以互换
    
        system("pause");
    }

    6.求1! + 2! + 3! + ... + 20! 。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    int factorial(int num)  //先写一个阶乘函数,然后用for循环每次调用这这个函数即可 { int sum = 1; for (int i = 1; i <= num; i++) sum *= i; return sum; } void main() { int mul = 0; for (int i = 1; i<21; i++) { mul += factorial(i); } printf("和为:%d", mul); system("pause"); }

    7.计算以下公式前n 项值    1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 - …… + 1/n-1 - 1/n+1。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    
    double fun(int n)
    {
        int x = 1, ch = 1;
        double sum = 0;
        for (; x <= n; x++)
        {
            sum = sum + 1.0 * ch / x;
            ch = -ch;
        }
        return sum;
    }
    
    void main()
    {
        int n;
        scanf("%d", &n);
        printf("%f", fun(n));
    
        system("pause");
    }

    8. 有一分数序列 2/1, 3/2, 5/3, 8/5, 13/8, 21/13求出这个数列的前20项之和。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    
    void main()
    {
        float a[21] = { 0 };
        float sum = 0;
        a[0] = 1;
        a[1] = 2;
        for (int i = 2; i<21; i++)
        {
            a[i] = a[i - 1] + a[i - 2];
        }
    for (int i = 0; i<20; i++) { sum += a[i + 1] / a[i]; } printf("前二十项之和为%f", sum); system("pause"); }

    9. 判断一个数是否是素数

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    int prime(int num) { for (int i = 2; i <= sqrt(num); i++) { if (num%i == 0) return 0; //返回0 非素数 } return 1; } void main() { int num; printf("Enter a integer number:"); scanf("%d", &num); if (prime(num)) printf("是素数"); else printf("不是素数"); system("pause"); }

    10. 求1-100之间所有非素数的和

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>

    int prime(int num) { for (int i = 2; i <= sqrt(num); i++) { if (num%i == 0) return 0; } return 1; }
    void main() {
    int sum = 0; for (int i = 1; i<101; i++) { if (!prime(i)) { sum += i; } } printf("非素数之和为:%d", sum); system("pause"); }

    11.验证任意偶数为两个素数之和,并输出这两个素数。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    
    int prime(int num)
    {
        for (int i = 2; i <= sqrt(num); i++)
        {
            if (num%i == 0)
                return 0;
        }
        return 1;
    }
    
    void main()
    {
        int num;
        printf("Enter a even number:");
        scanf("%d", &num);
        
        for (int i = 2; i <= num; i++)
        {
            if (prime(i))
                if (prime(num - i))
                {
                    printf("%d == %d + %d
    ", num, num - i, i);
                    break;
                }
        }
    
        system("pause");
    }

    12.输入两个正整数 m 和 n,求其最大公约数和最小公倍数。

      1)最大公约数:指两个或多个整数共有约数中最大的一个。

      2)最小公倍数:它与最大公约数的乘机为所求数之积。

      3)比如求 x,y的最大公约数和最小公倍数  x * y = 最小公倍数 * 最大公约数

    辗转相除法辗转相除法

    int gcd(int a, int b) //辗转相除法
    
    {
        if (a % b == 0)
            return b;
        else
            return gcd(b, a%b);
    }

             辗转相减法

    int gcd(int a, int b)
    {
        while (a != b)  //若a = b,则a(或b)即为两数的最大公约数
        {
            if (a > b)    a = a - b;
            else   b = b - a;
        }
        return a;
    }

    穷举法

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    
    int gcd(int a, int b)
    {
        int  tmp;
        tmp = (a > b) ? b : a;
        while (tmp > 0)
        {
            if (a % tmp == 0 && b % tmp == 0)//只要找到一个数能同时被a,b所整除,则中止循环
                break;
            tmp--;
        }
        return tmp;
    }
    
    int lcm(int u, int v) //求最小公倍数
    {
        int tmp = gcd(u, v);
        return u * v / tmp;
    }
    
    int main(void)
    {
        int m, n;
        scanf("%d%d", &m, &n);
    
        printf("最大公约数:%d
    ", gcd(m, n));
        printf("最小公倍数:%d
    ", lcm(m, n));
    
        system("pause");
    }

    13.打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数, 其各位数字立方和等于该数本身。

    例如 153是一个水仙花数,因为 153 =13 + 53 + 33

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int fcn(int num)
    {
        return num == pow((double)(num % 10), 3) 
            + pow((double)(num / 10 % 10), 3) 
            + pow((double)(num / 100), 3);
    }
    
    void main()
    {
        for (int i = 100; i <= 999; i++)
        {
            if (fcn(i))        printf("%5d", i);
        }
    
        system("pause");
    }

    14.一个数恰好等于它的平方数的右端,这个数被称为同构数。如 5 的平方是25, 5是25中的右端的数, 5就是同构数。找出1~1000之间的全部同构数

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        long long i, j, k;
        k = 10;
        for (i = 1; i <= 100000; i++)
        {
            if (i == k) k *= 10;
            j = i*i;
            if (j%k == i) printf("%lld	%lld
    ", i, j);
        }
        system("pause");
    }

    15.完数:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,28 的因子为1、2、4、7、14而28 = 1 + 2 + 4 +7 + 14,因此28是“完数”。

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int fun(int num)
    {
        int arr[100] = { 0 };
        int index = 0;
        int sum = 0;
        for (int i = 1; i<num; i++)
        {
            if (num%i == 0)
            {
                sum += i;
                arr[index++] = i; //把所有的整数因子存于数组中
            }
    
        }
        if (sum == num)
        {
            printf("  %5d its factors are", num);
            for (int i = 0; i<index;i++)
            {
                printf("%5d", arr[i]);
            }
            return 1;
        }
        else 
            return 0;
    }
    void main()
    {
        for (int i = 1; i <= 1000; i++)
        {
            if (fun(i))
            {
                printf("
    ");
            }
        }
    
        system("pause");
    }

    16.3025这个数具有一种独特的性质:将它平分为两段,即30和25,使之相加后求平方,即(30 + 25)的平方,恰好等于3025本身。请求出具有这样性质的全部四位数。

    #include <stdio.h>
    #include <stdlib.h>
    
    int fun(int num)
    {
        int num1 = num / 100;
        int num2 = num % 100;
        if (num == (num1 + num2)*(num1 + num2))
        {
            return 1;
        }
        else
            return 0;
    }
    void main()
    {
    
        for (int i = 1000; i <= 9999; i++)
        {
            if (fun(i))
            {
                printf("%6d
    ", i);
            }
        }
    
        system("pause");
    }

    17.两位数13和62具有很有趣的性质:把它们个位数字和十位数字对调,其乘积不变,即13 * 62 = 31 * 26。 编程序求共有多少对这种性质的两位数。

    (个位与十位相同的不在此列,如11、22,重复出现的不在此列,如 13 * 62与62 * 13)。

    #include <stdio.h>
    #include <stdlib.h>
    
    int fun2(int num)
    {
        return num % 10 * 10 + num / 10;
    }
    
    int fun(int num1, int num2)
    {
        if (num1 / 10 == num1 % 10 && num2 / 10 == num2 % 10)        return 0;
        if (num1 * num2 == fun2(num1) * fun2(num2))        return 1;
        else
            return 0;
    }
    
    void main()
    {
        int num = 0;
        for (int i = 10; i<100; i++)
        {
            for (int j = i; j<100; j++)
            {
                if (fun(i, j))
                {
                    printf("%5d,%5d
    ", i, j);
                    num++;
                }
            }
        }
        printf("共有%d对", num);
    
        system("pause");
    }

    18.给出一个不多于4位的正整数,要求:①  求出它是几位数  ②  分别打印出每一位数字   ③  按逆序打印出各位数字。

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    
    int Getweishu(int num)
    {
        int count = 0;
        while (num)
        {
            count++;
            num /= 10;
        }
        return count;
    }
    void ReprintNum(int num) { while (num) { printf("%d ", num % 10); num = num / 10; } }
    void printNum(int num) { int temp = 1; while (num / temp >= 10) { temp *= 10; } while (temp >= 1) { printf("%d ", num / temp % 10); temp /= 10; } }
    void main() { int num; printf("please input num : "); scanf("%d", &num); printf("%d ", Getweishu(num)); printNum(num); printf(" "); ReprintNum(num); system("pause"); }

    19.在一个程序中计算出给定误差小于0.1,0.01,0.001,0.0001,0.00001 时,下式的值

    提示:本题中误差指前 n+1项之积与前 n项积之差。

    #include <stdio.h>
    #include <stdlib.h>
    void fun(double num)
    {
        double n = 1;
        double J1 = 2 * n *(2 * n + 2) / (2 * n + 1) / (2 * n + 1);
        double J2 = 2 * n *(2 * n + 2) / (2 * n + 1) / (2 * n + 1);
        do
        {
            n = n + 1;
            J1 = J2;
            J2 *= 2 * n *(2 * n + 2) / (2 * n + 1) / (2 * n + 1);
    
        } while (J1 - J2 > num);
    
        printf("结果是%f
    ", J1);
    }
    void main()
    {
        fun(0.1);
        fun(0.01);
        fun(0.001);
        fun(0.0001);
        fun(0.00001);
        system("pause");
    }

    20.验证歌德巴赫猜想。一个充分大的偶数(大于或等于6)可以分解为两个素数之和。试编程序,将 6至50之间全部偶数表示为两个素数之和。质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int prime(int num)
    {
        for (int i = 2; i <= sqrt((double)num); i++)
        {
            if (num%i == 0)
            {
                return 0;
            }
        }
        return 1;
    }
    
    void main()
    {
    
        for (int i = 6; i<51; i = i + 2)
        {
            for (int j = 2; j<i; j++)
            {
                if (prime(j) && prime(i - j))
                {
                    printf("%d = %d + %d
    ", i, j, i - j);
                    break;
                }
            }
        }
        system("pause");
    }

     

    21.函数fun功能:计算下式前n项和作为函数值返回。

    s=(1 * 3)/(2 * 2) + (3 * 5)/(4 * 4) + (5 * 7)/(6 * 6) + …… + (2 * n - 1)*(2 * n + 1) / (2 * n)*(2 * n)

    double fun(int n)
    {
        double s = 0;
        for (int i = 1; i <= n; i++)
        {
            s = s + (2.0 * i - 1)*(2.0 * i + 1) / ((2.0 * i)*(2.0 * i));
        }
        return s;
    }

    22.函数fun的功能是:计算下式前n项和作为函数值返回

    s = 1 * 3 / (2 * 2) - 3 * 5 / (4 * 4) + 5 * 7 / (6 * 6) - …… + (2 * n - 1)*(2 * n + 1) / (2 * n)*(2 * n)

    double fun(int n)
    {
        int k = 1;
        double s = 0.0;
        for (int i = 1; i <= n; i++)
        {
            s = s + k*(2.0 * i - 1)*(2.0 * i + 1) / ((2.0 * i)*(2.0 * i)); //这里加2.0后面的0不加完全不同的两种情况
            k *= -1; //K为正负号
        }
        return s;
    }

    23.函数fun的功能:根据以下公式求pi的值(要求满足精度0.0005,即某项小于0.0005时停止迭代)。

    pi/2=1 + 1/3 + (1 * 2) / (3 * 5) + (1 * 2 * 3)/(3 * 5 * 7)+……+ (1 * 2 * …… *n)/(3 * 5*……*(2n+1))

    double fun(double eps)
    {
        double s = 1.0, s1 = 1.0;
        int n = 1;
        while (s1 >= eps)//当某项精度大于要求时,继续求下一项
        {
            s1 = s1*n / (2 * n + 1);//求多项式的每一项
            s = s + s1;
            n++;
        }
        return 2 * s;
    }

    24.函数fun功能是求出以下分数序列的前n项和作为函数值返回。

    2/1,3/2,5/3,8/5,13/8,21/13,……

    double fun(int n)
    {
        int a = 2, b = 1, t;
        double s = 0.0;
        for (int i = 1; i <= n; i++)
        {
            s = s + (double)a / b;
            t = a;    a = a + b;    b = t; //替换a b的值
        }
        return s;
    }

    25.函数fun功能:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    unsigned int fun(unsigned int n)
    {
        int mask = 1, t, res = 0;
        while (n > 0)
        {
            t = n % 10;
            if (t % 2 == 0)
            {
                res = res + t*mask;
                mask = mask * 10;
            }
            n /= 10;
        }
        return res;
    }
    void main()
    {
        int n = -1;
        while (n > 4294967295 || n < 0)
        {
            printf("Please input(0 < n < 4294967295 : ");
            scanf("%d", &n);
        }
        printf("%d", fun(n));
        system("pause");
    }

    26.函数fun功能:将形参n中,各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数,并作为函数值返回。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    unsigned int fun(unsigned int n)
    {
        int mask = 1, t, res = 0;
        while (n > 0)
        {
            t = n % 10;
            if (t % 2 == 0)
            {
                res = res * 10 + t;
            }
            n /= 10;
        }
        return res;
    }
    void main()
    {
        int n = -1;
        while (n > 4294967295 || n < 0)
        {
            printf("Please input(0 < n < 4294967295 : ");
            scanf("%d", &n);
        }
        printf("%d", fun(n));
        system("pause");
    }

    27.函数fun功能:取出将形参value中 偶数位 上的数,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    int fun(int value)
    {
        value /= 10; //取整
        int res = value % 10; //取余
        int mask = 10;
        while (value > 0)
        {
            value /= 100;
            res = value % 10 * mask + res;
            mask *= 10;
        }
        return res;
    
    }
    void main()
    {
        int n = -1;
        while (n > 4294967295 || n < 0)
        {
            printf("Please input(0 < n < 4294967295 : ");
            scanf("%d", &n);
        }
        printf("%d", fun(n));
        system("pause");
    }
  • 相关阅读:
    关于对象
    python *args **kwargs用法
    程序员的自我修养:链接、装载与库
    LInux高性能服务器编程:多线程编程
    Linux高性能服务器编程:多进程编程
    使用burpsuite进行手动sql注入
    selenium+webdriver 实现上传文件,方法有三种,
    burp下载
    初识burp suite
    jmeter函数助手_详情,(资源来源网络)
  • 原文地址:https://www.cnblogs.com/Yang-Xin-Yi/p/13507090.html
Copyright © 2011-2022 走看看