文档库 最新最全的文档下载
当前位置:文档库 › c语言机试经典编程题

c语言机试经典编程题

c语言机试经典编程题
c语言机试经典编程题

本学期《程序设计基础》课程实行上机考核,现将考核有关事项通知如下:(1)考核时间:本学期最后一次上机时间为机试。

(2)考核内容:主要是算法设计与实现。考题来自本学期布置的作业、例题及一些补充的题目。

(3)考试形式:机试前进入机房时,每人随机抽取一道题(同一个组的同学保证不抽到同一题),然后上机编程,调试通过后报告监考人员审核,审核通过后将源程序拷贝到监考人员U盘上,然后可以离开机房。源程序文件明必须是“学号姓名.cpp”,如“27王梓丞.cpp”。

(4)考试要求:机试时考试规则同课堂考试一致,不允许带书、纸张等。不能携带任何可用计算机处理的软件或数据(不允许任何私人携带的U 盘、磁盘或计算器) ,不能携带任何类型的通讯工具,包括无线电接收器、移动电话。

(5)考试成绩:本次机试成绩将在《程序设计基础》课程成绩中占25%的比重。

(6)其它有关事项由主考教师和监考人员负责处理。

附:考试题集

1.学校曾经组织一次“程序设计大奖赛”,规定本学期“程序设计”课程的成绩可以因为

在大奖赛上获奖而加5分,总分不超过100分。编程序,输入某同学的考试成绩,回答是否在竞赛中获奖,计算并输出该某同学的程序设计课成绩。

#include<>

void main(){

int m,n;

printf("请输入考试成绩:\n");

scanf("%d",&m);

printf("请选择获奖情况:1 获奖;2 未获奖\n");

scanf("%d",&n);

switch (n){

case 1: m=m+5;break;

case 2: m;

}

if(m>100)

m=100;

printf("你的最终成绩为:%d\n",m);

}

2.编写一个程序,用户输入年份及月份两个数据,程序输出该月份的天数。(提示:对2

月要考虑是否闰年,闰年年份要么能被4整除且不能被100整除,要么能被400整除,除此之外都不是闰年)。

#include<>

int year,a;

void main(){

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<>

#include<>

void main(){

float a,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<>

void main(){

int a,b;

printf("请输入你的考试成绩:\n");

scanf("%d",&a);

printf("请选择你程序设计情况:0 未参加 1 参赛 2 三等奖 3 二等奖 4 一等奖\n"); scanf("%d",&b);

switch(b){

case 0:break;

case 1:a=a+5;break;

case 2:a=a+15;break;

case 3:a=a+20;break;

case 4:a=a+30;}

if(a>100)

a=100;

printf("你的最终成绩为:%d",a);

}

5.高速公路每公里的收费标准按不同种类汽车如下:

小汽车( car )元

卡车( truck )元

大客车( bus )元

编程序,为某高速公路收费站计算各种车辆的收费额。

#include<>

void main(){

float a,c;

int b;

printf("请选择车辆类型:1 小汽车;2 卡车; 3 大客车\n");

scanf("%d",&b);

printf("请输入车辆行驶的公里数:\n");

scanf("%f",&a);\

switch(b){

case 1:c=*a;break;

case 2:c=*a;break;

case 3:c=*a;

}

printf("收费额为:%3f元",c);

}

6.设计一个模拟单步计算器的程序,设该计算器只能作加、减、乘、除运算。用户输入

形如

m#n

的算式,其中m、n为运算数,#为运算符。(需考虑运算符不合法,及除数为0的情况)

#include<>

void main(){

float m,n;

char ch;

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=d 1d 2…d k

有:

d 1≥d 2≥…≥d k

#include<>

void main(){

int n,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<>

void main(){

int n,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<>

void main(){

int n,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个数整除。

#include<>

void main(){

int x;

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的包裹收

取元。高于2kg的包裹,超出部分每千克收取元,超出部分不足1kg按1kg计算。因此如果发件人发送重达5.63kg的包裹,就需要缴纳元。编写程序,输入包裹的重量,

计算并输出发件人须缴纳的费用。(笔记本调试不成功)

#include<>

void main(){

float m,n;

int a;

printf("请输入包裹的重量:\n");

scanf("%f",&m);

if(m<=2)

n=;

else{

a=m/1;

if(m-a==0)

n=+(a-2)*;

else

n=+(a-1)*;

}

printf("您需缴纳的费用为:%f元",n);

}

12.一个临时照顾孩子的人的收费标准是:18:00到21:30间每小时2元,21:30到午夜

间每小时4元,18:00以前和午夜以后不照顾孩子。

编写程序,输入开始时间和结束时间,计算并输出某一个雇工的薪酬。程序应检查无效的开始和结束时间。

#include<>

void main(){

float m,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<=

j=(n-m)*2;

else

if(m<&&n>

j=*2+*4;

else

j=(n-m)*4;

printf("您获得的钱数为%f 元\n",j);

}

}

13. 编写程序,按下述公式求自然对数底e 的近似值。 ∑∞

=+=1!

11i i e #include<>

#define eps 1e-5

void main(){

int n;

float e,r;

e=;

n=1;

r=;

while(r>eps){

e=e+r;

n=n+1;

r=r/n;

}

printf("e=%f\n",e);

}

14.编写程序,统计以100位结束符的整数输入流中-1、0、1的出现次数并将其输出。

#include<>

void main(){

int n,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乘法表”

1 1

2 2 4

3 3 6 9

4 4 8 12 16

5 5 10 15 20 25

6 6 12 18 24 30 36

7 7 14 21 28 35 42 49

8 8 16 24 32 40 48 56 64

9 9 18 27 36 45 54 63 72 81 * 1 2 3 4 5 6 7 8 9

#include<>

void main(){

int i,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个数。

#include<>

void main(){

int i,j,k=0;

bool flag;

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<>

void main(){

int u,v,w,k;

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,计算r

1!+r

2

!+…+r

n

!并输出。其中N=r

1

r

2

…r

n

#include<>

void main(){

int n,s,p,u,r;

printf("请输入正整数:\n"); scanf("%d",&n);

s=0;

while(n!=0){

r=n%10;

n=n/10;

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<>

void main(){

int i,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<>

void main(){

int i,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数列递归定义为:

x

=0,

x

1

=1,

x i+1=x

i

+x

i-1

, i=2,3,…

即从第二项开始,数列中的每一个元素等于前面两个元素之和。编程输出前20项Fibonacci数。(提示可以用递归或迭代两种方式编程)

答案:

#include<>

void main(){

int i,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 ""

#include ""

void main()

{

int f1,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<>

void main(){

int x,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.编写程序,用循环语句控制打印如图所示的字符图形。

A B C D E F G H I

B C D E F G H I A

C D E F G H I A B

D E F G H I A B C

E F G H I A B C D

D E F G H I A B C

C D E F G H I A B

B C D E F G H I A

A B C D E F G H I

#include<>

void main(){

char x,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

1 2 1

1 2 3 2 1

1 2 3 4 3 2 1

1 2 3 4 5 4 3 2 1

1 2 3 4 5 6 5 4 3 2 1

1 2 3 4 5 6 7 6 5 4 3 2 1

1 2 3 4 5 6 7 8 7 6 5 4 3 2 1

1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1

1 2 3 4 5 6 7 8 9 0 9 8 7 6 5 4 3 2 1

#include<>

void main(){

int i,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级则最后刚好不剩。问台阶共

相关文档