C语言学习笔记

2019-11-15  本文已影响0人  Aladdim

C语言练习题:循环部分(20题)\color{#4285f4}{更}\color{#ea4335}{丰}\color{#fbbc05}{富}\color{#4285f4}{的}\color{#34a853}{资}\color{#ea4335}{源}

\color{#00ff83}{Aladdin}

1.求一正整数限定内所有素数

\color{#6633FF} { ---- 每天进步一点点,努力改变自己---- }

/*
    __author__ = 'xiaofeizhang'
    函数作用:求一正整数限定内所有素数 
*/

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

int main(void){
    int num;
    bool isprime = true;
    printf("请输入一个正整数:");
    scanf("%d", &num);
    if(num==0 || num==1){
        printf("%d不是素数", num);
        exit(0);
    }
    
    for (int j=2; j<=num; j++){
        for (int i=2; i<=sqrt(j); i++){
            if (j%i == 0){
                isprime = false;    
                break; 
            }
            else{
                isprime = true;
            }           
        }
        if  (isprime == true){
            printf("%d是素数\n", j);
        }
    }
            
    return 0;
} 

/*
请输入一个正整数:100
2是素数
3是素数
5是素数
7是素数
11是素数
13是素数
17是素数
19是素数
23是素数
29是素数
31是素数
37是素数
41是素数
43是素数
47是素数
53是素数
59是素数
61是素数
67是素数
71是素数
73是素数
79是素数
83是素数
89是素数
97是素数

--------------------------------
Process exited after 1.651 seconds with return value 0
请按任意键继续. . .
*/ 

2.求一正整数的各个位数显示,并求和

/*
    __author__ = 'xiaofeizhang'
    函数作用:正整数的各个位数显示,并求和  ``
*/

#include <stdio.h>
int main(void){
    int num, num_copy, sum=0;
    printf("请输入一个正整数:");
    scanf("%d", &num);
    num_copy = num;
    while(num){
        printf("%d\n", num%10);
        sum += num%10;
        num /= 10;
    }
    printf("%d的各位求和为:%d", num_copy, sum); 
    return 0;
} 

/*
请输入一个正整数:123
3
2
1
123的各位求和为:6
--------------------------------
Process exited after 1.567 seconds with return value 0
请按任意键继续. . .
*/

3.迭代求值

/*
    __author__ = 'xiaofeizhang'
    函数作用:迭代求值 
*/
#include <stdio.h>
int main(void){
    int max, i=0, sum=0, j=0;
    printf("请输入本次迭代的最大值:");
    scanf("%d", &max);
    for(;i<=max; ){
        sum +=i;
        i=i+2;
        j++;
    }
    printf("%d之内的偶数叠加的值为:%d\n", max, sum);
    printf("迭代了%d次", j);    
    return 0;
    } 

/*
请输入本次迭代的最大值:12
12之内的偶数叠加的值为:42
迭代了7次
--------------------------------
Process exited after 3.905 seconds with return value 0
请按任意键继续. . .
*/ 

4.设定次数,猜数字

/*
    __author__ = 'xiaofeizhang'
    函数作用:有奖竞猜 
*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
    int num, symbol, max=5;
    srand(time(NULL));
    num = rand()%100+1;
    printf("预设值的结果为:%d\n", num);
    printf("有奖竞猜下:");
    scanf("%d", &symbol);
    for(int i=1; i<=max; i++){
        if (symbol!=num){
            if (symbol>num){
                printf("小伙子,猜大啦\n");
                printf("再猜一次:");
                scanf("%d", &symbol); 
            }
            else{
                printf("小伙子,猜小啦\n");
                printf("再猜一次:");
                scanf("%d", &symbol);
            }
            if (i==max-1){
                printf("非常抱歉,小伙子,不行呀,在加油吧");    
            }
        }
        else{
            printf("哎呦,不错仅仅花费了%d次,就猜到是%d", i, num);
            break; 
        }
    }
    return 0;   
} 

/*
预设值的结果为:81
有奖竞猜下:31
小伙子,猜小啦
再猜一次:53
小伙子,猜小啦
再猜一次:70
小伙子,猜小啦
再猜一次:81
哎呦,不错仅仅花费了4次,就猜到是81
--------------------------------
Process exited after 19.45 seconds with return value 0
请按任意键继续. . .

*/

5.设定次数10次,猜数字

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void){
    int num, symbol, max=1;
    srand(time(NULL));
    num = rand()%100+1;
    printf("请输入你本次猜的值为:");
    scanf("%d", &symbol);
    while (num!=symbol){
        if (symbol>num){
            printf("小伙子,猜大啦\n");
            printf("再猜一次:");
            scanf("%d", &symbol); 
        }
        else{
            printf("小伙子,猜小啦\n");
            printf("再猜一次:");
            scanf("%d", &symbol); 
        }
        max++;
        } 
    printf("哎呦不错哟,仅仅用了%d次,就猜到我心中的%d了", max, num);
    return 0;
}

6.实现捐款到10万元,并求得每人平均捐款值

/* 
    __author__ = 'xiaofeizhang'
    函数作用:实现捐款到10万元,并求得每人平均捐款值 
 */
#include <stdio.h>
#include <conio.h>
int main(){
  float num,total=0,ave;
  int i;
  for(i=1;i<=1000;i++){
    printf("请输入捐款金额:");
    scanf("%f",&num);
    total=total+num;
    if(total>=100000)
      break; 
  }
  ave=total/i;
  printf("捐款人数为:%d,平均捐款数目:%f",i,ave);
  getch();
  return 0;
}  

/*
请输入捐款金额:1000
请输入捐款金额:1230
请输入捐款金额:3210
请输入捐款金额:123333
捐款人数为:4,平均捐款数目:32193.250000
*/ 

7.while循环,实现叠加

/*
    __author__ = 'xiaofeizhang'
    函数作用:while循环,实现叠加 
*/

#include <stdio.h>
int main(void){
    int i=0, n, sum=0;
    printf("请输入你想计算叠加数到:");
    scanf("%d", &n);
    while (i<=n){
        sum += i;
        i++;
    }
    printf("%d之内的叠加运算的结果为:%d", n, sum);
    return 0;
}

/*
请输入你想计算叠加数到:12
12之内的叠加运算的结果为:78
--------------------------------
Process exited after 4.607 seconds with return value 0
请按任意键继续. . .
*/

8.计算一个公式

/*
    __author__ = 'xiaofeizhang'
    函数作用:计算一个公式 
*/

#include <stdio.h>
#include <stdlib.h>
int main(void){
    int i, n;
    double result=1;
    
    printf("请输入参数(1-100): ");
    scanf("%d", &n);
    if (n==0){
        printf("本次没包含0在内"); 
        exit(0);
    }
    if (n==1){
        printf("本次计算的结果为:1");
        exit(0); 
    }
    for (i=2; i<=n; i++){
        result = 1.0/(1+result);
    }
    printf("本次计算的结果为:%f", result); 
    return 0;
}

/*
请输入参数(1-100): 31
本次计算的结果为:0.618034
--------------------------------
Process exited after 2.53 seconds with return value 0
请按任意键继续. . .

*/

9.斐波那契数列40项

/*
    __author__ = 'xiaofeizhang'
    函数作用: 斐波那契数列40项 
*/

#include <stdio.h> 
int main(void){
    int f1=1, f2=1, f3;
    printf("%12d%12d", f1, f2);
    for (int i=3; i<=40; i++){
        f3 = f1+f2;
        f1 = f2;
        f2 = f3;
        printf("%12d", f3);
        if (i%5==0){
            printf("\n");    
        }
    }
    return 0;
}

/*
           1           1           2           3           5
           8          13          21          34          55
          89         144         233         377         610
         987        1597        2584        4181        6765
       10946       17711       28657       46368       75025
      121393      196418      317811      514229      832040
     1346269     2178309     3524578     5702887     9227465
    14930352    24157817    39088169    63245986   102334155

--------------------------------
Process exited after 0.02965 seconds with return value 0
请按任意键继续. . .
*/

10.计算一数的阶乘

/*
    __author__ = 'xiaofeizhang'
    函数作用: 计算一数的阶乘 
*/

#include <stdio.h>
int main(void){
    int i,n,result=1;
    printf("说想算多少以内的阶乘:");
    scanf("%d", &n);
    if (n==0){
        printf("0的阶乘为1"); 
    }
    else{
        for (i=1;i<=n;i++){
            result *=i;
        }
        printf("%d的阶乘为:%d", n, result); 
    }
    return 0;
} 

/*
说想算多少以内的阶乘:12
12的阶乘为:479001600
--------------------------------
Process exited after 2.506 seconds with return value 0
请按任意键继续. . .

*/

11.计算两个年份之间平年的年数,并输出

/*
    __author__ = 'xiaofeizhang'
    函数作用:计算两个年份之间平年的年数,并输出 
*/ 

#include <stdio.h>
#include <stdlib.h>

int main(void){
    int year_min, year_max;
    printf("请输入起始年份:");
    scanf("%d", &year_min);
    printf("请输入终止年份:");
    scanf("%d", &year_max);
    if (year_min>year_max){
        printf("小伙子,算数不好,要好好学呀");
        exit(0);
    }
    for (int i=year_min; i<=year_max; i++){
        if ((i%4==0&&i%100!=0) || (i%400==0)){
            continue;
        }
        else{
            printf("%d是平年\n", i);
        }
    } 
    return 0;
}

/*
请输入起始年份:1984
请输入终止年份:2018
1985是平年
1986是平年
1987是平年
1989是平年
1990是平年
1991是平年
1993是平年
1994是平年
1995是平年
1997是平年
1998是平年
1999是平年
2001是平年
2002是平年
2003是平年
2005是平年
2006是平年
2007是平年
2009是平年
2010是平年
2011是平年
2013是平年
2014是平年
2015是平年
2017是平年
2018是平年

--------------------------------
Process exited after 6.785 seconds with return value 0
请按任意键继续. . .
*/ 

12.计算一公式

/*
    __author__ = 'xiaofeizhang'
    函数作用:计算一公式 
*/ 

#include <stdio.h>
#include <stdlib.h>
int main(void){
    int m;
    double result=1;
    printf("说,这次想算多少以内的算法1-100: ");
    scanf("%d", &m);
    if (m==0){
        printf("它不在基本的计算中哟");
        exit(0); 
    }
    if (m==1){
        printf("本次计算的结果为:1");
        exit(0); 
    }
    for (int i=2; i<=m; i++){
        result = result - 1.0/(i*i);
    }
    printf("本次计算的结果为:%f", result);
    return 0; 
} 
/*
说,这次想算多少以内的算法1-100: 20
本次计算的结果为:0.403837
--------------------------------
Process exited after 2.763 seconds with return value 0
请按任意键继续. . .

*/

13.do···while实现奇数叠加

/*
    __author__ = 'xiaofeizhang'
    函数作用:do···while实现奇数叠加 
*/ 
#include <stdio.h>
int main(void){
    int i=1, n, sum=0;
    printf("请输入你想计算叠加数到:");
    scanf("%d", &n);
    do {
        sum += i;
        i=i+2;
    }while(i<=n); 
    printf("%d 之内的奇数叠加运算的结果为:%d", n, sum);
    return 0;
}

/*
请输入你想计算叠加数到:31
31 之内的奇数叠加运算的结果为:256
--------------------------------
Process exited after 3.213 seconds with return value 0
请按任意键继续. . .
*/

14.求各项求和的和

/*
__author__ = 'xiaofeizhang'
函数作用:求各项求和的和 
*/
#include <stdio.h>
int main(void){
    int n, sum_part=0;
    double sum=0;
    printf("请输入n的取值:");
    scanf("%d", &n);
    for (int i=1; i<=n; i++){
        for (int j=1; j<=i; j++){
            sum_part += j;
        }
        sum += 1.0/sum_part;
        sum_part = 0;       
    }
    printf("和为:%f", sum);   
    return 0;
}


/*
请输入n的取值:4
和为:1.600000
--------------------------------
Process exited after 8.868 seconds with return value 0
请按任意键继续. . .

*/

15.求解 3x+5y+7z=100的所有非负数整数解

/*
    __author__ = 'xiaofeizhang'
    函数作用:求解 3x+5y+7z=100的所有非负数整数解 
*/ 

#include <stdio.h>
int main(void){
    int x, y, z, sum;
    for (x=1; x<=33; x++){
        for(y=1; y<=20; y++){
            for (z=1; z<=14; z++){
                sum = 3*x+5*y+7*z;
                if (sum == 100){
                    printf("解为:%d, %d, %d\n", x, y, z);
                }
            }
        }
    }
    return 0;
} 

/*
解为:1, 4, 11
解为:1, 11, 6
解为:1, 18, 1
解为:2, 2, 12
解为:2, 9, 7
解为:2, 16, 2
解为:3, 7, 8
解为:3, 14, 3
解为:4, 5, 9
解为:4, 12, 4
解为:5, 3, 10
解为:5, 10, 5
解为:6, 1, 11
解为:6, 8, 6
解为:6, 15, 1
解为:7, 6, 7
解为:7, 13, 2
解为:8, 4, 8
解为:8, 11, 3
解为:9, 2, 9
解为:9, 9, 4
解为:10, 7, 5
解为:11, 5, 6
解为:11, 12, 1
解为:12, 3, 7
解为:12, 10, 2
解为:13, 1, 8
解为:13, 8, 3
解为:14, 6, 4
解为:15, 4, 5
解为:16, 2, 6
解为:16, 9, 1
解为:17, 7, 2
解为:18, 5, 3
解为:19, 3, 4
解为:20, 1, 5
解为:21, 6, 1
解为:22, 4, 2
解为:23, 2, 3
解为:26, 3, 1
解为:27, 1, 2

--------------------------------
Process exited after 0.8456 seconds with return value 0
请按任意键继续. . .
*/

16.求两个数的最大公约数


/*
__author__ = 'xiaofeizhang'
函数功能:求两个整数的最大公约数和最小公倍数(枚举法,辗转消除法,更相减损法) 
*/

#include <stdio.h>
int main(void){
     
    int m, n, t, minimum_common_multiple;
    printf("请输入第一参数, 第二个参数:");
    scanf("%d, %d", &m, &n);
    minimum_common_multiple = m*n;
    // m中放小的整数,n中放大的整数
    if(m>n){
        t = m;
        m = n;
        n = t;
    }
    
// %%%%%%%%%%%%%%%%%%%%%%%%   
    // 枚举法
    for(int i=m; i>=1; i--){
        if(n%i==0 && m%i==0){
            printf("枚举法\n");
            printf("%d和%d的最小公倍数数为:%d\n",  m, n, minimum_common_multiple/i);
            printf("%d和%d的最大公约数为:%d\n",  m, n, i);
            printf("\n");
            break;
        }
    } 
    
    // 辗转消除法
    int x, y, tmp;
    
    x = m;
    y = n;
    tmp = 1;
    while(tmp){
        tmp = y%x;
        if (tmp==0){
            printf("辗转消除法\n");
            printf("%d和%d的最小公倍数数为:%d\n",  m, n, minimum_common_multiple/x);
            printf("%d和%d的最大公约数为:%d\n",  m, n, x);
            printf("\n");
        }
        else {
            y = x;
            x = tmp;
        } 
    }
    
    // 更相减损法
    int w, z, a;
    w = m;
    z = n;
    a = 1;
    while(a){
        a = w%z;
        if (a==0){
            printf("更相减损法\n");
            printf("%d和%d的最小公倍数数为:%d\n",  m, n, minimum_common_multiple/z);
            printf("%d和%d的最大公约数为:%d\n",  m, n, z);
            printf("\n");
        }
        else {
            w = z;
            z = a;
        } 
    }
    
    
    return 0;
}  

/*
请输入第一参数, 第二个参数:99,120
枚举法
99和120的最小公倍数数为:3960
99和120的最大公约数为:3

辗转消除法
99和120的最小公倍数数为:3960
99和120的最大公约数为:3

更相减损法
99和120的最小公倍数数为:3960
99和120的最大公约数为:3


--------------------------------
Process exited after 10.33 seconds with return value 0
请按任意键继续. . .

*/

17.求一正整数限定内所有素数

/*
    __author__ = 'xiaofeizhang'
    函数作用:求一正整数限定内所有素数 
*/

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

int main(void){
    int num;
    bool isprime = true;
    printf("请输入一个正整数:");
    scanf("%d", &num);
    if(num==0 || num==1){
        printf("%d不是素数", num);
        exit(0);
    }
    
    for (int j=2; j<=num; j++){
        for (int i=2; i<=sqrt(j); i++){
            if (j%i == 0){
                isprime = false;    
                break; 
            }
            else{
                isprime = true;
            }           
        }
        if  (isprime == true){
            printf("%d是素数\n", j);
        }
    }
            
    return 0;
} 

/*
请输入一个正整数:100
2是素数
3是素数
5是素数
7是素数
11是素数
13是素数
17是素数
19是素数
23是素数
29是素数
31是素数
37是素数
41是素数
43是素数
47是素数
53是素数
59是素数
61是素数
67是素数
71是素数
73是素数
79是素数
83是素数
89是素数
97是素数

--------------------------------
Process exited after 1.651 seconds with return value 0
请按任意键继续. . .
*/ 

18.数列12,22,32,···,202的和

/*
__author__ = 'xiaofeizhang'
函数功能:求数列12,22,32,···,202的和 三种方法(for,while,do···while) 
*/

#include <stdio.h>
int main(void){
    // for循环 
    int i, sum_for=0;
    for (i=1; i<=20; i++){
        sum_for += 10*i+2;
    }
    printf("for循环求法\n"); 
    printf("数列12,22,32,···,202的和为:%d\n", sum_for);
    printf("\n");
    
    // while循环
    int j=1,  sum_while = 0;
    while(j<=20){
        sum_while += 10*j+2;
        j++; 
    }
    printf("while循环求法\n"); 
    printf("数列12,22,32,···,202的和为:%d\n", sum_while);
    printf("\n");
    
    // do···while循环
    int k=1, sum_do_while = 0;
    do {
        sum_do_while += 10*k+2;
        k++;
    }while(k<=20);
    printf("do···`while循环求法\n"); 
    printf("数列12,22,32,···,202的和为:%d\n", sum_do_while);

    return 0;
}

/*
for循环求法
数列12,22,32,···,202的和为:2140

while循环求法
数列12,22,32,···,202的和为:2140

do···`while循环求法
数列12,22,32,···,202的和为:2140

--------------------------------
Process exited after 0.556 seconds with return value 0
请按任意键继续. . .
*/

19.100-1000之间的水仙花数

/*
__author__ = 'xiaofeizhang'
函数作用:100-1000之间的水仙花数 
*/
#include <stdio.h>
int main(void){
    int i, j, k, m, n;
    for (i=100; i<1000; i++){
        j = i/100; // 百分位 
        k = i%100/10; // 十分位 
        m = i%10;  // 个位 
        if (i == j*j*j+k*k*k+m*m*m){
            printf("%d是水仙花数\n", i);
        }
        
    }
    return 0;
}

/*
153是水仙花数
370是水仙花数
371是水仙花数
407是水仙花数

--------------------------------
Process exited after 0.4438 seconds with return value 0
请按任意键继续. . .

*/

20.模拟实现:学生成绩管理系统

/*
__author__ = 'xiaofeizhang'
函数作用:模拟实现:学生成绩管理系统 
*/

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

int main(void){
    int choice;
    while(1){
        system("cls");
        printf("\t\t\t*********学生成绩管理系统***********\n");
        printf("\t\t\t*     1. 从文件读取学生的成绩      *\n");
        printf("\t\t\t*     2. 添加学生的成绩            *\n");
        printf("\t\t\t*     3. 显示学生的成绩            *\n");
        printf("\t\t\t*     4. 按照姓名查找学生的成绩    *\n");
        printf("\t\t\t*     5. 按照姓名学生的成绩        *\n");
        printf("\t\t\t*     6. 统计学生的总成绩和平均成绩*\n");
        printf("\t\t\t*     7. 统计学生的人数            *\n");
        printf("\t\t\t*     8. 给学生成绩排名            *\n");
        printf("\t\t\t*     9. 保存学生的成绩            *\n");
        printf("\t\t\t*     0. 退出                      *\n");
        
        printf("请输入选项:0-9: ");
        scanf("%d", &choice);
        switch (choice){
            case 0: 
                printf("谢谢使用\n");
                exit(0);
            case 1:
                printf("从文件读取学生的成绩\n");
                break;
            case 2:
                printf("添加学生的成绩\n");
                break;
            case 3:
                printf("显示学生的成绩\n");
                break;
            case 4:
                printf("按照姓名查找学生的成绩\n");
                break;
            case 5:
                printf("按照姓名学生的成绩\n");
                break;
            case 6:
                printf("统计学生的总成绩和平均成绩\n");
                break;
            case 7:
                printf("统计学生的人数\n");
                break;
            case 8:
                printf("给学生成绩排名\n");
                break;
            case 9:
                printf("保存学生的成绩\n");
                break;
            default:
                printf("\n输入不对\n");
                break; 
        } 
    printf("按任意键继续...\n");
    getch();
    }
    return 0;
} 

/*
                      

                        *********学生成绩管理系统***********
                        *     1. 从文件读取学生的成绩      *
                        *     2. 添加学生的成绩            *
                        *     3. 显示学生的成绩            *
                        *     4. 按照姓名查找学生的成绩    *
                        *     5. 按照姓名学生的成绩        *
                        *     6. 统计学生的总成绩和平均成绩*
                        *     7. 统计学生的人数            *
                        *     8. 给学生成绩排名            *
                        *     9. 保存学生的成绩            *
                        *     0. 退出                      *
请输入选项:0-9: 3
显示学生的成绩
按任意键继续...

*/ 

上一篇下一篇

猜你喜欢

热点阅读