模拟1答案09.docx
- 文档编号:11941210
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:14
- 大小:24KB
模拟1答案09.docx
《模拟1答案09.docx》由会员分享,可在线阅读,更多相关《模拟1答案09.docx(14页珍藏版)》请在冰豆网上搜索。
模拟1答案09
模拟练习一
试题1阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。
【程序说明】求1+2/3+3/5+4/7+5/9+…的前20项之和。
运行示例:
sum=11.239837
【程序】
#include
voidmain()
{
inti,b=1;
doubles;
(1);
for(i=1;i<=20;i++){
s=s+
(2);
(3)
}
printf((4),s);
}
【供选择的答案】
(1)A、s=0B、s=1
C、s=-1D、s=2
求和时,变量的初值为0.
(2)A、i/bB、double(i)/double(b)
C、i/2*i-1D、(double)i/(double)b
AC两项是整数相除,错误。
B的转换格式不对。
(3)A、;B、b=2*i–1;
C、b=1.0*b;D、b=b+2;
B的步长为2。
(4)A、"sum=%d\n"B、"s=%c\n"
C、"sum=%f\n"D、"s=%s\n"
根据上面的提示:
运行示例:
sum=11.239837
可以确定这里的格式。
试题2阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。
【程序说明】输入10个整数,将它们从大到小排序后输出。
运行示例:
Enter10integers:
14-9991008706534
Aftersorted:
10099873465410-9
【程序】
#include
voidmain()
{inti,j,t,a[10];
printf("Enter10integers:
");
for(i=0;i<10;i++)
scanf((5));
for(i=1;i<10;i++)
for((6);(7);j++)
if((8)){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
printf("Aftersorted:
");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
}
【供选择的答案】
(5)A、"%f",a[i]B、"%lf",&a[i]
C、"%s",aD、"%d",&a[i]
AC的共同错误在于缺少&,B的错误在于格式,这里没有使用小数,都是整数。
(6)A、j=0B、j=1
C、j=iD、j=i–1
初值为0.
(7)A、j>iB、j<9-i
C、j<10-iD、j>i–1
第i个,总是和第10-i个相比,对称!
(8)A、a[i-1] C、a[j] 从下面的a[j]=a[j+1];可以推断出与后面的一个进行比较,如果比后面的小,则交换。 注意: 这里到底是用a[j]a[j+1],看结果是大的在前,还是小的在前。 试题3阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。 【程序说明】输入一个字符串和一个正整数m,将该字符串中的前m个字符复制到另一个字符串中,再输出后一个字符串。 运行示例1: Enterastring: 103+895=? Enteraninteger: 6 Thenewstringis103+89 运行示例2: Enterastring: 103+895=? Enteraninteger: 60 Thenewstringis103+895=? 运行示例3: Enterastring: 103+895=? Enteraninteger: 0 Thenewstringis 【程序】 #include<(9)> voidmain() {chars[80],t[80],i,m; printf("Enterastring: "); gets(s); printf("Enteraninteger: "); scanf("%d",&m); for(i=0;(10);i++) (11); (12) printf("Thenewstringis"); puts(t); } 【供选择的答案】 (9)A、ctype.hB、math.h C、stdio.hD、string.h 做这样的题目,要扫视下面,看出现了哪些库函数。 本题中,主要出现了puts,这个函数属于stdio.h (10)A、i ='\0' C、s[i]! ='\0'&&i ='\0'||i 这里的循环变量是i,需要i 问题是还需要同时考虑S串的长度,如果m的值大于S串的长度(例如: Enterastring: 103+895=? Enteraninteger: 60 ),则后面的部分没必要进行了。 因此,这两个条件必须同时满足。 所以答案是C。 A和B都只考虑了一种情况,D的逻辑表达不对。 值得注意的是,题目中的运行示例2和运行示例3都提供了极端的情况,耐人寻味。 (11)A、*s++=*t++B、t[i]=s[i] C、*t++=*s++D、s[i]=t[i] 两个数组元素,逐一赋值而已。 用到了For,就是逐一。 问题是,如果选C、*t++=*s++,则这一句把指针向后拨动一次,但循环中的for(i=0;(10);i++)又拨动一次,这样就指针后移2次,错误! (12)A、t[i]='\0';B、; C、*++s='\0';D、*++t='\0'; 使得到的数组元素的最后一个为\0. 试题4阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。 【程序】 #include voidmain() {ints,x1,y1,z1,x2,y2,z2; printf("Enter6integers: "); scanf("%d%d%d%d%d%d",&x1,&y1,&z1,&x2,&y2,&z2); s=f(x2,y2,z2)-f(x1,y1,z1); printf("%d\n",s);} f(intx,inty,intz) {intk,n; inttab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}}; n=(x%4==0&&x%100! =0||x%400==0); for(k=1;k z=z+tab[n][k]; returnz;} 这道题的解题思路是把给定的数值带进去,分别求出f(x2,y2,z2)和f(x1,y1,z1)的值,然后再求它们的差。 有趣的是,数组tab[2][13]的两行分别表示了非闰年和闰年各月的天数。 注意,经过n=(x%4==0&&x%100! =0||x%400==0);运算后,n的值要么是1,要么是0,因为它是逻辑运算的结果。 (13)程序运行时,输入100000,输出(13)。 A、29B、28C、0D、-1 f(x2,y2,z2)=f(0,0,0)=0 f(x1,y1,z1)=f(1,0,0)=0 所以,0-0=0 (14)程序运行时,输入001000,输出(14)。 A、29B、28C、0D、-1 f(x2,y2,z2)=f(0,0,0)=0 f(x1,y1,z1)=f(0,0,1)=1 for(k=1;k 的值没有改变,还是1。 所以,0-1=-1 (15)程序运行时,输入200021200031,输出(15)。 A、29B、28C、0D、-1 f(x2,y2,z2)=f(2000,3,1),此时: 因为2000%400==0,所以n=1 所以,z=z+tab[1][1]+tab[1][2]=0+31+29=60 f(x2,y2,z2)=f(2000,3,1)=60 f(x1,y1,z1)=f(2000,21),此时: 因为2000%400==0,所以n=1 所以,z=z+tab[1][1]=0+31=31 f(x1,y1,z1)=f(2000,2,1)=31 所以,60-31=29 (16)程序运行时,输入198121198131,输出(16)。 A、29B、28C、0D、-1 f(x2,y2,z2)=f(1981,3,1),此时: n=0; 所以,z=z+tab[0][1]+tab[0][2]=0+31+28=59 f(x2,y2,z2)=f(1981,3,1)=59 f(x1,y1,z1)=f(1981,2,1),此时: n=0 所以,z=z+tab[0][1]=0+31=31 f(x1,y1,z1)=f(1981,2,1)=31 所以,59-31=28 试题5阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。 【程序】 #include voidmain() {inta=-1,b=1; voidf1(intx,inty),f2(int*x,int*y); voidf3(int*x,int*y),f4(intx,inty); f1(a,b); printf("(%d,%d)\n",a,b); a=-1,b=1; f2(&a,&b); printf("(%d,%d)\n",a,b); a=-1,b=1; f3(&a,&b); printf("(%d,%d)\n",a,b); a=-1,b=1; f4(a,b); printf("(%d,%d)\n",a,b);} voidf1(intx,inty) {intt; t=x;x=y;y=t;} voidf2(int*x,int*y) {intt; t=*x;*x=*y;*y=t;} voidf3(int*x,int*y) {int*t; t=x;x=y;y=t;} voidf4(intx,inty) {int*t=malloc(sizeof(t)); *t=x;x=y;y=*t;} 本题主要考核4个函数到底交换数据没有。 只有f3是通过地址真正地交换了数据,其他几个函数都是交换了变量,而交换后的变量没有用return带回来,所以没有实现交换。 (17)程序运行时,第1行输出(17)。 A、(1,-1)B、(-1,1)C、(-1,-1)D、(1,1) (18)程序运行时,第2行输出(18)。 A、(1,-1)B、(-1,1)C、(-1,-1)D、(1,1) (19)程序运行时,第3行输出(19)。 A、(1,-1)B、(-1,1)C、(-1,-1)D、(1,1) (20)程序运行时,第4行输出(20)。 A、(1,-1)B、(-1,1)C、(-1,-1)D、(1,1) 试题6 #include structcard{ char*face; char*suit;}; voidfilldeck(structcard*wdeck,char*wface[],char*wsuit[]) {inti; for(i=0;i<4;i++){ wdeck[i].face=wface[i%2]; wdeck[i].suit=wsuit[i/2];} } voiddeal(structcard*wdeck) {inti; for(i=0;i<4;i++) printf("(%2sof%-6s)\n",wdeck[i].face,wdeck[i].suit); } voidmain() {structcarddeck[4]; char*face[]={"K","Q"}; char*suit[]={"Heart","Club"}; filldeck(deck,face,suit); deal(deck); } 阅读程序后,知道: Wface[0]=K,Wface[1]=Q Wsuit[0]=Heart,Wsuit[1]=Club, 经过以下语句后: filldeck(deck,face,suit); 得到: wdeck[0].face=Wface[0]=K,(注意: 0%2=0) wdeck[0].suit=Wsuit[0]=Heart(注意: 0/2=0) wdeck[1].face=Wface[1]=Q,(注意: 1%2=1) wdeck[1].suit=Wsuit[0]=Heart(注意: 1/2=0) wdeck[2].face=Wface[0]=K,(注意: 2%2=0) wdeck[2].suit=Wsuit[1]=Club(注意: 2/2=1) wdeck[3].face=Wface[1]=Q,(注意: 3%2=1) wdeck[3].suit=Wsuit[1]=Club(注意: 3/2=1) (21)程序运行时,第1行输出(21)。 A、(KofHeart)B、(QofHeart) C、(KofClub)D、(QofClub) 输出: wdeck[0].face,wdeck[0].suit (22)程序运行时,第2行输出(22)。 A、(KofHeart)B、(QofHeart) C、(KofClub)D、(QofClub) 输出: wdeck[1].face,wdeck[1].suit (23)程序运行时,第3行输出(23)。 A、(KofHeart)B、(QofHeart) C、(KofClub)D、(QofClub) 输出: wdeck[2].face,wdeck[2].suit (24)程序运行时,第3行输出(24)。 A、(KofHeart)B、(QofHeart) C、(KofClub)D、(QofClub) 输出: wdeck[3].face,wdeck[3].suit 试题7编写程序,输入一批学生的成绩,遇0或负数则输入结束,要求统计并输出优秀(大于85)、通过(60~84)和不及格(小于60)的学生人数。 运行示例: Enterscores: 88716870598191426677830 >=85: 2 60-84: 7 <602 #include main() {intgood;pass=0;nopass=0;fs; while(fs>0) {scanf(“input%d”,fs); if(fs>=85)good++; if{fs<=84&&fs>=60}pass++; if(fs<60)nopass++; } printf(“good%d”,good); printf(“pass%d”,pass); printf(“nopass%d”,nopass); } 试题8 (1)编写程序,输入一个正整数n,求下列算式的值。 要求定义和调用函数fact(k)计算k的阶乘,函数返回值的类型是double。 运行示例: Entern: 5 sum=1.71667 (2)输入一个正实数x和一个正整数n,求下列算式的值。 要求定义和调用2个函数: fact(n)计算n的阶乘;mypow(x,n)计算x的n次幂(即xn),2个函数的返回值类型都是double。 #include fact(k)/*本函数求阶乘*/ {intt=1; for(n=1;n<=k;n++)t=t*n; returnt; } mypow(floatx,intk)/*本函数求x的n次幂(即xn)*/ {intt=1; for(n=1;n<=k;n++)t=t*x; returnt; } main() { doublesum=0.0; floatx; intn; intjihao=1;/*记号变量,用来改变符号*/ scanf(“input%d,,%d”,&x,&n); for(k=1;k<=n;k++) { sum=sum+jihao*1.0*mypow(x,k)/fact(k);/*乘1.0为了变成小数*/ jihao=-jihao;/*记号变量反号*/ } printf(“sum=%f”,sum); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模拟 答案 09