C语言经典习题与解答.docx

上传人:b****5 文档编号:8043496 上传时间:2023-01-28 格式:DOCX 页数:53 大小:49KB
下载 相关 举报
C语言经典习题与解答.docx_第1页
第1页 / 共53页
C语言经典习题与解答.docx_第2页
第2页 / 共53页
C语言经典习题与解答.docx_第3页
第3页 / 共53页
C语言经典习题与解答.docx_第4页
第4页 / 共53页
C语言经典习题与解答.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

C语言经典习题与解答.docx

《C语言经典习题与解答.docx》由会员分享,可在线阅读,更多相关《C语言经典习题与解答.docx(53页珍藏版)》请在冰豆网上搜索。

C语言经典习题与解答.docx

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计算。

因此如果发件人发送重达的包裹,就需要缴纳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(i=1;i<=20;i++)

for(j=1;j<=33;j++)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1