c语言期末复习例题及其程序.docx
- 文档编号:4957102
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:30
- 大小:23.37KB
c语言期末复习例题及其程序.docx
《c语言期末复习例题及其程序.docx》由会员分享,可在线阅读,更多相关《c语言期末复习例题及其程序.docx(30页珍藏版)》请在冰豆网上搜索。
c语言期末复习例题及其程序
1.回顾s=1+2+3+……+100
2.求s=1+11+111+……+1111111
3.任意输入一个正整数给a,再输入一个正整数给n,计算s=a+aa+aaa+……+a…..a(n个)
4.求s=1+12+123+1234+……+1234567
5.任意输入一个正整数给n,计算s=1+12+123+……+123….n(n个)
1.求s=1!
+2!
+3!
+……+20!
2.求s=1!
+3!
+5!
+……+19!
3.任意输入一个数字给变量x,求sinx。
已知:
sinx=x-x3/3!
+x5/5!
+……直到某项的绝对值小雨10-6为止。
1.任意输入5个数字,要求从小到大排序输出。
2.任意输入10个数字,要求输出最大值和最小值。
(两种方法)
试验内容:
选择结构程序
任意输入一个三角形的三边的值(三边用a,b,c3个变量),然后判断能否构成三角形,如果可以,则计算出三角形的面积,再判断三角形的类型。
(1)按边分类
(2)按角度分类
海伦公式
l=(a+b+c)/2
s=sqrt(l*(l-a)*(l-b)*(l-c))
第五次实验课的内容
1.任意输入一个年月日,计算这天是该年的第几天?
方法一:
#include
voidmain()
{
intn,y,r,day;
printf("任意输入一个年月日:
");
scanf("%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;
printf("这天是该年的第%d天\n",day);
}
方法二:
#include
voidmain()
{
intn,y,r,day,i;
printf("任意输入一个年月日:
");
scanf("%d-%d-%d",&n,&y,&r);
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;break;
case2:
day=day+28;break;
}
}
if(y>=3&&(n%4==0&&y%100!
=0||y%400==0))
day=day+1;
printf("这天是该年的第%d天\n",day+r);
}
方法三:
#include
voidmain()
{
intn,y,r,day,i;
intmonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
printf("任意输入一个年月日:
");
scanf("%d-%d-%d",&n,&y,&r);
day=0;
for(i=1;i<=y-1;i++)
{
day=day+month[i-1];
}
if(y>=3&&(n%4==0&&n%100!
=0||n%400==0))
day=day+1;
printf("这天是该年的第%d天\n",day+r);
}
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)输出结果
#include
voidmain()
{
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};
printf("输入一个起始年月日(格式必须如2000-01-09):
");
scanf("%d-%d-%d",&start_n,&start_y,&start_r);
printf("输入一个终止年月日(格式必须如2000-01-09):
");
scanf("%d-%d-%d",&end_n,&end_y,&end_r);
if(start_n==end_n)
{
s1=0;
for(i=1;i<=start_y-1;i++)
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;
for(i=1;i<=end_y-1;i++)
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",day);
}
else
{
s1=0;
for(i=1;i<=start_y-1;i++)
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;
s1=366-s1+1;
}
else
s1=365-s1+1;
s2=0;
for(i=start_n+1;i<=end_n-1;i++)
{
if(i%4==0&&i%100!
=0||i%400==0)
s2=s2+366;
else
s2=s2+365;
}
s3=0;
for(i=1;i<=end_y-1;i++)
s3=s3+yf[i-1];
s3=s3+end_r;
if(end_n%4==0&&end_n%100!
=0||end_n%400==0)
s3=s3+1;
day=s1+s2+s3;
printf("这2天之间一共有%d天\n",day);
}
}
3.任意输入一个24小时制的时间(例如23:
15),要求输出与之对应的12小时制的时间(例如11:
15PM)。
#include
voidmain()
{
inthour,minute;
printf("任意输入一个24小时制的时间,必须格式是(XX:
XX):
");
scanf("%d:
%d",&hour,&minute);
while(hour<0||hour>=24||minute<0||minute>60)
{
printf("你所输入的24小时制的时间有误,请你重新输入,必须格式是(XX:
XX):
");
scanf("%d:
%d",&hour,&minute);
}
/*因为24小时制的时间小时范围是0-23,,1小时制的时间小时范围是1-12*/
/*我把时间处理分为四个部分:
小时、:
、分钟、AM/PM*/
if(hour==0)
printf("12");
if(hour>=1&&hour<=9)
printf("0%d",hour);
if(hour>=10&&hour<=11)
printf("%d",hour);
if(hour==12)
printf("12");
if(hour>=13&&hour<=21)
printf("0%d",hour-12);
if(hour>=22&&hour<=23)
printf("%d",hour-12);
printf(":
");
if(minute>=0&&minute<=9)
printf("0%d",minute);
if(minute>=10&&minute<=59)
printf("%d",minute);
if(hour>=0&&hour<=11)
printf("AM\n");
if(hour>=12&&hour<=23)
printf("PM\n");
}
4.任意输入一个正整数,判断它属于下列哪种情况之一
a)能被3,5,7同时整除
b)只能被其中的2个数字整除,但是必须指出具体是哪2个数字整除
c)只能被其中的1个数字整除,但是必须指出具体是哪1个数字整除
d)不能被3,5,7中任意一个数字整除
方法一:
#include
voidmain()
{
intx,i;
printf("任意输入一个正整数给x:
");
scanf("%d",&x);
while(x<=0)
{
printf("输入的是一个非正整数,请重新输入一个值给x:
");
scanf("%d",&x);
}
for(i=3;i<=7;i=i+2)
{
if(x%i==0)
printf("%d能被%d整除\n",x,i);
else
printf("%d不能被%d整除\n",x,i);
}
}
方法二:
#include
voidmain()
{
intx;
printf("任意输入一个正整数给x:
");
scanf("%d",&x);
while(x<=0)
{
printf("输入的是一个非正整数,请重新输入一个值给x:
");
scanf("%d",&x);
}
if(x%3==0&&x%5==0&&x%7==0)
printf("%d能被3,5,7整除\n",x);
elseif(x%3==0&&x%5==0)
printf("%d只能被3,5整除\n",x);
elseif(x%5==0&&x%7==0)
printf("%d只能被5,7整除\n",x);
elseif(x%3==0&&x%7==0)
printf("%d只能被3,7整除\n",x);
elseif(x%3==0)
printf("%d只能被3整除\n",x);
elseif(x%5==0)
printf("%d只能被5整除\n",x);
elseif(x%7==0)
printf("%d只能被7整除\n",x);
else
printf("%d不能被3,5,7中任意一个数字整除\n",x);
}
方法三:
#include
voidmain()
{
intx,a,b,c;
printf("任意输入一个正整数给x:
");
scanf("%d",&x);
while(x<=0)
{
printf("输入的是一个非正整数,请重新输入一个值给x:
");
scanf("%d",&x);
}
a=x%3;
b=x%5;
c=x%7;
switch(a)
{
case0:
printf("%d能被3整除\n",x);break;
default:
printf("%d不能被3整除\n",x);break;
}
switch(b)
{
case0:
printf("%d能被5整除\n",x);break;
default:
printf("%d不能被5整除\n",x);break;
}
switch(c)
{
case0:
printf("%d能被7整除\n",x);break;
default:
printf("%d不能被7整除\n",x);break;
}
}
一.程序设计题:
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!
+3!
+...+20!
的和
1.输入两个正整数m和n,求其最大公约数和最小公倍数。
分析:
任意2个数字x与y,最大公约数的最大可能取值是2个中的较小者,最大公约数的最小可能取值是1,如果从范围min—〉1去寻找公约数,所找到的第一个公约数就肯定是最大公约数,并且停止寻找。
寻找条件是该范围内的数字必须满足和x,y之间是整除关系。
#include
voidmain()
{
intx,y,i,min;
printf("任意输入一个正整数给x:
");
scanf("%d",&x);
printf("任意输入一个正整数给y:
");
scanf("%d",&y);
while(x<0||y<0)
{
printf("输入有误,请重新输入\n");
printf("重新输入一个正整数给x:
");
scanf("%d",&x);
printf("重新输入一个正整数给y:
");
scanf("%d",&y);
}
if(x>y)
min=y;
else
min=x;
for(i=min;i>=1;i--)
{
if(x%i==0&&y%i==0)
{
printf("%d是最大公约数\n",i);
break;
}
}
printf("%d是最小公倍数\n",x*y/i);
}
2.有一本教材页码符号一共有6897个字符,计算该书一共有多少页?
比如:
99就是2个数字字符。
#include
voidmain()
{
intn,s;
n=0;/*页数*/
s=0;/*数符总数*/
while
(1)
{
n++;
if(n>=1&&n<=9)
s=s+1;
if(n>=10&&n<=99)
s=s+2;
if(n>=100&&n<=999)
s=s+3;
if(n>=1000&&n<=9999)
s=s+4;
if(s==6897)
{
printf("该书一共有%d页\n",n);
break;
}
}
}
3.任意输入一个四位数字。
然后做一下操作:
(1)将该四位数字进行分解。
(2)求得由该四位数字重新组成的一个新的四位数字的最大值和最小值
(3)然后做这个2个值的差,得到一个新的数字。
(4)回到步骤
(1),重复上述操作。
将会到一个特别的数字。
#include
voidmain()
{
intx,i,j,q,b,s,g,t,min,max;
printf("任意输入一个四位数:
");
scanf("%d",&x);
while(x<1000||x>9999)
{
printf("你所输入的不是一个四位数,请重新输入:
");
scanf("%d",&x);
}
for(j=1;j<=20;j++)/*控制以下重复作20次*/
{
q=x/1000;/*千位*/
b=x/100%10;/*百位*/
s=x/10%10;/*十位*/
g=x%10;/*个位*/
for(i=1;i<=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;
printf("输出2个数字的差:
%d\n",x);
}
}
3.输入两个正整数m和n,求其最大公约数和最小公倍数。
分析:
任意2个数字x与y,最大公约数的最大可能取值是2个中的较小者,最大公约数的最小可能取值是1,如果从范围min—〉1去寻找公约数,所找到的第一个公约数就肯定是最大公约数,并且停止寻找。
寻找条件是该范围内的数字必须满足和x,y之间是整除关系。
#include
voidmain()
{
intx,y,i,min;
printf("任意输入一个正整数给x:
");
scanf("%d",&x);
printf("任意输入一个正整数给y:
");
scanf("%d",&y);
while(x<0||y<0)
{
printf("输入有误,请重新输入\n");
printf("重新输入一个正整数给x:
");
scanf("%d",&x);
printf("重新输入一个正整数给y:
");
scanf("%d",&y);
}
if(x>y)
min=y;
else
min=x;
for(i=min;i>=1;i--)
{
if(x%i==0&&y%i==0)
{
printf("%d是最大公约数\n",i);
break;
}
}
printf("%d是最小公倍数\n",x*y/i);
}
4.有一本教材页码符号一共有6897个字符,计算该书一共有多少页?
比如:
99就是2个数字字符。
#include
voidmain()
{
intn,s;
n=0;/*页数*/
s=0;/*数符总数*/
while
(1)
{
n++;
if(n>=1&&n<=9)
s=s+1;
if(n>=10&&n<=99)
s=s+2;
if(n>=100&&n<=999)
s=s+3;
if(n>=1000&&n<=9999)
s=s+4;
if(s==6897)
{
printf("该书一共有%d页\n",n);
break;
}
}
}
3.任意输入一个四位数字。
然后做一下操作:
(1)将该四位数字进行分解。
(2)求得由该四位数字重新组成的一个新的四位数字的最大值和最小值
(3)然后做这个2个值的差,得到一个新的数字。
(4)回到步骤
(1),重复上述操作。
将会到一个特别的数字。
#include
voidmain()
{
intx,i,j,q,b,s,g,t,min,max;
printf("任意输入一个四位数:
");
scanf("%d",&x);
while(x<1000||x>9999)
{
printf("你所输入的不是一个四位数,请重新输入:
");
scanf("%d",&x);
}
for(j=1;j<=20;j++)/*控制以下重复作20次*/
{
q=x/1000;/*千位*/
b=x/100%10;/*百位*/
s=x/10%10;/*十位*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 期末 复习 例题 及其 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)