分享
分享赚钱 收藏 举报 版权申诉 / 30

类型c语言经典问题.ppt

  • 上传人:weiwoduzun
  • 文档编号:4224521
  • 上传时间:2018-12-16
  • 格式:PPT
  • 页数:30
  • 大小:231.01KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    c语言经典问题.ppt
    资源描述:

    1、题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方5的三次方3的三次方。 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。,main() int i,j,k,n; printf(“water flowernumber is:“); for(n=100;n1000;n+) i=n/100; j=n/10%10; k=n%10; if(i*100+j*10+k=i*i*i+j*j*j+k*k*k) printf(“%-5d“,n); printf(“n“); ,/*分解出

    2、百位*/,/*分解出十位*/,/*分解出个位*/,水仙花数的逻辑判断条件,最大数问题:从键盘上任意输入10个整数,求出其中的最大数。 算法分析: (1)设第一个数就是最大数max; (2)若最大数max下一个数next,则该数应为所输入的所有数中的最大数(max next),否则最大数保持不变; (3)n个数要进行n-1次比较,#include “stdio.h” main() int max, next, n; scanf(“%d”, ,/* 第一个数就是最大数 */,/* 输入另外的九个数,并依次比较出最大数 */,/* 打印出最大数 */,问题:求出以“9999”作为结束标志的一组整数的

    3、最大数。例如输入:123 45 5678 34 9999 67 23456,输出结果为5678,即对9999及其以后的数不作处理。,#include “stdio.h” main() int max, next, n; scanf(“%d”, ,/* 第一个数就是最大数 */,古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21 即从第三项开始,其每一项是前两项之和,main() long f1,f2; int i; f1=f2=1; for

    4、(i=1;i=20;i+) printf(“%12ld %12ld“,f1,f2); if(i%2=0) printf(“n“); f1=f1+f2; f2=f1+f2; ,/*控制输出,每行四个*/,/*前两个月加起来赋值给第三个月*/,/*前两个月加起来赋值给第三个月*/,问题描述:位跳水高手参加米高台跳水决赛,有好事者让人据实力预测比赛结果选手说:第二,我第三;选手说:我第二,第四;选手说:我第一,第二;选手说:最后,我第三;选手说:我第四,第一 决赛成绩公布之后,每位选手的预测都只说对了一半,即一对一错请编程解出比赛的实际名次,#include void main() int cc1,

    5、cc2,cc3,cc4,cc5; int A,B,C,D,E; int g; for(A=1; A=5; A+)for(B=1; B=5; B+)for(C=1; C=5; C+)for(D=1; D=5; D+)for(E=1; E=5; E+) cc1=(B=2) ,/* cc1到cc5代表5位选手的逻辑判断 */,/* A,B,C,D,E分别代表5位选手的名次 */,/* 问题是否解决的BOOL值 */,题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的

    6、名单。,main() char i,j,k; for(i=x;i=z;i+) for(j=x;j=z;j+) if(i!=j) for(k=x;k=z;k+) if(i!=k ,/* i是a的对手,j是b的对手,k是c的对手 */,题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析:利用辗除法 GCD(A, B)=GCD(B, A%B) 当A%B=0时,B即为最大公约数 GCD(12,18)=GCD(18,12)=GCD(12,6)=GCD(6,0) 所以12和18的最大公约数为6,main() int a,b,temp; printf(“please input two nu

    7、mbers:n“); scanf(“%d,%d“, ,问题:若要求两个数的最小公倍数,该如何修改程序?,素数问题:从键盘上任意输入一个十进制整数,判断该数是否是一个素数。若是,则输出“该数是素数”;否则输出“该项数不是素数”。算法分析: (1)增加标志flag。flag=1表示是素数,flag=0表示不是素数。、 (2)一个数只能被1和其本身整除,就是素数,因此需从2到n-1逐一判断(实际只需要到n/2),#include “stdio.h” main() int n, i,flag=1;printf(“请输入一个十进制整数”);scanf(“%d”, ,猴子吃桃问题:猴子第一天摘下若干个桃子

    8、,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 程序分析:采取逆向思维的方法,从后往前推断。 T N=T N-1-(T N-1 / 2+1) T N-1=2*T N + 2 T10=1(倒推出T N,N=9,8,1),main() int day,x1,x2; day=9; x2=1; while(day0) x1=(x2+1)*2; x2=x1; day-; printf(“the total is %dn“,x1); ,/*第一天的桃子数是第2天桃

    9、子数加1后的2倍*/,main() int day,x=1; for(day=9;day=1;day- -) x=(x+1)*2; printf(“the total is %dn“,x); ,题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 分析:当num1!=0时, 分离个位数n,位数k+,同时num2=num2*10+n 丢去num1的个位数,并重复以上操作,main() long num1, num2=0;int k=0, n; scanf(“%ld”, ,num1为原始数据,num2为倒序数据, k为num1的位数,n为num1分离出的个位数,/*定义

    10、可处理的数据范围是长整型数*/,题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。,#include “math.h“ main() long int i,x,y,z; for (i=1;i100000;i+) x=sqrt(i+100); y=sqrt(i+268); if(x*x=i+100 ,/*x为加上100后开方后的结果*/,/*y为再加上168后开方后的结果*/,/*如果一个数的平方根的平方等于该数,这说明此数是

    11、完全平方数*/,题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。,main() int a,i,aa4,t; scanf(“%d“, ,/*每位数加5取余作为加密码*/,/* 1、3交换,2、4交换 */,题目:打印出杨辉三角形(要求打印出10行如下图) 1.程序分析:1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1,main() int i, j, a1010; printf(“n“); for(i=0;i10;i+)

    12、 ai0=1; aii=1; for(i=2;i10;i+) for(j=1;ji;j+) aij=ai-1j-1+ai-1j; for(i=0;i10;i+) for(j=0;j=i;j+) printf(“%5d“,aij); printf(“n“); ,/* 每行的第一和最后一个元素为1 */,/* 每行中间元素值的确定 */,/* 第i行打印i个元素 */,冒泡排序法:从键盘上输入一组数,将其按从大到小的顺序输出。算法描述:(1)每每相邻的两个数比较,使得大数下沉,小数上浮(内循环共进行n-1次);(2) 反复进行以上操作,直到所有的数排序结束(外循环共n-1轮)(3)若要提高效率,可

    13、以改变内循环次或加上标志位的方法,#include “stdio.h” main() int a10, i, j, temp;for (i=0; iaj+1) temp=aj; aj=aj+1;aj+1=temp;for (i=0; in-1;i+) printf(“%5d”, ai); ,/* 可改为 for(j=0; jn-1-i; j+) */,设有N个人围坐在圆桌周围,从每个位置开始用自然数进行编码为1、2、3、N。然后成编号为K的人从1开始报数,数到M的人便出列;下一个人(第M1个)人由从一开始报数,数到M的人便使第二个出列的人。如此下去,直到最后一个人出列为止。要求输出这个序列的顺序。,a i =1 在位置上 a i =0 不在位置上,已出列,sum=0 若sum=0 一人出列,打印其位置,sum清0,main() int j, k=0,sum=0;int a21;for (i=1;i21;i+) a i =1;while (k20) for ( j=1; j21; j+ ) sum+=a j ;if (sum=7) printf(“%6d”, j); a j =0; sum=0;k+; ,

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:c语言经典问题.ppt
    链接地址:https://www.docduoduo.com/p-4224521.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开