C语言经典算法100例一

【程序1】

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

# include <stdio.h>
# include <stdlib.h>
 
int main()
{
    int i,j,k,m;
    int s = 0;
    int S, N;
    int num[100][3] = {};
 
    for (i = 1; i < 5; i++) {
        for (j = 1; j < 5; j++) {
            for (k = 1; k < 5; k++) {
                num[s][0] = i;
                num[s][1] = j;
                num[s][2] = k;
                s = s + 1;
            }
        }
    }
    
    S = s;
    N = S;
    for (m = 0; m < S; m++) {
        if (num[m][0] == num[m][1] || num[m][0] == num[m][2] || num[m][1] == num[m][2]) {
            num[m][0] = 0;
            N = N - 1;
        }
    }
 
    printf("There are %d numbers and they are\n", N);
    for (m = 0; m < S; m++) {
        if (num[m][0] != 0) {
            printf("%d%d%d\n", num[m][0], num[m][1], num[m][2]);
        }
    }
    
 
    system("pause");
    return 0;
}

【程序2】

题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

# include <stdio.h>
# include <stdlib.h>
 
void main()
{
    double l, r;
 
    scanf_s("%lf", &l);
 
    l = l / 10000;
 
    if (l <= 0.0) {
        printf("Please input the right profit!");
    }
    else if(l > 0.0 & l <= 10.0){
        r = l * 0.1;
    }
    else if (l > 10.0 & l <= 20.0) {
        r = 10 * 0.1 + (l - 10) * 0.075;
    }
    else if (l > 20.0 & l <= 40.0) {
        r = 10 * 0.1 + 10 * 0.075 + (l - 20) * 0.05;
    }
    else if(l > 40.0 & l <= 60.0){
        r = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + (l - 40) * 0.03;
    }
    else if (l > 60.0 & l <= 100.0) {
        r = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 40 * 0.03 + (l - 60) * 0.015;
    }
    else {
        r = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 40 * 0.03 + 40 * 0.015 + (l - 100) * 0.01;
    }
 
    printf("Your reward is %.2f", r * 10000);
 
    system("pause");
    return;
}

【程序3】

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

# include <stdio.h>
# include <stdlib.h>
 
void main() {
    int x, y;
    int n;
 
    for (x = 10; x < 1000; x++) {
        for (y = 13; y < 1000; y++) {
            n = 0;
            while (n < 1000) {
                if (n + 100 == x * x & n + 268 == y * y) {
                    printf("%d %d %d\n", x, y, n);
                    break;
                }
                else {
                    n = n + 1;
                }
            }
        }
    }
 
    system("pause");
    return;
}

 【程序4】

题目:输入某年某月某日,判断这一天是这一年的第几天?

# include <stdio.h>
# include <stdlib.h>
 
int main()
{
    int d, m, y;
    int month[12] = {};
    int n;
    int i;
 
    scanf_s("%d%d%d", &d, &m, &y);
 
    n = d;
    month[0] = month[2] = month[4] = month[6] = month[7] = month[9] = month[11] = 31;
    month[1] = 29;
    month[3] = month[5] = month[8] = month[10];
 
    if ((y % 4 == 0 && y % 100 != 0) ||  y % 400 == 0) {
        for (i = 0; i < m - 1; i++) {
            n = n + month[i];
        }
    }
    else {
        month[1] = 28;
        for (i = 0; i < m - 1; i++) {
            n = n + month[i];
        }
    }
 
    printf("This day is the %d day of the year.", n);
 
    system("pause");
    return 0;
}

【程序8】

题目:输出9*9口诀。

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int i, j;
 
    for (i = 1; i < 10; i++) {
        for (j = 1; j <= i; j++) {
            printf("%d x %d = %d  ", i, j, i * j);
        }
        printf("\n");
    }
    system("pause");
    return 0;
}

【程序9】

题目:要求输出国际象棋棋盘。

#include <stdio.h>
#include <stdlib.h>
 
 
void main()
{
    int num[8][8] = {0};
    int i, j;
    
    for (i = 0; i < 8; i++) {
        for (j = 0; j < 8; j++) {
            if ((i + j) % 2 == 1) {
                num[i][j] = 1;
            }
        }
    }
 
 
    for (i = 0; i < 8; i++) {
        for (j = 0; j < 8; j++) {
            if (num[i][j] == 1) {
                printf("");
            }
            else {
                printf("  ");
            }
        }
        printf("\n");
    }
    
    system("pause");
    return;
}
    int num[8][8] = {0};
    int i, j;
    
    for (i = 0; i < 8; i++) {
        for (j = 0; j < 8; j++) {
            if ((i + j) % 2 == 1) {
                num[i][j] = 1;
            }
        }
    }
 
 
    for (i = 0; i < 8; i++) {
        for (j = 0; j < 8; j++) {
            if (num[i][j] == 1) {
                printf("");
            }
            else {
                printf("  ");
            }
        }
        printf("\n");
    }
    
    system("pause");
    return;
}

