c语言期末复习例题及其程序Word格式.docx
《c语言期末复习例题及其程序Word格式.docx》由会员分享,可在线阅读,更多相关《c语言期末复习例题及其程序Word格式.docx(30页珍藏版)》请在冰豆网上搜索。
%d-%d-%d"
&
n,&
y,&
r);
if(y==1)
day=r;
if(y==2)
day=31+r;
if(y==3)
day=31+28+r;
if(y==4)
day=31+28+31+r;
if(y==5)
day=31+28+31+30+r;
if(y==6)
day=31+28+31+30+31+r;
if(y==7)
day=31+28+31+30+31+30+r;
if(y==8)
day=31+28+31+30+31+30+31+r;
if(y==9)
day=31+28+31+30+31+30+31+31+r;
if(y==10)
day=31+28+31+30+31+30+31+31+30+r;
if(y==11)
day=31+28+31+30+31+30+31+31+30+31+r;
if(y==12)
day=31+28+31+30+31+30+31+31+30+31+30+r;
if(y>
=3&
&
(n%4==0&
y%100!
=0||y%400==0))
day=day+1;
这天是该年的第%d天\n"
day);
}
方法二:
intn,y,r,day,i;
day=0;
for(i=1;
i<
=y-1;
i++)
{
switch(i)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:
day=day+31;
break;
case4:
case6:
case9:
case11:
day=day+30;
case2:
day=day+28;
}
}
day+r);
方法三:
intmonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
day=day+month[i-1];
n%100!
=0||n%400==0))
2.任意输入一个起始年月日,再输入一个终止年月日,计算这2天之间一共有多少天?
分析:
1.数据部分:
该程序需要输入变量start_n,start_y,start_r,end_n,end_y,end_r等变量。
(此处略去一些变量暂时不写)
2.算法
1)定义变量
2)输入一个起始年月日,再输入一个终止年月日
3)分2大类讨论:
(1)起始和终止为同年
(2)起始和终止为非同年
4)分类计算为同年的计算
5)分类计算为非同年的计算
6)输出结果
intstart_n,start_y,start_r,end_n,end_y,end_r;
inti,s1,s2,day,s3;
intyf[12]={31,28,31,30,31,30,31,31,30,31,30,31};
输入一个起始年月日(格式必须如2000-01-09):
start_n,&
start_y,&
start_r);
输入一个终止年月日(格式必须如2000-01-09):
end_n,&
end_y,&
end_r);
if(start_n==end_n)
s1=0;
for(i=1;
=start_y-1;
s1=s1+yf[i-1];
s1=s1+start_r;
if(start_n%4==0&
start_n%100!
=0||start_n%400==0)
s1=s1+1;
s2=0;
=end_y-1;
s2=s2+yf[i-1];
s2=s2+end_r;
if(end_n%4==0&
end_n%100!
=0||end_n%400==0)
s2=s2+1;
day=s2-s1+1;
printf("
这2天之间一共有%d天\n"
else
s1=366-s1+1;
else
s1=365-s1+1;
for(i=start_n+1;
=end_n-1;
if(i%4==0&
i%100!
=0||i%400==0)
s2=s2+366;
else
s2=s2+365;
s3=0;
s3=s3+yf[i-1];
s3=s3+end_r;
s3=s3+1;
day=s1+s2+s3;
3.任意输入一个24小时制的时间(例如23:
15),要求输出与之对应的12小时制的时间(例如11:
15PM)。
inthour,minute;
任意输入一个24小时制的时间,必须格式是(XX:
XX):
%d:
%d"
hour,&
minute);
while(hour<
0||hour>
=24||minute<
0||minute>
60)
你所输入的24小时制的时间有误,请你重新输入,必须格式是(XX:
scanf("
/*因为24小时制的时间小时范围是0-23,,1小时制的时间小时范围是1-12*/
/*我把时间处理分为四个部分:
小时、:
、分钟、AM/PM*/
if(hour==0)
12"
if(hour>
=1&
hour<
=9)
0%d"
hour);
=10&
=11)
if(hour==12)
=13&
=21)
hour-12);
=22&
=23)
:
if(minute>
=0&
minute<
minute);
=59)
AM\n"
=12&
PM\n"
4.任意输入一个正整数,判断它属于下列哪种情况之一
a)能被3,5,7同时整除
b)只能被其中的2个数字整除,但是必须指出具体是哪2个数字整除
c)只能被其中的1个数字整除,但是必须指出具体是哪1个数字整除
d)不能被3,5,7中任意一个数字整除
intx,i;
任意输入一个正整数给x:
x);
while(x<
=0)
输入的是一个非正整数,请重新输入一个值给x:
for(i=3;
=7;
i=i+2)
if(x%i==0)
printf("
%d能被%d整除\n"
x,i);
%d不能被%d整除\n"
intx;
if(x%3==0&
x%5==0&
x%7==0)
%d能被3,5,7整除\n"
x);
elseif(x%3==0&
x%5==0)
%d只能被3,5整除\n"
elseif(x%5==0&
%d只能被5,7整除\n"
%d只能被3,7整除\n"
elseif(x%3==0)
%d只能被3整除\n"
elseif(x%5==0)
%d只能被5整除\n"
elseif(x%7==0)
%d只能被7整除\n"
else
%d不能被3,5,7中任意一个数字整除\n"
intx,a,b,c;
a=x%3;
b=x%5;
c=x%7;
switch(a)
case0:
%d能被3整除\n"
default:
printf("
%d不能被3整除\n"
switch(b)
%d能被5整除\n"
%d不能被5整除\n"
switch(c)
%d能被7整除\n"
%d不能被7整除\n"
}
一.程序设计题:
1.请输入两个整数,求两个数之间所有整数之和,例如:
输入1,3,输出结果为:
6。
请编写程序实现。
2.求fibonacci数列40个数。
这个数列有如下特点:
第1,2两个数为1,1。
从第3个数开始,该数是其前面两个数之和。
(要求不能使用数组完成!
)
3.给一个不多于5位的正整数,要求:
一、求它是几位数,二、逆序打印出各位数字。
4.输出所有“水仙花”数,所谓“水仙花”数是指一个3位数,其各位数字立方和等于该数本身。
例如:
153就是一个水仙花数。
153=13+53+33
5.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
6.求s=1+12+123+1234+……+123…n的值,其中n是由键盘输入。
输入输入n=5s=1+12+123+1234+12345(此时共有5个数相加)。
7.请编写程序实现功能:
从3个红球,5个白球,6个黑球中任意取出8个球,其中必须要有白球,请输出所有的方案。
8.请编写程序实现功能:
统计0-9可以组成多少个没有重复的3位偶数。
9.输入两个正整数m和n,求其最大公约数和最小公倍数。
10.请编写程序实现功能:
求1000之内的所有完全数。
(说明:
一个数如果恰好等于它的因子之和(除自身外),则该数为完全数。
例如6=1+2+3,6为完全数)
11.请编写程序实现功能:
从键盘上输入6名学生的5门成绩,分别统计出每个学生的平均成绩和总成绩,并输出。
12.有一分数序列:
2/1,3/2,5/3,8/5,13/8,21/13,……….求出这个序列的前20项之和。
13.两个羽毛球队进行比赛,各出3人。
甲队为A、B、C,3人,乙队为X、Y、Z,3人。
已抽签决定比赛名单。
有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Z比,请编程序找出3对赛手的名单
14.编写程序,打印出如下图案(菱形)
*
***
*****
*******
15.求1+2!
+...+20!
的和
1.输入两个正整数m和n,求其最大公约数和最小公倍数。
任意2个数字x与y,最大公约数的最大可能取值是2个中的较小者,最大公约数的最小可能取值是1,如果从范围min—〉1去寻找公约数,所找到的第一个公约数就肯定是最大公约数,并且停止寻找。
寻找条件是该范围内的数字必须满足和x,y之间是整除关系。
intx,y,i,min;
任意输入一个正整数给y:
y);
0||y<
0)
输入有误,请重新输入\n"
重新输入一个正整数给x:
重新输入一个正整数给y:
if(x>
y)
min=y;
min=x;
for(i=min;
i>
=1;
i--)
if(x%i==0&
y%i==0)
%d是最大公约数\n"
i);
break;
%d是最小公倍数\n"
x*y/i);
2.有一本教材页码符号一共有6897个字符,计算该书一共有多少页?
比如:
99就是2个数字字符。
intn,s;
n=0;
/*页数*/
s=0;
/*数符总数*/
while
(1)
n++;
if(n>
n<
s=s+1;
=99)
s=s+2;
=100&
=999)
s=s+3;
=1000&
=9999)
s=s+4;
if(s==6897)
该书一共有%d页\n"
n);
3.任意输入一个四位数字。
然后做一下操作:
(1)将该四位数字进行分解。
(2)求得由该四位数字重新组成的一个新的四位数字的最大值和最小值
(3)然后做这个2个值的差,得到一个新的数字。
(4)回到步骤
(1),重复上述操作。
将会到一个特别的数字。
intx,i,j,q,b,s,g,t,min,max;
任意输入一个四位数:
1000||x>
9999)
你所输入的不是一个四位数,请重新输入:
for(j=1;
j<
=20;
j++)/*控制以下重复作20次*/
q=x/1000;
/*千位*/
b=x/100%10;
/*百位*/
s=x/10%10;
/*十位*/
g=x%10;
/*个位*/
=3;
i++)/*作q,b,s,g四个数字的从小到大的排序*/
if(q>
b)
{t=q;
q=b;
b=t;
if(b>
s)
{t=b;
b=s;
s=t;
if(s>
g)
{t=s;
s=g;
g=t;
min=q*1000+b*100+s*10+g;
max=g*1000+s*100+b*10+q;
x=max-min;
输出2个数字的差:
%d\n"
3.输入两个正整数m和n,求其最大公约数和最小公倍数。
4.有一本教材页码符号一共有6897个字符,计算该书一共有多少页?