c语言机试经典编程题重点资料.docx
《c语言机试经典编程题重点资料.docx》由会员分享,可在线阅读,更多相关《c语言机试经典编程题重点资料.docx(46页珍藏版)》请在冰豆网上搜索。
![c语言机试经典编程题重点资料.docx](https://file1.bdocx.com/fileroot1/2023-6/9/86cbff28-d1c5-4fee-a133-d52f0d7b925c/86cbff28-d1c5-4fee-a133-d52f0d7b925c1.gif)
c语言机试经典编程题重点资料
本学期《程序设计基础》课程实行上机考核,现将考核有关事项通知如下:
(1)考核时间:
本学期最后一次上机时间为机试。
(2)考核内容:
主要是算法设计与实现。
考题来自本学期布置的作业、例题及一些补充的题目。
(3)考试形式:
机试前进入机房时,每人随机抽取一道题(同一个组的同学保证不抽到同一题),然后上机编程,调试通过后报告监考人员审核,审核通过后将源程序拷贝到监考人员U盘上,然后可以离开机房。
源程序文件明必须是“学号姓名。
cpp”,如“2012216827王梓丞。
cpp”.
(4)考试要求:
机试时考试规则同课堂考试一致,不允许带书、纸张等.不能携带任何可用计算机处理的软件或数据(不允许任何私人携带的U盘、磁盘或计算器),不能携带任何类型的通讯工具,包括无线电接收器、移动电话。
(5)考试成绩:
本次机试成绩将在《程序设计基础》课程成绩中占25%的比重。
(6)其它有关事项由主考教师和监考人员负责处理。
附:
考试题集
1.学校曾经组织一次“程序设计大奖赛”,规定本学期“程序设计"课程的成绩可以因为在大奖赛上获奖而加5分,总分不超过100分.编程序,输入某同学的考试成绩,回答是否在竞赛中获奖,计算并输出该某同学的程序设计课成绩。
#include〈stdio。
h>
voidmain(){
intm,n;
printf(”请输入考试成绩:
\n");
scanf("%d”,&m);
printf("请选择获奖情况:
1获奖;2未获奖\n”);
scanf("%d”,&n);
switch(n){
case1:
m=m+5;break;
case2:
m;
}
if(m>100)
m=100;
printf(”你的最终成绩为:
%d\n",m);
}
2.编写一个程序,用户输入年份及月份两个数据,程序输出该月份的天数.(提示:
对2月要考虑是否闰年,闰年年份要么能被4整除且不能被100整除,要么能被400整除,除此之外都不是闰年)。
#include〈stdio。
h>
intyear,a;
voidmain(){
printf(”请输入年份月份:
");
scanf("%d%d",&year,&a);
if(a==1||a==3||a==5||a==7||a==8||a==10||a==12)
printf(”这个月有31天\n");
else{
if(a==2){
if((year%4==0)&&(year%100!
=0)||(year%400==0))
printf("这个月有29天\n");
else
printf(”这个月有28天\n");
}
else
printf("这个月有30天\n”);
}
}
3.求一元二次方程ax2+bx+c=0的根。
(要考虑a、b、c三个系数不同的取值)
#include〈stdio.h〉
#include
voidmain(){
floata,b,c,d;
printf(”请输入一元二次方程的三个系数a,b,c:
\n”);
scanf("%f%f%f",&a,&b,&c);
if(a!
=0){
d=b*b—4*a*c;
if(d>0)
printf("x1=%f,x2=%f",(—b+sqrt(d))/2*a,(—b-sqrt(d)/2*a));
else
if(d==0)
printf(”x1=x2=%f",(-b)/2*a);
else
printf("x1=%f+%fi,x2=%f—%fi”,—b/2*a,sqrt(-d)/2*a,—b/2*a,sqrt(-d)/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);
}
4.学校曾经组织一次“程序设计大奖赛”,规定本学期“程序设计”课程的成绩可以根据大奖赛的成绩适度加分.加分规则是:
参赛者加5分,三等奖加15分,二等奖加20分,一等奖加30分,总分不超过100分.编程序,输入某同学的考试成绩,回答在竞赛中获奖等级,计算并输出该某同学的程序设计课成绩。
#include〈stdio。
h〉
voidmain(){
inta,b;
printf(”请输入你的考试成绩:
\n”);
scanf(”%d",&a);
printf("请选择你程序设计情况:
0未参加1参赛2三等奖3二等奖4一等奖\n”);
scanf("%d”,&b);
switch(b){
case0:
break;
case1:
a=a+5;break;
case2:
a=a+15;break;
case3:
a=a+20;break;
case4:
a=a+30;}
if(a>100)
a=100;
printf(”你的最终成绩为:
%d”,a);
}
5.高速公路每公里的收费标准按不同种类汽车如下:
小汽车(car)0。
50元
卡车(truck)1.00元
大客车(bus)1。
50元
编程序,为某高速公路收费站计算各种车辆的收费额。
#include〈stdio。
h〉
voidmain(){
floata,c;
intb;
printf("请选择车辆类型:
1小汽车;2卡车;3大客车\n”);
scanf("%d",&b);
printf(”请输入车辆行驶的公里数:
\n”);
scanf(”%f",&a);\
switch(b){
case1:
c=0.5*a;break;
case2:
c=1.0*a;break;
case3:
c=1.5*a;
}
printf(”收费额为:
%3f元”,c);
}
6.设计一个模拟单步计算器的程序,设该计算器只能作加、减、乘、除运算。
用户输入形如
m#n
的算式,其中m、n为运算数,#为运算符。
(需考虑运算符不合法,及除数为0的情况)
#include〈stdio.h〉
voidmain(){
floatm,n;
charch;
printf("请输入运算式:
m#n\n");
scanf("%f%c%f",&m,&ch,&n);
if((ch!
=’+')&&(ch!
='—’)&&(ch!
=’*’)&&(ch!
='/'))
printf("您输入的运算符不合法!
\n”);
else
{switch(ch){
case'+’:
printf("%2f”,m+n);break;
case’-':
printf("%2f",m-n);break;
case'*’:
printf(”%2f",m*n);break;
case'/’:
{if(n!
=0)
printf(”%2f”,m/n);
else
printf("分母为0无意义!
\n”);}}
}
}
7.编写程序,输入一个4位自然数n,判断n是否是降序数。
降序数是指对于n=d1d2…dk有:
d1≥d2≥…≥dk
#include〈stdio。
h〉
voidmain(){
intn,a,b,c,d;
printf("请输入一个四位自然数:
\n");
scanf(”%d",&n);
a=n/1000;
b=n%1000/100;
c=n%100/10;
d=n%10;
if(a〉b&&b>c&&c〉d)
printf(”该四位数为降序数!
\n");
else
printf(”该四位数不是降序数!
\n”);
}
8.编写程序,输入一个5位自然数n,判断n是否对称数。
对称数是指正序和反序读都相等的整数,如96769为对称数。
#include
voidmain(){
intn,a,b,c,d,e;
printf(”请输入一个五位数:
\n");
scanf(”%d",&n);\
a=n/10000;
b=n%10000/1000;
c=n%1000/100;
d=n%100/10;
e=n%10;
if((a==e)&&(b==d))
printf("该五位数为对称数");
else
printf(”该五位数不是对称数");
}
9.编写程序,判断给定的3位数是否为Armstrong数。
Armstrong数是指其值等于它每位数字立方和的数,如153就是一个Armstrong数。
#include〈stdio。
h>
voidmain(){
intn,a,b,c;
printf("请输入一个三位数:
\n");
scanf("%d”,&n);
a=n/100;
b=n%100/10;
c=n%10;
if(n==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个数整除。
#includevoidmain(){
intx;
printf(”请输入一个整数x:
");
scanf(”%d",&x);
if((x%3==0)&&(x%5==0)&&(x%7==0))
printf("%d能同时被3、5、7整数\n",x);
if((x%3!
=0)&&(x%5==0)&&(x%7==0))
printf(”%d能同时被5、7整数\n",x);
if((x%3==0)&&(x%5!
=0)&&(x%7==0))
printf(”%d能同时被3、7整数\n”,x);
if((x%3==0)&&(x%5==0)&&(x%7!
=0))
printf(”%d能同时被3、5整数\n”,x);
if((x%3!
=0)&&(x%5!
=0)&&(x%7==0))
printf(”%d能被7整数\n",x);
if((x%3==0)&&(x%5!
=0)&&(x%7!
=0))
printf("%d能被3整数\n”,x);
if((x%3!
=0)&&(x%5==0)&&(x%7!
=0))
printf(”%d能被5整数\n",x);
if((x%3!
=0)&&(x%5!
=0)&&(x%7!
=0))
printf(”%d不能被3、5、7整除\n”,x);
}
11.邮局寄包裹的费用是根据包裹的重量来收取的.一个重量为2kg或低于2kg的包裹收取3。
25元。
高于2kg的包裹,超出部分每千克收取1.05元,超出部分不足1kg按1kg计算.因此如果发件人发送重达5。
63kg的包裹,就需要缴纳7.45元.编写程序,输入包裹的重量,计算并输出发件人须缴纳的费用.(笔记本调试不成功)
#include〈stdio.h〉
voidmain(){
floatm,n;
inta;
printf(”请输入包裹的重量:
\n”);
scanf(”%f”,&m);
if(m〈=2)
n=3。
25;
else{
a=m/1;
if(m-a==0)
n=3。
25+(a—2)*1.05;
else
n=3。
25+(a-1)*1。
05;
}
printf("您需缴纳的费用为:
%f元”,n);
}
12.一个临时照顾孩子的人的收费标准是:
18:
00到21:
30间每小时2元,21:
30到午夜间每小时4元,18:
00以前和午夜以后不照顾孩子.
编写程序,输入开始时间和结束时间,计算并输出某一个雇工的薪酬。
程序应检查无效的开始和结束时间.
#include〈stdio。
h>
voidmain(){
floatm,n,j;
printf("请输入工作的起止时间:
\n”);
scanf(”%f%f",&m,&n);
if(n<=18||n〉24||m<18||m〉24)
printf(”输入的时间无效!
\n”);
else{
if(m〉=18&&n<=21.5)
j=(n—m)*2;
else
if(m〈21。
5&&n>21。
5)
j=(21。
5—m)*2+(n—21。
5)*4;
else
j=(n—m)*4;
printf("您获得的钱数为%f元\n",j);
}
}
13.编写程序,按下述公式求自然对数底e的近似值。
#include〈stdio.h〉
#defineeps1e—5
voidmain(){
intn;
floate,r;
e=1.0;
n=1;
r=1.0;
while(r>eps){
e=e+r;
n=n+1;
r=r/n;
}
printf(”e=%f\n”,e);
}
14.编写程序,统计以100位结束符的整数输入流中-1、0、1的出现次数并将其输出。
#includevoidmain(){
intn,i,j,k;
i=0;
j=0;
k=0;
printf(”请输入一个整数:
\n”);
scanf("%d",&n);
while(n!
=100){
if(n==1)i++;
if(n==0)j++;
if(n==—1)k++;
printf(”请输入一个整数:
\n");
scanf(”%d",&n);
}
printf(”整数流中出现1%d次\n”,i);
printf(”整数流中出现0%d次\n”,j);
printf("整数流中出现—1%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〈=9;i++)
printf("%4d”,i);
}
16.编写程序,打印200以内的素数,要求每行输出10个数.
#includeh>
voidmain(){
inti,j,k=0;
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(”%d",i);
k++;
}
if(k%10==0)
printf(”\n”);
}
}
17.编写程序,输出如下序列的前50项,此序列的第一项为0;第二项为1;以后的奇数项为其前两项之和;偶数项为其前两项之差。
要求每行输出10个数.
#include〈stdio.h>
voidmain(){
intu,v,w,k;
u=0;
v=1;
printf("%5d%5d”,u,v);
for(k=3;k〈=50;k++){
if(k%2==0)
w=v-u;
else
w=u+v;
printf("%7d”,w);
if(k%10==0)
printf("\n");
u=v;
v=w;
}
}
18.编写程序,输入正整数N,计算r1!
+r2!
+…+rn!
并输出.其中N=r1r2…rn.
#include〈stdio。
h〉
voidmain(){
intn,s,p,u,r;
printf("请输入正整数:
\n");
scanf("%d",&n);
s=0;
while(n!
=0){
r=n%10;
n=n/10;
p=1;
u=1;
while(u<=r){
p=p*u;
u=u+1;
}
s=s+p;
}
printf("%d”,s);
}
19.完数问题:
若有一数,其值等于它的因子之和,则该数称为完数。
例如,6的因子为1、2、3,而6=1+2+3,故6是完数。
编程输出1000之内的所有完数及其因子。
#include
voidmain(){
inti,j,k,l;
for(i=2;i<1000;i++){
k=0;
for(j=i/2;j>=1;j--)
if(i%j==0)
k=k+j;
if(k==i)
{printf("%d",k);
printf(”因子为:
”);
for(l=1;l<=k/2;l++)
if(k%l==0)
printf("%d",l);
printf("\n");
}
}
}
20.把一张1元钞票换成1分、2分和5分的硬币,每种至少有1枚,问有多少种换法?
#include〈stdio.h〉
voidmain(){
inti,j,k,l=0;
for(i=1;i〈=10;i++)
for(j=1;j〈=5;j++)
for(k=1;k<=2;k++)
if(i+2*j+5*k==10)
l++;
printf("%d\n",l);
}
21.斐波那契(Fibonacci)数列问题:
Fibonacci数列递归定义为:
x0=0,
x1=1,
xi+1=xi+xi—1,i=2,3,…
即从第二项开始,数列中的每一个元素等于前面两个元素之和.编程输出前20项Fibonacci数.(提示可以用递归或迭代两种方式编程)
答案:
#includeh>
voidmain(){
inti,a[20];
printf("0”);
printf(”1”);
for(i=2;i〈=20;i++)
{a[0]=0;
a[1]=1;
a[i]=a[i-2]+a[i-1];
printf(”%d",a[i]);}
}
另解:
#include”stdio.h”
#include”math。
h"
voidmain()
{
intf1,f2,f3,i;
f1=0,f2=1;
printf(”%d\n”,f1);
printf("%d\n",f2);
for(i=1;i<=18;i++)
{f3=f1+f2;
f1=f2;
f2=f3;
printf(”%d\n”,f3);
}
printf("\n");
}
22.公鸡5元1只,母鸡3元1只,小鸡1元3只,花了100元钱买100只鸡,问公鸡、母鸡、小鸡各多少只?
#include〈stdio.h>
voidmain(){
intx,y,z;
for(x=1;x〈=20;x++)
for(y=1;y〈=33;y++)
for(z=3;z〈=99;z=z+3)
if(x+y+z==100&&5*x+3*y+z/3==100)
printf(”公鸡%d;母鸡%d;小鸡%d\n”,x,y,z);
}
23.编写程序,用循环语句控制打印如图所示的字符图形。
ABCDEFGHI
BCDEFGHIA
CDEFGHIAB
DEFGHIABC
EFGHIABCD
DEFGHIABC
CDEFGHIAB
BCDEFGHIA
ABCDEFGHI
#include〈stdio。
h〉
voidmain(){
charx,y;
for(x=’A’;x〈=’E’;x++)
{for(y=x;y<='I’;y++)
printf("%c”,y);
for(y='A';y<=x-1;y++)
printf(”%c”,y);
printf("\n”);
}
for(x='D';x>='A';x—-){
for(y=x;y<=’I';y++)
printf("%c”,y);
for(y=’A';y<=x-1;y++)
printf("%c",y);
printf("\n");
}
}
24.编写程序,打印如下图所示的图形
1
121
12321
1234321
123454321
12345654321
1234567654321
123456787654321
12345678987654321
1234567890987654321
#include〈stdio。
h〉
voidmain(){
inti,j,k,l,m,n;
for(i=1;i〈=9;i++)
{for(j=9;j>=i;j--)
printf(”");
for(k=1;k
printf("%d”,k);
for(l=i;l>=1;l—-)
printf("%d”,l);
printf("\n”);
}
for(m=1;m<=9;m++)
printf(”%d",m);
printf("0");
for(n=9;n>=1;n-—)
printf(”%d”,n);
}
25.验证哥德巴赫猜想:
任意一个大偶数都可以分解为两个素数之和。
用户输入一个大于6的偶数,程序计算并输出分解结果.
26.编写一个程序解决爱因斯坦台阶问题:
有人走以台阶,若以每步走2级则最后剩1级;若每步走3级则最后剩2级;若以每步走4级则最后剩3级;若以每步走5级则最后剩4级;若以每步走6级则最后剩5级;若以每步走7级则最后刚好不剩。
问台阶共有几级?
27.编写程序,输出所有小于100的可以被11整除的自然数,以及这些数之和。
#include〈stdio.h〉
voidmain(){
intn,m;
n=0;
for(m=1;m<100;m++)
{if(m%11==0)
{printf(”%d",m);
n=n+m;}
}
printf(”和为:
%d\n",n);
}
28.一辆汽车装满油料可以行驶300km。
从存放有n车油料的油库出发,通过在途中建立加油站的方法,它可以行驶
千米。
编写程序,给定L以计算n。
29.编写函数,判定它的4个整型参数中是否有两个数的值相等。
主函数读入4个数,调用该函数,输出判定结果。
#includeh〉
inty(inta,intb,intc,intd){
if(a==b||a==c||a==d|