【程序11】

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int n[20] = {0};
    int i;
 
    n[0] = n[1] = 1;
 
    for (i = 2; i < 20; i++) {
        n[i] = n[i - 1] + n[i - 2];
    }
 
    printf("The number of rabits in first 20 months is\n");
    for (i = 0; i < 20; i++) {
        printf("%d\n", n[i]);
    }
 
    system("pause");
    return 0;
}

【程序12】

题目:判断101-200之间有多少个素数,并输出所有素数。

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int num;
    int i;
    int N = 0;
 
    for (num = 101; num <= 200; num++) {
        for (i = 2; i <= num / 2; i++) {
            if (num % i == 0) {
                N = N + 1;
                break;
            }
        }
    }
 
    printf("There are %d numbers are prime", 100 - N);
 
    system("pause");
    return 0;
}

【程序13】

题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

int main()
{
    int num = 100;
    int d1, d2, d3 = 0;
 
    printf("The 3-digits narcissistic numbers are\n");
    for (num = 100; num < 1000; num++) {
        d1 = num / 100;
        d2 = (num % 100) / 10;
        d3 = (num % 100) % 10;
        if (num == d1*d1*d1 + d2*d2*d2 + d3*d3*d3) {
            printf("%d\n", num);
        }
    }
 
 
    system("pause");
    return 0;
}

【程序14】

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

#include <stdio.h>
#include <stdlib.h>
 
int isPrime(int n) {
    int mark = 0;
    int i;
 
    for (i = 2; i < n / 2; i++) {
        if (n % i == 0) {
            mark = 1;
            break;
        }
        else {
            mark = 0;
        }
    }
 
    return mark;
}
 
int main()
{
    int num;
    int factor;
    int mark;
    int f[10];
    int i, j;
 
    scanf_s("%d", &num);
 
    j = 0;
    mark = 1;
 
    printf("%d = ", num);
 
    while (mark == 1) {
        mark = 0;
        for (factor = 2; factor < num / 2; factor++) {
            if (isPrime(factor) == 0){
                if (num % factor == 0) {
                    f[j] = factor;
                    mark = 1;
                    printf("%d * ", f[j]);
                    j++;
                    num = num / factor;
                    break;
                }
            }
        }
 
        if (mark == 0) {
            f[j] = num;
            printf("%d\n", f[j]);
    }
 
    }
    
    system("pause");
    return 0;
}

【程序15】

题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

#include <stdio.h>
#include <stdlib.h>
int main()
{
 
    int point;
 
    scanf_s("%d", &point);
 
    (point >= 90) ? (printf("A")) : ((point >= 60) ? (printf("B")) : (printf("C")));
 
    system("pause");
    return 0;
}

【程序16】

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

#include<stdio.h>
int main()
{
    int a,b,t,r;
    printf("Please input two numbers:\n");
    scanf("%d %d",&a,&b);
    if(a<b)
    {t=b;b=a;a=t;}
    r=a%b;
    int n=a*b;
    while(r!=0)
    {
        a=b;
        b=r;
        r=a%b;
    }
    printf("The greatest common factor is%d and the minimum common multiple is%d\n",b,n/b);
    
    return 0;
}

【程序17】

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char s[100];
    int n_s, n_z, n_k, n_q;
    int len;
    int i = 0;
 
    n_s = n_z = n_k = n_q = 0;
 
    scanf_s("%s", &s, 100);
 
    len = strlen(s);
 
    for (i = 0; i < len; i++) {
        if ((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z')) {
            n_z = n_z + 1;
        }
        else if (s[i] >= '0' && s[i] <= '9') {
            n_s = n_s + 1;
        }
        else if (s[i] = ' ') {
            n_k = n_k + 1;
        }
        else {
            n_q = n_q + 1;
        }
    }
 
    printf("The numbers of character, number, blank and others are %d,%d,%d,%d", n_z, n_s, n_k, n_q);
 
    system("pause");
    return 0;
}

【程序18】

题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main() 
{
    int a, s, n;
    int i;
 
    scanf_s("%d", &a);
    scanf_s("%d", &n);
 
    s = 0;
 
    for (i = 0; i < n; i++) {
        s = s + a * pow(10, i) * (n - i);
    }
 
    printf("s = %d", s);
 
    system("pause");
    return 0;
 
}

【程序19】

题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int num;
    int r,i;
 
    for (num = 1; num <= 1000; num++) {
        r = 0;
        for (i = 1; i <= num/2; i++) {
            if (num % i == 0) {
                r = r + i;
            }
        }
        if (r == num) {
            printf("%d\n", num);
        }
    }
 
    system("pause");
    return 0;
}

【程序20】

题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main()
{
    float h, s;
    int i;
 
    h = 100 * pow(0.5, 10);
    s = 0;
 
    for (i = 0; i <= 10; i++) {
        s = s + 100 * pow(0.5, i);
    }
 
    printf("The 10th height is %f and the whole length is %f", h, s);
 
    system("pause");
    return 0;
}

 

posted @ 2022-09-23 11:10  mapstar  阅读(172)  评论(0编辑  收藏  举报