C语言经典习题与解答.docx
- 文档编号:3507398
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:29
- 大小:34.67KB
C语言经典习题与解答.docx
《C语言经典习题与解答.docx》由会员分享,可在线阅读,更多相关《C语言经典习题与解答.docx(29页珍藏版)》请在冰豆网上搜索。
C语言经典习题与解答
本学期《程序设计基础》课程实行上机考核,现将考核有关事项通知如下:
(1)考核时间:
本学期最后一次上机时间为机试。
(2)考核内容:
主要是算法设计与实现。
考题来自本学期布置的作业、例题及一些补充的题目。
(3)考试形式:
机试前进入机房时,每人随机抽取一道题(同一个组的同学保证不抽到同一题),然后上机编程,调试通过后报告监考人员审核,审核通过后将源程序拷贝到监考人员U盘上,然后可以离开机房。
源程序文件明必须是“学号姓名.cpp”,如“2012216827王梓丞.cpp”。
(4)考试要求:
机试时考试规则同课堂考试一致,不允许带书、纸张等。
不能携带任何可用计算机处理的软件或数据(不允许任何私人携带的U盘、磁盘或计算器),不能携带任何类型的通讯工具,包括无线电接收器、移动电话。
(5)考试成绩:
本次机试成绩将在《程序设计基础》课程成绩中占25%的比重。
(6)其它有关事项由主考教师和监考人员负责处理。
附:
考试题集
1.学校曾经组织一次“程序设计大奖赛”,规定本学期序设计”课程的成绩可以因为在大奖赛上获奖而加5分,总分不超过100分。
编程序“程,输入某同学的考试成绩,回答是否在竞赛中获奖,计算并输出该某同学的程序设计课成绩。
#include"stdio.h"
intmark;
charm;
voidmain(){
printf("请输入卷面成绩:
",mark);
scanf("%d",&mark);
getchar();
printf("请输入是否获奖,是y,否n:
");
m=getchar();
if(m=='y')
mark=mark+5;
if(mark>100)
mark=100;
printf("你的最后成绩:
%d\n",mark);
}
2.编写一个程序,用户输入年份及月份两个数据,程序输出该月份的天数。
(提示:
对2月要考虑是否闰年,闰年年份要么能被4整除且不能被100整除,要么能被400整除,除此之外都不是闰年)。
#include"stdio.h"
intyear,month;
intdays(intyear,intmonth)
{intk;
if((year%4==0)&&(year%100!
=0)||(year%400==0))
{
if(month==2)k=1;
if(month==4||month==6||month==9||month==11)k=2;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)k=3;
}
else
{
if(month==2)k=4;
if(month==4||month==6||month==9||month==11)k=5;if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)k=6;
}
switch(k)
{
case1:
printf("29days\n");break;
case2:
printf("30days\n");break;
case3:
printf("31days\n");break;
case4:
printf("28days\n");break;
case5:
printf("30days\n");break;
case6:
printf("31days\n");break;
}
return0;
}
voidmain(){
printf("pleaseinputtheyearandmonth:
",year,month);
scanf("%d%d",&year,&month);
days(year,month);
}
3.求一元二次方程ax2+bx+c=0的根。
(要考虑a、b、c三个系数不同的取值)
#include
#include
voidmain(){
floata,b,c,delta;
printf("inputthethreecoefficientsoftheequation(A,B,C):
");
scanf("%f%f%f",&a,&b,&c);
if(a!
=0){
delta=b*b-4*a*c;
if(delta>0)
printf("x1=%f,x2=%f\n",(-b+sqrt(delta))/(2*a),(-b-sqrt(delta))/(2*a));
else
if(delta==0)
printf("x1=x2=%f\n",-b/(2*a));
else
printf("x1=%f+%fi,x2=%f-%fi\n",-b/(2*a),sqrt(-delta)/(2*a),-b/(2*a),sqrt(-delta)/(2*a));
}else
if(b!
=0)
printf("x=%f\n",-c/b);
else
if(c==0)
printf("0=0!
\n");
else
printf("%f=0\n",c);
getchar();getchar();
}
4.学校曾经组织一次“程序设计大奖赛”,规定本学期“程序设计”课程的成绩可以根据大奖赛的成绩适度加分。
加分规则是:
参赛者加5分,三等奖加15分,二等奖加20分,一等奖加30分,总分不超过100分。
编程序,输入某同学的考试成绩,回答在竞赛中获奖等级,计算并输出该某同学的程序设计课成绩。
#include
intwin;
intmark;
voidmain(void){
printf("输入你的考试成绩:
");
scanf("%d",&mark);
printf("请选择你参加程序设计大奖赛情况\n");
printf("(0:
未参赛,1:
参赛,2:
三等奖,3:
二等奖,4:
一等奖):
");
scanf("%d",&win);
switch(win){
case0:
break;
case1:
mark=mark+5;break;
case2:
mark=mark+15;break;
case3:
mark=mark+20;break;
case4:
mark=mark+30;break;
}
if(mark>100)
mark=100;
printf("你的最后成绩是:
%d\n",mark);
getchar();getchar();
}
5.高速公路每公里的收费标准按不同种类汽车如下:
小汽车(car)0.50元
卡车(truck)1.00元
大客车(bus)1.50元
编程序,为某高速公路收费站计算各种车辆的收费额。
#include"stdio.h"
enumtsort{car,truck,bus}sort;
inti;
floatmileage,price;
voidmain(){
printf("pleasechoose(0.car1.truck2.bus):
");
scanf("%d",&i);
switch(i){
case0:
sort=car;break;
case1:
sort=truck;break;
case2:
sort=bus;
}
printf("pleaseinputmileage:
");
scanf("%f",&mileage);
switch(sort){
casecar:
price=0.50;break;
casetruck:
price=1.00;break;
casebus:
price=1.50;
}
printf("cost=%.2f\n",price*mileage);
getchar();getchar();
}
6.设计一个模拟单步计算器的程序,设该计算器只能作加、减、乘、除运算。
用户输入形如
m#n
的算式,其中m、n为运算数,#为运算符。
(需考虑运算符不合法,及除数为0的情况)
#include"stdio.h"
voidmain(){
floata,b;
charw;
printf("pleaceinpute#e:
");
scanf("%f",&a);
scanf("%c",&w);
scanf("%f",&b);
switch(w){
case'+':
a=a+b;break;
case'-':
a=a-b;break;
case'*':
a=a*b;break;
case'/':
a=a/b;
}
printf("%.2f\n",a);
getchar();getchar();
}
7.编写程序,输入一个4位自然数n,判断n是否是降序数。
降序数是指对于n=d1d2…dk有:
d1≥d2≥…≥dk
#include"stdio.h"
voidmain(){
intnumber,a,b,c,d;
printf("pleaseinputanumber:
",number);
scanf("%d",&number);
a=number/1000;
b=(number/100)%10;
c=(number%100)/10;
d=number%10;
if((a>=b)&&(b>=c)&&(c>=d))
printf("这个数是降序数");
else
printf("这个数不是降序数");
getchar();getchar();
}
8.编写程序,输入一个5位自然数n,判断n是否对称数。
对称数是指正序和反序读都相等的整数,如96769为对称数。
#include"stdio.h"
booljudge(intnumber[]){
inti,j;
j=0;
while(number[j+1]!
=0)j++;
i=0;
while(i if(number[i]! =number[j]) returnfalse; i++;j--; } returntrue; } main(){ inti,number[5]; boolflag; printf("pleaseanumber: "); for(i=0;i<=4;i++){ scanf("%d",&number[i]);} flag=judge(number); if(flag=true)printf("y"); elseprintf("n"); getchar();getchar(); } 9.编写程序,判断给定的3位数是否为Armstrong数。 Armstrong数是指其值等于它每位数字立方和的数,如153就是一个Armstrong数。 #include"stdio.h" #include"math.h" intnumber,a,b,c; voidmain(){ printf("请输入一个三位数: "); scanf("%d",&number); c=number%10; b=(number/10)%10; a=number/100; if(number==a*a*a+b*b*b+c*c*c) printf("这个数是Armstrong数! "); else printf("这个数不是Armstrong数! "); } 10.编写程序,输入一个整数,判断它能否被3、5、7整数,并输出如下信息。 (1)能同时被3、5、7整数。 (2)能同时被两个数整数,并指明是被哪两个数整除。 (3)能被一个数整数,并指明这是哪个数。 (4)不能被所有3个数整除。 #include"stdio.h" #include"math.h" intnumber,i; voidmain(){ printf("请输入一个整数: "); scanf("%d",&number); if(number%105==0){i=1;gotostate;} if(number%3! =0&&number%35==0){i=2;gotostate;} if(number%5! =0&&number%21==0){i=3;gotostate;} if(number%7! =0&&number%15==0){i=4;gotostate;} if(number%3==0&&number%35! =0){i=5;gotostate;} if(number%5==0&&number%21! =0){i=6;gotostate;} if(number%7==0&&number%15! =0){i=7;gotostate;} if(number%105! =0){i=8;gotostate;} state: i; switch(i){ case1: printf("这个数可以同时被3,5,7整除! ");break; case2: printf("这个数只可以被5,7整除! ");break; case3: printf("这个数只可以被3,7整除! ");break; case4: printf("这个数只可以被3,5整除! ");break; case5: printf("这个数只可以被3整除! ");break; case6: printf("这个数只可以被5整除! ");break; case7: printf("这个数只可以被7整除! ");break; case8: printf("这个数不可以被3,5,7整除! ");break; } } 11.邮局寄包裹的费用是根据包裹的重量来收取的。 一个重量为2kg或低于2kg的包裹收取3.25元。 高于2kg的包裹,超出部分每千克收取1.05元,超出部分不足1kg按1kg计算。 因此如果发件人发送重达5.63kg的包裹,就需要缴纳7.45元。 编写程序,输入包裹的重量,计算并输出发件人须缴纳的费用。 #include"stdio.h" #include"math.h" floatmoney,kilo; voidmain(){ printf("请输入邮寄包裹的重量(单位: 千克): "); scanf("%f",&kilo); if(kilo<=2.0) money=3.25; else money=3.25+((int)((kilo-2.0)+1.0)*1.05); printf("需要邮费money=%f\n",money); } 12.一个临时照顾孩子的人的收费标准是: 18: 00到21: 30间每小时2元,21: 30到午夜间每小时4元,18: 00以前和午夜以后不照顾孩子。 编写程序,输入开始时间和结束时间,计算并输出某一个雇工的薪酬。 程序应检查无效的开始和结束时间。 #include"stdio.h" #include"math.h" inta,b,c,d; charm,n; floatmoney; voidmain(){ printf("请输入开始时间starttime(时间在18: 30和24: 00之间)="); scanf("%d%c%d",&a,&m,&b); getchar(); printf("请输入结束时间endtime(时间在18: 30和24: 00之间)="); scanf("%d%c%d",&c,&n,&d); getchar(); if(a<21&&c<=21&&d<=30) {if(d>=b) money=((c-a)+(float)(d-b)/60.0)*2.0; else money=((c-1-a)+(float)((d+60.0-b)/60.0))*2.0; } else{ if(a<21&&c>21)money=((20-a)+(float)((90-b)/60.0))*2.0+((c-21)+(float)((d+60-30)/60.0))*4.0; else money=((c-1-a)+(float)((d+60-b)/60.0))*4.0; } printf("money=%f\n",money); } 13.编写程序,按下述公式求自然对数底e的近似值。 14.编写程序,统计以100位结束符的整数输入流中-1、0、1的出现次数并将其输出。 #include #definen100 voidmain(){ inti,j,k,num; i=0; j=0; k=0; printf("pleaseinputaninteger: "); scanf("%d",&num); while(num! =n){ switch(num){ case-1: i++;break; case0: j++;break; case1: k++; } printf("pleaseinputaninteger: "); scanf("%d",&num); } printf("numberof-1: %d\n",i); printf("numberof0: %d\n",j); printf("numberof1: %d\n",k); } 15.编写程序,打印“99乘法表” 11 224 3369 4481216 5510152025 661218243036 77142128354249 8816243240485664 991827364554637281 *123456789 #include"stdio.h" voidmain(){ inti,j; for(i=1;i<10;i++){ printf("%4d",i); for(j=1;j<=i;j++) printf("%4d",i*j); printf("\n"); } printf("%4c",'*'); for(i=1;i<10;i++) printf("%4d",i); getchar(); } 16.编写程序,打印200以内的素数,要求每行输出10个数。 #include"stdio.h" voidmain(){ inti,j; boolflag; for(i=2;i<=200;i++){ flag=true; for(j=i/2;j>=2;j--) if(i%j==0) flag=false; if(flag) printf("%5d\t",i); } getchar(); } 17.编写程序,输出如下序列的前50项,此序列的第一项为0;第二项为1;以后的奇数项为其前两项之和;偶数项为其前两项之差。 要求每行输出10个数。 #include"stdio.h" #include"math.h" voidmain(){ intnumber[50]={0,1}; inti=3; do{ if(i%2==1) number[i]=number[i-1]+number[i-2]; else number[i]=number[i-1]-number[i-2]; i++; }while(i<=50); for(i=1;i<=50;i++) printf("%5d\t",number[i]); } 18.编写程序,输入正整数N,计算r1! +r2! +…+rn! 并输出。 其中N=r1r2…rn。 #include"stdio.h" #include"math.h" intjiecheng(intn){ intk; if(n==0||n==1) n=1; else{ for(k=n-1;k>=1;k--) n=n*k; } returnn; } voidmain(){ intnumber,sum=0,i,j,k; printf("请输入一个整数: ",number); scanf("%d",&number); j=number; do{ i=j%10; k=j/10; j=k; sum=sum+jiecheng(i); }while(k! =0); printf("%d\n",sum); } 19.完数问题: 若有一数,其值等于它的因子之和,则该数称为完数。 例如,6的因子为、2、31,而6=1+2+3,故6是完数。 编程输出1000之内的所有完数及其因子。 20.把一张1元钞票换成1分、2分和5分的硬币,每种至少有1枚,问有多少种换法? #include"stdio.h" #include"math.h" inti,j,k; voidmain(){ for(i=1;i<=100;i++) for(j=1;j<=50;j++) for(k=1;k<=20;k++) {if(i+2*j+5*k==100) printf("一分的: %d两分的: %d五分的: %d\n",i,j,k); } } 21.斐波那契(Fibonacci)数列问题: Fibonacci数列递归定义为: x0=0, x1=1, xi+1=xi+xi-1,i=2,3,… 即从第二项开始,数列中的每一个元素等于前面两个元素之和。 编程输出前20项Fibonacci数。 (提示可以用递归或迭代两种方式编程) #include"stdio.h" #include"math.h" inti,fibonacci[20]={1,1}; voidmain(){ for(i=2;i<=19;i++) fibonacci[i]=fibonacci[i-1]+fibonacci[i-2]; for(i=0;i<=19;i++) printf("%5d\t",fibonacci[i]); } 22.公鸡5元1只,母鸡3元1只,小鸡1元3只,花了100元钱买100只鸡,问公鸡、母鸡、小鸡各多少只? #include"stdio.h" #include"math.h" inti,j,k; voidmain(){ for
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 经典 习题 解答