程序设计基础疑难知识与测试题.docx
- 文档编号:28790364
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:15
- 大小:18.25KB
程序设计基础疑难知识与测试题.docx
《程序设计基础疑难知识与测试题.docx》由会员分享,可在线阅读,更多相关《程序设计基础疑难知识与测试题.docx(15页珍藏版)》请在冰豆网上搜索。
程序设计基础疑难知识与测试题
疑难知识
1.P53函数原型:
intgetchar(void);
说明:
当程序调用getchar()函数时,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。
当用户键入回车之后,getchar()函数才开始从键盘缓冲区中每次读入一个字符。
也就是说,后续的getchar()函数调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才重新等待用户按键。
不知道您明白了没有,再通俗一点讲,当程序调用getchar()函数时,程序就等着用户按键,并等用户按下回车键返回。
期间按下的字符存放在缓冲区,第一个字符作为函数返回值。
继续调用getchar()函数,将不再等用户按键,而是返回您刚才输入的第2个字符;继续调用,返回第3个字符,直到缓冲区中的字符读完后,才等待用户按键。
2.P53我们为什么要引入缓冲区呢?
比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。
又比如,我们使用打印机打印文档,由于打印机的打印速度相对较慢,我们先把文档输出到打印机相应的缓冲区,打印机再自行逐步打印,这时我们的CPU可以处理别的事情。
现在您基本明白了吧,缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。
它使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作。
3.printf("Welcomtobeijing!
\n");是输出回车换行。
如果加上\n就会输出:
Welcomtobeijing!
_(光标)
如果不加就会输出:
Welcomtobeijing!
_(光标)
测验题
1.复合语句是多条简单语句的集合,并依次执行;复合语句中的每条语句要么被执行、要么不被执行,不存在值执行一部分的情况。
正确
2.勒让德多项式(10分)
问题描述:
编一个程序,输入x、n,计算勒让德(Legendre)多项式的第n项。
输入:
一个浮点数和一个整数分别对应x和n
输出:
一个浮点数,即勒让德多项式第n项的值,注意小数点后保留到第2位。
提示:
整数除以整数结果仍为整数,所以(n-1)/n的结果是0;为了能够正确计算需要进行强制类型转换(float)n。
样例1:
输入5.51输出:
5.50
样例2:
输入5.50输出:
1.00
样例3:
输入5.54输出:
3890.34
样例4:
输入5.52输出:
44.88
标答:
#include
intmain()
{
intn;
floatx,y;
scanf("%f%d",&x,&n);
floatp(intn,floatx);
y=p(n,x);
printf("%.2f",y);
return0;
}
floatp(intn,floatx)
{
floatz;
if(n==0)
{
return
(1);
}
if(n==1)
{
z=x;
return(z);
}
if(n>1)
{
z=(2*(float)n-1)/(float)n*x*p(n-1,x)-((float)n-1)/(float)n*p(n-2,x);
return(z);
}
}
法二:
#include
main()
{
floatx,x0,x1,b;
intn,a;
scanf("%f%d",&x,&n);
x0=1;
x1=x;
for(a=2;a<=n+1;a++)
{
b=x0;
x0=x1;
x1=(2*a-1)/(float)a*x*x0-(a-1)/(float)a*b;
}
printf("%.2f",x0);
}
3.三位Armstrong数(10分)
问题描述:
编写程序,打印所有3位的Armstrong数,Armstrong数是指其值等于它本身每位数字立方和的数,如153就是一个Armstrong数。
输入:
无
输出:
打印所有3位的Armstrong数,其中每个Armstrong数占一行
输出样例:
153
370
371
407
#include
#include
intmain()
{
intch,c1,c2,c3,t;
for(ch=100;ch<1000;ch+=1)
{
c1=ch/100;
t=ch/10;
c2=t%10;
c3=ch%10;
if(pow(c1,3)+pow(c2,3)+pow(c3,3)==ch)
printf("%d\n",ch);
}
return0;
}
4.斐波纳契序列(10分)
问题描述:
开始,有一对小兔子;
一个月后,变成大兔子开始怀孕;
两个月后,生出一对小兔子,这时共有两对兔子(一对大兔子,一对小兔子),同时大兔子又再次怀孕;
三个月后,以前出生的小兔子变成大兔子,以前怀孕的大兔子又生出一对小兔子,这时共有三对兔子(两对大兔子,一对小兔子),所有大兔子又全部怀孕;
Ÿ四个月后,以前出生的小兔子变成大兔子,以前怀孕的大兔子又各生出一对小兔子,这时共有五对兔子(三对大兔子,两对小兔子),所有大兔子又全部怀孕;
Ÿ五个月后,以前出生的小兔子变成大兔子,以前怀孕的大兔子又各生出一对小兔子,这时共有八对兔子(五对大兔子,三对小兔子),所有大兔子又全部怀孕;
…………
假设在兔子的生养过程中没有死亡。
编程序,输入n,计算n个月后,有多少对兔子,并输出。
输入:
输入一个正整数n,表示月份
输出:
n个月后的兔子数(单位:
对)
样例1:
输入0输出1
样例2:
输入1输出1
样例3:
输入2输出2
样例4:
输入10输出89
#include
#include
intn,m,x,x1,x2,x3,x4;
intmain()
{
m=1;
x=1;
x1=0;
x2=1;
x3=0;
scanf("%d",&n);
do
{
m+=1;
x1+=x2;
x2=x3;
x=x1+x2;
x3=x1;
}while(m<=n);
printf("%d\n",x);
return0;
}
5.爱因斯坦阶梯问题(10分)
问题描述:
设有阶梯,不知其数,但知:
每步跨2阶,最后剩1阶;每步跨3阶,最后剩2阶;每步跨5阶,最后剩4阶;每步跨7阶,正好到楼顶。
编程序求最少共有多少阶。
输入:
无
输出:
台阶数目
输出样例:
119
#include
#include
intx;
intmain()
{
for(x=0;;x++)
{
if((x%2==1)&&(x%3==2)&&(x%5==4)&&(x%7==0))
{
printf("%d\n",x);
break;
}
}
return0;
}
6.计算序列和(10分)
问题描述:
请计算如下序列的前100项的和
输入:
一个浮点数对应x值
输出:
一个浮点数即ex的近似值,小数点后保留到第2位。
提示:
注意使用项与项之间的递进关系;不要直接使用幂数和阶乘直接相除计算每一项值,很容易出现溢出错误。
样例1:
输入0输出:
1.00
样例2:
输入1输出:
2.72
样例3:
输入4.3输出:
73.70
样例4:
输入1.5输出:
4.48
#include
#definen100
main()
{
floatx,x0,s;
inta;
scanf("%f",&x);
x0=1;
s=0;
for(a=1;a { s=s+x0; x0=x0*x/a; } printf("%.2f",(s+x0)); } 48页2.3 #include #include intmain() { charc1,c2,c3; printf("pleaseinputc2\n"); scanf("%c",&c2); c1=c2-1; c3=c2+1; printf("%c%c%c\n",c1,c2,c3); return0; } 48页2.9 #include #include intmain(intargc,char*argv[]) { floatC,F; printf("pleaseinputC\n"); scanf("%f",&C); F=9*C/5+32; printf("%f\n",F); return0; } 68页3.1 #include #include intmain() { charch; scanf("%c",&ch); if(ch>=97) ch=ch-32; printf("%c\n",ch); return0; } 68页3.11 #include #include intmain() { intx; scanf("%d",&x); if(x%3==0) printf("能被3整除\n"); if(x%5==0) printf("能被5整除\n"); if(x%7==0) printf("能被7整除\n"); if((x%7==0)&&(x%5==0)&&(x%3==0)) printf("能同时被三个数整除\n"); if((x%7==0)&&(x%5==0)) printf("能同时被7和5整除\n"); if((x%5==0)&&(x%3==0)) printf("能同时被5和3整除\n"); if((x%7==0)&&(x%3==0)) printf("能同时被7和3整除\n"); return0; } 69页3.20 #include intmain() { intx; printf("pleaseinputmonthinnumber\n"); scanf("%d",&x); switch(x){ case1: printf("month=January");break; case2: printf("month=February");break; case3: printf("month=March");break; case4: printf("month=April");break; case5: printf("month=May");break; case6: printf("month=June");break; case7: printf("month=July");break; case8: printf("month=August");break; case9: printf("month=September");break; case10: printf("month=October");break; case11: printf("month=November");break; case12: printf("month=December");break; } return0; } 编写程序,输入m,n的值,计算并输出函数f的值。 输入: 一个整数m和一个整数n。 输出: 函数f的值。 样例1: 输入-12输出-1 样例2: 输入2-3输出-1 样例3: 输入22输出1 样例4: 输入34输出0 样例5: 输入53输出10 #include #include intm,n,c,a,s,i,e; intmain() { intch(intm,intn); scanf("%d%d",&m,&n); if(m>0&&n>0) { if(m printf("0"); if(m==n) printf("1"); if(m>n) { c=ch(m,n); printf("%d",c); } } else printf("-1"); return0; } intch(intm,intn) { s=1; a=m-n+1; for(i=m;i>=a;i--) { s=s*i; } for(i=1;i<=n;i++) { e=1; e*=i; s=s/e; } return(s); } 逆序数(10分) 问题描述: 编写函数,求任意四位自然数的逆序数,例如5432就是2345的逆序数。 输入: 任意一个整数 输出: 如果输入的不是四位自然数,则输出0;否则输出对应的逆序数。 样例1: 输入123输出0 样例2: 输入12345输出0 样例3: 输入-123输出0 样例4: 输入7654输出4567 样例5: 输入1357输出7531 #include #include intx,i,x1,x2,x3,x4; intmain() { inta[4]; scanf("%d",&x); if(x>=1000&&x<10000) { x1=x%10; a[0]=x1; x2=x/10; x2%=10; a[1]=x2; x3=x/100; x3%=10; a[2]=x3; x4=x/1000; x4%=10; a[3]=x4; for(i=0;i<=3;i++) printf("%d",a[i]); } else printf("0"); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 基础 疑难 知识 测试
![提示](https://static.bdocx.com/images/bang_tan.gif)