您好,欢迎访问三七文档
【程序4】题目:输入某年某月某日,判断这一天是这一年的第几天?1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。2.程序源代码:main(){intday,month,year,sum,leap;printf(\npleaseinputyear,month,day\n);scanf(%d,%d,%d,&year,&month,&day);switch(month)/*先计算某月以前月份的总天数*/{case1:sum=0;break;case2:sum=31;break;case3:sum=59;break;case4:sum=90;break;case5:sum=120;break;case6:sum=151;break;case7:sum=181;break;case8:sum=212;break;case9:sum=243;break;case10:sum=273;break;case11:sum=304;break;case12:sum=334;break;default:printf(dataerror);break;}sum=sum+day;/*再加上某天的天数*/if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/leap=1;elseleap=0;if(leap==1&&month2)/*如果是闰年且月份大于2,总天数应该加一天*/sum++;printf(Itisthe%dthday.,sum);}==============================================================【程序5】题目:输入三个整数x,y,z,请把这三个数由小到大输出。1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果xy则将x与y的值进行交换,然后再用x与z进行比较,如果xz则将x与z的值进行交换,这样能使x最小。2.程序源代码:main(){intx,y,z,t;scanf(%d%d%d,&x,&y,&z);if(xy){t=x;x=y;y=t;}/*交换x,y的值*/if(xz){t=z;z=x;x=t;}/*交换x,z的值*/if(yz){t=y;y=z;z=t;}/*交换z,y的值*/printf(smalltobig:%d%d%d\n,x,y,z);}==============================================================【程序8】题目:输出9*9口诀。1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。2.程序源代码:#includestdio.hmain(){inti,j,result;printf(\n);for(i=1;i10;i++){for(j=1;j10;j++){result=i*j;printf(%d*%d=%-3d,i,j,result);/*-3d表示左对齐,占3位*/}printf(\n);/*每一行后换行*/}}==============================================================【程序11】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....2.程序源代码:main(){longf1,f2;inti;f1=f2=1;for(i=1;i=20;i++){printf(%12ld%12ld,f1,f2);if(i%2==0)printf(\n);/*控制输出,每行四个*/f1=f1+f2;/*前两个月加起来赋值给第三个月*/f2=f1+f2;/*前两个月加起来赋值给第三个月*/}}==============================================================【程序12】题目:判断101-200之间有多少个素数,并输出所有素数。1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。2.程序源代码:#includemath.hmain(){intm,i,k,h=0,leap=1;printf(\n);for(m=101;m=200;m++){k=sqrt(m+1);for(i=2;i=k;i++)if(m%i==0){leap=0;break;}if(leap){printf(%-4d,m);h++;if(h%10==0)printf(\n);}leap=1;}printf(\nThetotalis%d,h);}==============================================================【程序13】题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。2.程序源代码:main(){inti,j,k,n;printf('waterflower'numberis:);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);}==============================================================【程序15】题目:利用条件运算符的嵌套来完成此题:学习成绩=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。1.程序分析:(ab)?a:b这是条件运算符的基本例子。2.程序源代码:main(){intscore;chargrade;printf(pleaseinputascore\n);scanf(%d,&score);grade=score=90?'A':(score=60?'B':'C');printf(%dbelongsto%c,score,grade);}==============================================================【程序17】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。1.程序分析:利用while语句,条件为输入的字符不为'\n'.2.程序源代码:#includestdio.hmain(){charc;intletters=0,space=0,digit=0,others=0;printf(pleaseinputsomecharacters\n);while((c=getchar())!='\n'){if(c='a'&&c='z'||c='A'&&c='Z')letters++;elseif(c=='')space++;elseif(c='0'&&c='9')digit++;elseothers++;}printf(allinall:char=%dspace=%ddigit=%dothers=%d\n,letters,space,digit,others);}==============================================================【程序18】题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。1.程序分析:关键是计算出每一项的值。2.程序源代码:main(){inta,n,count=1;longintsn=0,tn=0;printf(pleaseinputaandn\n);scanf(%d,%d,&a,&n);printf(a=%d,n=%d\n,a,n);while(count=n){tn=tn+a;sn=sn+tn;a=a*10;++count;}printf(a+aa+...=%ld\n,sn);}==============================================================【程序19】题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。1.程序分析:请参照程序--上页程序14.2.程序源代码:main(){staticintk[10];inti,j,n,s;for(j=2;j1000;j++){n=-1;s=j;for(i=1;i{if((j%i)==0){n++;s=s-i;k[n]=i;}}if(s==0){printf(%disawanshu,j);for(i=0;iprintf(%d,,k[i]);printf(%d\n,k[n]);}}}==============================================================【程序24】题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。1.程序分析:请抓住分子与分母的变化规律。2.程序源代码:main(){intn,t,number=20;floata=2,b=1,s=0;for(n=1;n=number;n++){s=s+a/b;t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/}printf(sumis%9.6f\n,s);}==============================================================【程序25】题目:求1+2!+3!+...+20!的和1.程序分析:此程序只是把累加变成了累乘。2.程序源代码:main(){floatn,s=0,t=1;for(n=1;n=20;n++){t*=n;s+=t;}printf(1+2!+3!...+20!=%e\n,s);}==============================================================【程序26】题目:利用递归方法求5!。1.程序分析:递归公式:fn=fn_1*4!2.程序源代码:#includestdio.hmain(){inti;intfact();for(i=0;i5;i++)printf(\40:%d!=%d\n,i,fact(i));}intfact(j)intj;{intsum;if(j==0)sum=1;elsesum=j*fact(j-1);returnsum;}==============================================================【程序30】题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。1.程序分析:同29例2.程序源代码:main(){longge,shi,qian,wan,x;scanf(%ld,&x);wan=x/10000;qian=x%10000/1000;shi=x%100/10;ge=x%10;if(ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/printf(thisnumberisahuiwen\n);elseprintf(thisnumberisnotahuiwen\n)
              三七文档所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
        
本文标题:C语言必背经典程序
链接地址:https://www.777doc.com/doc-5754017 .html