内容正文:
《编程语言基础——C语言》高等教育出版社(第五版)
编程语言基础(C语言) 模拟卷(三)
考试时间:100分钟 满分:100分
姓名 班级 学号 1
1、 单项选择题(本题共20小题,每题2分,共40分,多选、错选均不得分)
1. 若有定义:int a[2][3] ;则对 a数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的正确引用为( )
A.a[i]+j B.*(a+j) C.*(a[i]+j) D.(a+i)
2. 若有定义:int a[ ]={2,4,6,8,10,12,14,16,18,20,22,24}, * q[4], k ;则下面程序段的输出结果是( )
for(k=0;k<4;k++) q[k]=&a[k * 3];
printf ("%d
",q[3][0] );
A.8 B.12 C.16 D.20
3. 以下程序的输出结果是( )
int main( )
{ char s[20]="abcd";
char * sp=s;sp+2;
puts(strcat(sp,"ABCD"));
getch();}
A.abABCD B. ABCD C. abcd D. abcdABCD
4. 执行程序段:int x=123,y=023;int z=x|y||x;后,z的值是( )
A.0 B.1 C.123 D.19
5. 下列关于算法的描述中,正确的一项是( )
A.算法只能用编程语言来描述
B.算法必须是有限的步骤
C.算法不需要输入
D.算法只能用数学公式来表示
6. 若文本文件abc1.txt中原有内容为good,则运行下列程序后文件abc1.txt中的内容为( )
#include<stdio.h>
main()
{FILE *fp1;
fp1=fopen(“abc1.txt”,“r+”);
fprintf(fp1,“abc”);
fclose(fp1);}
A.abcd B.goodabc C.abc D.abcgood
7. 执行程序段:int a=12,b=14;a+=a-=b*=b;后,b的值是( )
A.-368 B.144 C.-196 D.196
8. 设有以下程序,运行后的输出结果是( )
main()
{int x=1,a=0,b=0;
switch (x)
{ case 0: b++;
case 1: a++;
case 2: a++;b++;}
printf("a=%d,b=%d",a,b);}
A.2,2 B.2,1 C.1,1 D.1,0
9. 设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为( )
A、不确定 B、double C、int D、float
10. 设有如下的程序段:char s[]="girl", *t; t=s;则下列叙述正确的是( )
A.s和t完全相同
B.数组s中的内容和指针变量t中的内容相等
C.s数组长度和t所指向的字符串长度相等
D.*t与s[0]相等
11. 以下正确的程序段是( )
A. char s[20]; B. char *s;
scanf("%s", &s); scanf("%s", s);
C. char s[20]; D. char s[20], *t=s;
scanf("%s", &s[2]); scanf("%s", t[2]);
12. 文件中的位置指针,指向当前读写的位置,下列不可使p所指向的位置返回到文件开头的选项是( )
A.rewind(p) B.fseek(p,0,SEEK_CUR);
C.fseek(p,0,0); D. fseek(p,0,SEEK_SET);
13. 下列程序的运行结果是( )
main()
{ int i,x[10]={ 1,3,0,3,0,2,3,2,1,3 },y[4]={0};
for( i=0;i<10;i++) y[x[i]]++;
printf("%d
",y[3]);
getch();}
A.10 B.2 C.2 2 2 4 D.4
14. 设 a、b、c 均为 int 型变量且 a=6,b=4,c=2,则表达式 !(a-b)+c-1&&b+c/2 的值是( )
A.1 B.0 C.-1 D.2
15. 设 a、b、c均为int 型变量且a=7.5,b=2,c=3.6,则表达式 a>b&&c>a||a<b &&!c>b的值是( )
A.0 B.1 C.-1 D.2
16. 以下选项中,当x为大于1的奇数时,值为0的表达式是( )
A.x%2==1 B.x/2 C.x%2!=0 D.x%2==0
17. 若有定义:int a;long b;double x,y;,无论a、b、x、y为何值,表达式都正确的选项是( )
A.a%(int)(x-y); B.a=x!=y; C.(a*y)%b; D.y=x+y=x;
18. 已知:int i=10;,表达式20-0<=i<=9的值是( )
A.0 B.1 C.19 D.20
19. 若int x=-1;,则while(!x) x=x+10;语句中循环体的执行次数为( )
A.1 B.0 C.2 D.无数次
20. 将字符串b连接到字符串a的末尾,应当使用的语句是( )
A.strcpy(a,b); B.strcat(b,a); C.strcat(a,b); D.strcmp(b,a);
二、程序运行结果题(本题共7小题,每题3分,共21分)
21. 若输入的值是7,则以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int s(int * p)
{ int sum=10;sum=sum+ * p;
return(sum);}
int main( )
{ int a=0,i, * p,sum;
for(i=0;i<=2;i++)
{ p=&a;scanf("%d",p);
sum=s(p); printf("sum= %d
",sum);
getch();}}
22. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int main( )
{ int a[]={5,1,4,7,8,9};
int *p=a+4;
int sum=1,i=0,q=-1;
for(;i<3;i++)
sum+=p[q--];
printf("sum=%d",sum);
getch();}
23. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
#include<stdlib.h>
void fun (float *p1,float *p2,float *s)
{s=(float *)malloc(sizeof(float));
*s=++(*p1)+*(p2++);}
main(){
float a[2]={2.5,4.5},b[2]={10.5,24.2};
float *s=a;
fun(a,b,s);
printf("%.1f
",*s);
getch();}
24. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
main(){
char a[ ]="6789", * p;
int s=0;
for (p=a;* p!='\0';p++) s=10*s+*p-'0';
printf("%d
",s);
getch();}
25. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
main(){
char a[ ]="123456789",* p;
int i=0;p=a;
while( * p)
{if(i%2==0) *p='*';
p++;i++;}
puts(a);
getch();}
26. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
main()
{ int a[3][3], i, j, n=1;
for( i=0;i<3; i++)
for( j=0;j<3;j++)
a[i][j]=n++;
printf("The result is :
");
for( i=0;i<3;i++)
{for ( j=0; j<=i; j++)
printf ("%2d",a[i][j]);
printf("
");}
getch();}
27. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
void sort(int a[ ]);
int main( )
{ int a[5]={ 9,7,15,3,-1},i;
sort(a);
for(i=0;i<=4;i++) printf("%d ",a[i]);
getch();}
void sort(int a[ ])
{int i,j ,t,p;
for(j=0;j<4;j++)
{ p=j;
for(i=j;i<=4;i++) if(a[i]<a[p]) p=i;
t=a[p];a[p]=a[j];a[j]=t;}}
三、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分)
28. 以下程序是应用递归算法求某数a的平方根,请填空。求平方根的迭代公式如下:
# include <stdio.h>
# include <math.h>
double mysqrt( double a,double x0 )
{ double x1,y;
x1=【1】;
if(fabs(x1-x0)>0.00001) y=mysqrt(【2】);
else y=x1;
return y;
main()
{ double x;
printf("Enter x: ") ; scanf("%lf",&x);
printf("The sqrt of %f=%f
",x,【3】);
return(0);}
29. 下面程序的功能是按字典顺序比较两个字符串s和t的大小。如果s大于t,则返回正值;如果s等于3则返回0;如果s小于t,则返回负值。请填空。
#include<stdio.h>
#include<conio.h>
int s(char * s,char * t)
{ for( ;* s== *t;【1】)
if( * s=='\0') return(0);
return( 【2】); }
int main( )
{ char a[20], b[10], * p, * q;
int i;
p=a; q=b;
scanf("%s%s",a,b);
i=s(【3】);
printf("%d",i);
getch();}
30. 下面程序的功能是将字符串中从第一个数字字符开始的所有字符复制到另一个字符数组中。请填空。
#include <stdio.h>
#include<conio.h>
main(){
char s1[80],s2[80]=" ",*p,*q;
gets(s1);
q=s2;p=s1;
while( * p!='\0')
{ 【1】;
p++; q++;}
【2】;
puts(s2); getch();}
四、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。(每处3分,共15分)
31. 某班举行歌唱比赛,赛后需要显示成绩最高的选手名字和成绩,以下程序实现了查找得分最高选手的功能,只对程序中的3行代码进行修改,使其可以正确运行。
L1 #include<stdio.h>
L2 #include<conio.h>
L3 #include<string.h>
L4 #define MAX 3
L5 struct PLAYER
L6 { char * name;
L7 float score;}
L8 Player;
L9 int main( )
L10 {
L11 Player players[]={{"丁一",90.3},{"陈二",95.8},{"张三",89.6}};
L12 Player *player;
L13 Player topPlayer=players[0];
L14 for(player =players;player<players+MAX;player++)
L15 {
L16 if(player.score>topPlayer.score )
L17 topPlayer=player;
L18 }
L19 printf("TopPlayer is %s,score is %6.2f",topPlayer .name,topPlayer.score);
L20 getch();}
32. 以下程序的功能是求1000以内的水仙花数。(提示:所谓水仙花数是指一个3位正整数,其各位数字的立方之和等于该正整数。例如:407=4*4*4+0*0*0+7*7&7,故 407是一个水仙花数。)程序中有两处错误,请改正。
L1 #include <stdio.h>
L2 #include<conio.h>
L3 main()
L4 {int x,y,z,a[8],m,i=0;
L5 printf("The special numbers are:
");
L6 for (m=100;m<1000;m++)
L7 { x=m/100;
L8 y=m%100;
L9 z=m%10;
L10 if(x*100+y*10+z=x* x*x+y*y*y+z*z*z)
L11 {a[i]=m; i++;}
L12 }
L13 for( x=0;x<i;x++)
L14 printf("%6d",a[x]);
L15 getch();}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$
《编程语言基础——C语言》高等教育出版社(第五版)
编程语言基础(C语言) 模拟卷(三)
考试时间:100分钟 满分:100分
姓名 班级 学号 1
1、 单项选择题(本题共20小题,每题2分,共40分,多选、错选均不得分)
1. 若有定义:int a[2][3] ;则对 a数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的正确引用为( )
A.a[i]+j B.*(a+j) C.*(a[i]+j) D.(a+i)
答案:D
2. 若有定义:int a[ ]={2,4,6,8,10,12,14,16,18,20,22,24}, * q[4], k ;则下面程序段的输出结果是( )
for(k=0;k<4;k++) q[k]=&a[k * 3];
printf ("%d
",q[3][0] );
A.8 B.12 C.16 D.20
答案:D
3. 以下程序的输出结果是( )
int main( )
{ char s[20]="abcd";
char * sp=s;sp+2;
puts(strcat(sp,"ABCD"));
getch();}
A.abABCD B. ABCD C. abcd D. abcdABCD
答案:D
4. 执行程序段:int x=123,y=023;int z=x|y||x;后,z的值是( )
A.0 B.1 C.123 D.19
答案:B
5. 下列关于算法的描述中,正确的一项是( )
A.算法只能用编程语言来描述
B.算法必须是有限的步骤
C.算法不需要输入
D.算法只能用数学公式来表示
答案:B
6. 若文本文件abc1.txt中原有内容为good,则运行下列程序后文件abc1.txt中的内容为( )
#include<stdio.h>
main()
{FILE *fp1;
fp1=fopen(“abc1.txt”,“r+”);
fprintf(fp1,“abc”);
fclose(fp1);}
A.abcd B.goodabc C.abc D.abcgood
答案:B
7. 执行程序段:int a=12,b=14;a+=a-=b*=b;后,b的值是( )
A.-368 B.144 C.-196 D.196
答案:D
8. 设有以下程序,运行后的输出结果是( )
main()
{int x=1,a=0,b=0;
switch (x)
{ case 0: b++;
case 1: a++;
case 2: a++;b++;}
printf("a=%d,b=%d",a,b);}
A.2,2 B.2,1 C.1,1 D.1,0
答案:B
9. 设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为( )
A、不确定 B、double C、int D、float
答案:B
10. 设有如下的程序段:char s[]="girl", *t; t=s;则下列叙述正确的是( )
A.s和t完全相同
B.数组s中的内容和指针变量t中的内容相等
C.s数组长度和t所指向的字符串长度相等
D.*t与s[0]相等
答案:D
11. 以下正确的程序段是( )
A. char s[20]; B. char *s;
scanf("%s", &s); scanf("%s", s);
C. char s[20]; D. char s[20], *t=s;
scanf("%s", &s[2]); scanf("%s", t[2]);
答案:B
12. 文件中的位置指针,指向当前读写的位置,下列不可使p所指向的位置返回到文件开头的选项是( )
A.rewind(p) B.fseek(p,0,SEEK_CUR);
C.fseek(p,0,0); D. fseek(p,0,SEEK_SET);
答案:B
13. 下列程序的运行结果是( )
main()
{ int i,x[10]={ 1,3,0,3,0,2,3,2,1,3 },y[4]={0};
for( i=0;i<10;i++) y[x[i]]++;
printf("%d
",y[3]);
getch();}
A.10 B.2 C.2 2 2 4 D.4
答案:D
14. 设 a、b、c 均为 int 型变量且 a=6,b=4,c=2,则表达式 !(a-b)+c-1&&b+c/2 的值是( )
A.1 B.0 C.-1 D.2
答案:A
15. 设 a、b、c均为int 型变量且a=7.5,b=2,c=3.6,则表达式 a>b&&c>a||a<b &&!c>b的值是( )
A.0 B.1 C.-1 D.2
答案:A
16. 以下选项中,当x为大于1的奇数时,值为0的表达式是( )
A.x%2==1 B.x/2 C.x%2!=0 D.x%2==0
答案:D
17. 若有定义:int a;long b;double x,y;,无论a、b、x、y为何值,表达式都正确的选项是( )
A.a%(int)(x-y); B.a=x!=y; C.(a*y)%b; D.y=x+y=x;
答案:B
18. 已知:int i=10;,表达式20-0<=i<=9的值是( )
A.0 B.1 C.19 D.20
答案:B
19. 若int x=-1;,则while(!x) x=x+10;语句中循环体的执行次数为( )
A.1 B.0 C.2 D.无数次
答案:B
20. 将字符串b连接到字符串a的末尾,应当使用的语句是( )
A.strcpy(a,b); B.strcat(b,a); C.strcat(a,b); D.strcmp(b,a);
答案:C
二、程序运行结果题(本题共7小题,每题3分,共21分)
21. 若输入的值是7,则以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int s(int * p)
{ int sum=10;sum=sum+ * p;
return(sum);}
int main( )
{ int a=0,i, * p,sum;
for(i=0;i<=2;i++)
{ p=&a;scanf("%d",p);
sum=s(p); printf("sum= %d
",sum);
getch();}}
答案:sum= 17
22. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int main( )
{ int a[]={5,1,4,7,8,9};
int *p=a+4;
int sum=1,i=0,q=-1;
for(;i<3;i++)
sum+=p[q--];
printf("sum=%d",sum);
getch();}
答案:sum=13
23. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
#include<stdlib.h>
void fun (float *p1,float *p2,float *s)
{s=(float *)malloc(sizeof(float));
*s=++(*p1)+*(p2++);}
main(){
float a[2]={2.5,4.5},b[2]={10.5,24.2};
float *s=a;
fun(a,b,s);
printf("%.1f
",*s);
getch();}
答案:3.5
24. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
main(){
char a[ ]="6789", * p;
int s=0;
for (p=a;* p!='\0';p++) s=10*s+*p-'0';
printf("%d
",s);
getch();}
答案:6789
25. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
main(){
char a[ ]="123456789",* p;
int i=0;p=a;
while( * p)
{if(i%2==0) *p='*';
p++;i++;}
puts(a);
getch();}
答案:*2*4*6*8*
26. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
main()
{ int a[3][3], i, j, n=1;
for( i=0;i<3; i++)
for( j=0;j<3;j++)
a[i][j]=n++;
printf("The result is :
");
for( i=0;i<3;i++)
{for ( j=0; j<=i; j++)
printf ("%2d",a[i][j]);
printf("
");}
getch();}
答案:
The result is :
1
4 5
7 8 9
27. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
void sort(int a[ ]);
int main( )
{ int a[5]={ 9,7,15,3,-1},i;
sort(a);
for(i=0;i<=4;i++) printf("%d ",a[i]);
getch();}
void sort(int a[ ])
{int i,j ,t,p;
for(j=0;j<4;j++)
{ p=j;
for(i=j;i<=4;i++) if(a[i]<a[p]) p=i;
t=a[p];a[p]=a[j];a[j]=t;}}
答案:-1 3 7 9 15
三、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分)
28. 以下程序是应用递归算法求某数a的平方根,请填空。求平方根的迭代公式如下:
# include <stdio.h>
# include <math.h>
double mysqrt( double a,double x0 )
{ double x1,y;
x1=【1】;
if(fabs(x1-x0)>0.00001) y=mysqrt(【2】);
else y=x1;
return y;
main()
{ double x;
printf("Enter x: ") ; scanf("%lf",&x);
printf("The sqrt of %f=%f
",x,【3】);
return(0);}
【答案】
【1】(x0+a/x0)/2.0
【2】a,x1
【3】mysqrt(x,1.0)
29. 下面程序的功能是按字典顺序比较两个字符串s和t的大小。如果s大于t,则返回正值;如果s等于3则返回0;如果s小于t,则返回负值。请填空。
#include<stdio.h>
#include<conio.h>
int s(char * s,char * t)
{ for( ;* s== *t;【1】)
if( * s=='\0') return(0);
return( 【2】); }
int main( )
{ char a[20], b[10], * p, * q;
int i;
p=a; q=b;
scanf("%s%s",a,b);
i=s(【3】);
printf("%d",i);
getch();}
答案:
【1】t++,s++
【2】* s- * t
【3】p,q
30. 下面程序的功能是将字符串中从第一个数字字符开始的所有字符复制到另一个字符数组中。请填空。
#include <stdio.h>
#include<conio.h>
main(){
char s1[80],s2[80]=" ",*p,*q;
gets(s1);
q=s2;p=s1;
while( * p!='\0')
{ 【1】;
p++; q++;}
【2】;
puts(s2); getch();}
答案:
【1】*q=*p
【2】*q='\0'
四、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。(每处3分,共15分)
31. 某班举行歌唱比赛,赛后需要显示成绩最高的选手名字和成绩,以下程序实现了查找得分最高选手的功能,只对程序中的3行代码进行修改,使其可以正确运行。
L1 #include<stdio.h>
L2 #include<conio.h>
L3 #include<string.h>
L4 #define MAX 3
L5 struct PLAYER
L6 { char * name;
L7 float score;}
L8 Player;
L9 int main( )
L10 {
L11 Player players[]={{"丁一",90.3},{"陈二",95.8},{"张三",89.6}};
L12 Player *player;
L13 Player topPlayer=players[0];
L14 for(player =players;player<players+MAX;player++)
L15 {
L16 if(player.score>topPlayer.score )
L17 topPlayer=player;
L18 }
L19 printf("TopPlayer is %s,score is %6.2f",topPlayer .name,topPlayer.score);
L20 getch();}
答案:
【1】L5 typedef struct PLAYER
【2】L16 if(player->score>topPlayer.score )
【3】L17 topPlayer=*player;
32. 以下程序的功能是求1000以内的水仙花数。(提示:所谓水仙花数是指一个3位正整数,其各位数字的立方之和等于该正整数。例如:407=4*4*4+0*0*0+7*7&7,故 407是一个水仙花数。)程序中有两处错误,请改正。
L1 #include <stdio.h>
L2 #include<conio.h>
L3 main()
L4 {int x,y,z,a[8],m,i=0;
L5 printf("The special numbers are:
");
L6 for (m=100;m<1000;m++)
L7 { x=m/100;
L8 y=m%100;
L9 z=m%10;
L10 if(x*100+y*10+z=x* x*x+y*y*y+z*z*z)
L11 {a[i]=m; i++;}
L12 }
L13 for( x=0;x<i;x++)
L14 printf("%6d",a[x]);
L15 getch();}
答案:
【1】L8 y=m%100/10;
【2】L10 if(x*100+y*10+z==x* x*x+y*y*y+z*z*z
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$