• C语言编程经典100例——11至20例


    目录

    第 11 例

    第 12 例

    第 13 例

    第 14 例

    第 15 例

    第 16 例

    第 17 例

    第 18 例

    第 19 例

    第 20 例


    第 11 例

    程序源码:

    1. /*
    2. 题目:古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,
    3. 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
    4. (输出前40个月即可。)
    5. 程序分析:兔子的规律为数列1,1,2,3,5,8,13,21...
    6. 即下个月是上两个月之和(从第三个月开始)。
    7. */
    8. #include
    9. int main()
    10. {
    11. int f1=1,f2=1,i;
    12. for(i=1;i<=20;i++)
    13. {
    14. printf("%12d%12d",f1,f2);
    15. if(i%2==0) printf("\n");
    16. f1=f1+f2;
    17. f2=f1+f2;
    18. }
    19. printf ("\n");
    20. return 0;
    21. }

    程序运行结果:

    第 12 例

    程序源码:

    1. /*
    2. 题目:将4至100中的偶数分解成两个素数之和。
    3. 程序分析:详见下面的代码。
    4. */
    5. #include
    6. //自定义的函数。
    7. int leap (int x)
    8. {
    9. int n,flag;
    10. flag=1; //设flag的值为1,表示x是素数。
    11. for (n=2;n
    12. {
    13. if (x%n==0)
    14. {
    15. flag=0;
    16. break;
    17. }
    18. }
    19. return flag;
    20. }
    21. //主函数。
    22. int main ()
    23. {
    24. int x,a,b;
    25. printf ("将4至100中的偶数分解成两个素数之和,如下所示:\n");
    26. for (x=4;x<=100;x=x+2)
    27. {
    28. for (a=2;a<=x/2;a++)
    29. {
    30. if (leap(a)==1)
    31. {
    32. b=x-a;
    33. if (leap(b)==1)
    34. {
    35. printf ("%3d = %2d + %2d\n",x,a,b);
    36. break;
    37. }
    38. }
    39. }
    40. }
    41. printf ("\n");
    42. return 0;
    43. }

    程序运行结果:

    第 13 例

    程序源码:

    1. /*
    2. 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,
    3. 其各位数字立方和等于该数 本身。例如:153是一个"水仙花数",
    4. 因为153=1的三次方+5的三次方+3的三次方。
    5. 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
    6. */
    7. #include
    8. int main()
    9. {
    10. int i,x,y,z;
    11. printf ("所有的“水仙花数”如下所示:\n");
    12. for(i=100;i<1000;i++)
    13. {
    14. x=i%10;
    15. y=i/10%10;
    16. z=i/100%10;
    17. if(i==(x*x*x+y*y*y+z*z*z))
    18. printf("%d = %d * %d * %d + %d * %d * %d + %d * %d * %d\n",i,x,x,x,y,y,y,z,z,z);
    19. }
    20. printf ("\n");
    21. return 0;
    22. }

    程序运行结果:

    第 14 例

    程序源码:

    1. /*
    2. 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
    3. 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
    4. (1)如果这个质数恰等于(小于的时候,继续执行循环)n,则说明分解质因数的过程已经结束,
    5. 打印出即可。
    6. (2)但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n.重复执行第二步。
    7. (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
    8. */
    9. #include
    10. int main()
    11. {
    12. int n,i;
    13. printf("请输入整数:");
    14. scanf("%d",&n);
    15. printf("%d = ",n);
    16. for(i=2;i<=n;i++)
    17. {
    18. while(n%i==0)
    19. {
    20. printf("%d ",i);
    21. n/=i;
    22. if(n!=1) printf("* ");
    23. }
    24. }
    25. printf("\n\n");
    26. return 0;
    27. }

    程序运行结果:

    第 15 例

    程序源码:

    1. /*
    2. 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,
    3. 60-89分之间的用B表示,60分以下的用C表示。
    4. 程序分析:(a>b)?a:b这是条件运算符的基本例子。
    5. */
    6. #include
    7. int main()
    8. {
    9. float score;
    10. char grade;
    11. printf("请输入分数:");
    12. scanf("%f",&score);
    13. grade=(score>=90.0)?'A':((score>=60.0)?'B':'C');
    14. printf("%c\n",grade);
    15. printf ("\n");
    16. return 0;
    17. }

    程序运行结果:

    第 16 例

    程序源码:

    1. /*
    2. 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
    3. 程序分析:
    4. (1)最小公倍数=输入的两个数之积除于它们的最大公约数,关键是求出最大公约数。
    5. (2)求最大公约数用辗转相除法(又名欧几里德算法)。
    6. 1)证明:
    7. 设c是a和b的最大公约数,记为c=gcd(a,b),a>=b,
    8. 令r=a mod b,
    9. 设a=kc,b=jc,则k,j互素,否则c不是最大公约数,
    10. 据上,r=a-mb=kc-mjc=(k-mj)c,
    11. 可知r也是c的倍数,且k-mj与j互素,否则与前述k,j互素矛盾,
    12. 由此可知,b与r的最大公约数也是c,即gcd(a,b)=gcd(b,a mod b),得证。
    13. 2)算法描述:
    14. 第一步:a ÷ b,令r为所得余数(r >= 0)。
    15. 第二步:互换:置 a←b,b←r,并返回第一步。
    16. */
    17. #include
    18. int main()
    19. {
    20. int a,b,t,r,n;
    21. printf("请输入两个数字:(注意两个数字之间使用空格分隔开!)\n");
    22. scanf("%d %d",&a,&b);
    23. if(a
    24. {
    25. t=b;b=a;a=t;
    26. }
    27. r=a%b;
    28. n=a*b;
    29. while(r!=0)
    30. {
    31. a=b;
    32. b=r;
    33. r=a%b;
    34. }
    35. printf("这两个数的最大公约数是%d,最小公倍数是%d\n",b,n/b);
    36. printf ("\n");
    37. return 0;
    38. }

    程序运行结果:

    第 17 例

    程序源码:

    1. /*
    2. 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
    3. 程序分析:利用while语句,条件为输入的字符不为'\n'。
    4. */
    5. #include
    6. int main()
    7. {
    8. char c;
    9. int letters=0,spaces=0,digits=0,others=0;
    10. printf("请输入一行字符:\n");
    11. while((c=getchar())!='\n')
    12. {
    13. if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
    14. {
    15. letters++;
    16. }
    17. else if(c>='0'&&c<='9')
    18. {
    19. digits++;
    20. }
    21. else if(c==' ')
    22. {
    23. spaces++;
    24. }
    25. else
    26. {
    27. others++;
    28. }
    29. }
    30. printf("字母 %d 个\n数字 %d 个\n空格 %d 个\n其他 %d 个\n",letters,digits,spaces,others);
    31. printf ("\n");
    32. return 0;
    33. }

    程序运行结果:

    第 18 例

    程序源码:

    1. /*
    2. 题目:从键盘输入一个二维数组a,然后将二维数组a经过矩阵的转置得到二维数组b。
    3. 程序分析:详见下面的代码。
    4. */
    5. #include
    6. #define N 2
    7. #define M 3
    8. int main ()
    9. {
    10. //定义二维整型数组a和b。
    11. int a[N][M];
    12. int i,j,b[M][N];
    13. printf ("请输入二维整型数组a的6个元素:\n");
    14. //利用双重循环通过键盘给二维整型数组a赋值。
    15. for (i=0;i
    16. {
    17. for (j=0;j
    18. {
    19. printf ("a[%d][%d]=",i,j);
    20. scanf ("%d",&a[i][j]);
    21. }
    22. }
    23. printf ("\n二维整型数组a:\n");
    24. //利用双重循输出二维整型数组a,并给二维整型数组b赋值。
    25. for (i=0;i
    26. {
    27. for (j=0;j
    28. {
    29. printf ("%-5d",a[i][j]);
    30. b[j][i]=a[i][j];
    31. }
    32. printf ("\n");
    33. }
    34. printf ("\n二维整型数组b:\n");
    35. //利用双重循输出二维整型数组b。
    36. for (j=0;j
    37. {
    38. for (i=0;i
    39. {
    40. printf ("%-5d",b[j][i]);
    41. }
    42. printf ("\n");
    43. }
    44. printf ("\n");
    45. return 0;
    46. }

    程序运行结果:

    第 19 例

    程序源码:

    1. /*
    2. 题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。
    3. 例如6=1+2+3,编程找出10000以内的所有“完数”。
    4. 程序分析:请参照:C语言练习实例14,如下所示:
    5. 对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
    6. (1)如果这个质数恰等于(小于的时候,继续执行循环)n,则说明分解质因数的过程已经结束,
    7. 打印出即可。
    8. (2)但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第二步。
    9. (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
    10. */
    11. #include
    12. #define N 10000
    13. int main()
    14. {
    15. int i,j,k,n,sum;
    16. int a[256];
    17. printf ("10000以内的所有“完数”有:\n");
    18. for(i=2;i<=N;i++)
    19. {
    20. sum=a[0]=1;
    21. k=0;
    22. for(j=2;j<=(i/2);j++)
    23. {
    24. if(i%j==0)
    25. {
    26. sum+=j;
    27. a[++k]=j;
    28. }
    29. }
    30. if(i==sum)
    31. {
    32. printf("%d=%d",i,a[0]);
    33. for(n=1;n<=k;n++)
    34. printf("+%d",a[n]);
    35. printf("\n");
    36. }
    37. }
    38. printf ("\n");
    39. return 0;
    40. }

    程序运行结果:

    第 20 例

    程序源码:

    1. /*
    2. 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半,
    3. 再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
    4. 程序分析:见下面注释。
    5. */
    6. #include
    7. int main()
    8. {
    9. float h,s;
    10. int i;
    11. h=s=100.0;
    12. h=h/2; //第一次反弹高度
    13. for(i=2;i<=10;i++)
    14. {
    15. s=s+2*h;
    16. h=h/2;
    17. }
    18. printf("第10次落地时,共经过%f米,第10次反弹高是%f米。\n",s,h);
    19. printf ("\n");
    20. return 0;
    21. }

    程序运行结果:

  • 相关阅读:
    【保姆级爬虫】微博关键词搜索并获取博文和评论内容(python+selenium+chorme)
    工控机防勒索病毒浅析
    【优化调度】基于matlab帝国企鹅算法求解航空调度优化问题【含Matlab源码 YXS001期】
    使用nodel实现前后端数据渲染
    有关架构设计的个人思考(本文后续不断修改更新)
    zemax光线光扇图
    比起传统纸质表单,在线表单制作工具优势在哪?
    1.网络空间搜素引擎
    python配置环境心得
    32 天高效突击:狂刷《Java 权威面试指南(阿里版)》,offer 拿到手软!
  • 原文地址:https://blog.csdn.net/ZK180531/article/details/133581836