内容正文:
《编程语言基础——C语言》高等教育出版社(第五版)
编程语言基础(C语言) 模拟卷(二)
考试时间:100分钟 满分:100分
姓名 班级 学号 1
1、 单项选择题(本题共20小题,每题2分,共40分,多选、错选均不得分)
1. fwrite 函数的一般调用形式是( )
A. fwrite(buffer,count,size,fp);
B. fwrite(fp,size,count,buffer);
C. fwrite(fp,cout,size,buffer);
D. fwrite(buffer,size,count,fp);
2. 若有以下定义和语句,则对a数组元素地址的正确引用为( )
int a[2][3],( * p)[3];
p=a;
A.p[1]+1 B.*(p+2) C.p[2] D.(p+1)+2
3. 已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是( )
A. p=max;
B. p=max(a,b);
C. *p=max;
D. *p=max(a,b);
4. 下列程序的输出结果是( )
int main( )
{ char s[80], *sp="HELLO!";
sp=strcpy(s,sp); s[0]='G';
puts(sp);getch();}
A. HELLO!
B. ELLO!
C. G
D. GELLO!
5. 相同结构体类型的变量之间,可以( )
A.比较大小 B.地址相同 C.赋值 D.相加
6. 能正确表示逻辑关系:" a≥10或a≤0 "的C语言表达式是( )
A.a>=0 | a<=10 B.a>=10 or a<=0
C.a>=10 && a<=0 D.a>=10 || a<=0
7. 已有定义 int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是( )
A.a=*p1+*p2; B.p1=a; C.p1=p2; D.a=*p1*(*p2);
8. 若有说明:int *p, a=1, b; 以下正确的程序段是( )
A. p=&b; B. scanf("%d", &b);
scanf("%d", &p); *p=b;
C. p=&b; D. p=&b;
scanf("%d", *p); *p=a;
9. 以下程序的输出结果是( )
main(){
int a[10]={1,3,5,7,9,11,13,15,17,19},*p=&a[4],*q=p+3;
printf("%d",*p+*(q+1));
getch(); }
A.12 B.24 C.25 D.26
10. 设有定义char a,b;若想要通过a&b运算保留a的第3位和第6位的值,则b的二进制数应该是( )
A.11011011 B.00010010 C.01110010 D.00100100
11. 下列程序段的运行结果是( )
main()
{int x[5],i;
x[0]=1;x[1]=1;
for(i=2;i<5;i++) x[i]=x[i-1]+x[i-2];
for(i=2;i<5;i++) printf("%d ",x[i]);
getch();}
A.3 5 8 B.1 1 2 C.1 2 3 D. 2 3 5
12. 已有定义:int a[5];则以下为a[0]中输入数据的语句中,错误的一项是( )
A.scanf(“%d”,a[0]); B.scanf(“%d”,a);
C.scanf(“%d”,&a[0]); D.scanf(“%d”,&a);
13. 若有语句:int c1=1,c2=2,c3;c3=1.0/c2*c1;则c3的值是( )
A.0 B.0.5 C.1 D.2
14. 下列选项中,对数组进行初始化的方式不正确的一项是( )
A.char a[5]={“ABCD”}; B.char a[5]=“”;
C.char a[5]={‘A’,‘B’,‘C’,‘D’}; D.char a[5]=“ABCDE”;
15. 语句:while(!E);中的表达式!E等价于( )
A.E==0 B.E!=1 C.E!=0 D.E==1
16. else总是与在其之前( )if配对
A.最近的 B.缩进相同的 C.最远的 D.最近的、未配对的、同一{}内的
17. 下列选项中,可以判断整数n是否为两位数的表达式是( )
A.10<=n<=99 B.10<=n||n<=99 C.10<=n,n<=99 D.10<=n&&n<=99
18. 下列表达式中,值不为4的是( )
A.sizeof(“ABC”) B.sizeof(‘1’) C.sizeof(1F) D.strlen(“ABCD”)
19. 下列选项中,说法正确的一项是( )
A.预处理命令都以#开头
B.预处理命令都以分号开头
C.#include后只能是.h文件
D.用#define定义的符号常量可以用于说明数组大小
20. 已有语句:int a=1,b=0,c=a>0?++b:- -b;,则b和c的值分别是( )
A.-1 1 B.-1 -1 C.0 1 D.1 1
二、程序运行结果题(本题共7小题,每题3分,共21分)
21. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
void fun(int * x,int * y)
{printf("%d %d", * x, * y);
*x=1+*y;
*y=3+*x;}
int main( )
{ int x=7,y=8;
fun(&y,&x);
printf(" %d %d ",x,y);
getch();}
22. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
int fun()
{static int x=1;
x=x*2;
return x++;}
main(){
int i,s=1;for(i=1;i<=4;i++) s+=fun();
printf("%d+%d",s,s+1);
getch();}
23. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
main(){
char s[ ]="ab\'cefg\'",*p=s+1;
printf("%c+", * (p++));
printf("%s",p+2);
getch();}
24. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
main()
{int a[3][3]={1,3,6,7,9,11,14,15,17},s1=0,s2=0,i,j;
for( i=0;i<3;i++)
for( j=0;j<3;j++)
if( i==j ) s1=s1+a[i][j];
for( i=0;i<3;i++)
for (j=2;j>=0;j--)
if ((i+j)==2) s2=s2+a[i][j];
printf("s1=%d,s2=%d
",s1,s2 );
getch();}
25. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
void f(int a[ ])
{int i=0;
while(a[i]<=10)
{ printf("%d ",a[i]);
i++;} }
int main( )
{int a[ ]={1,5,10,9,11,7};
f(a+1);
getch();}
26. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
void sort(int a[ ])
{int i,j,t;
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
if(a[j]>a[j+1]){ t=a[j];a[j]=a[j+1];a[j+1]=t;}}
int main( )
{int a[5]={-5,10,-7,3,7},i,t,j;
sort(a);
for(i=0;i<=4;i++) printf("%d ",a[i]);
getch();}
27. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
int fun( )
{int n=0,i,j,k;
for(i=1;i<=9;i++)
for(k=0;k<=8;k=k+2)
for(j=0;j<=9;j++)
if(j==i&&i==k) n++;
return n;}
int main( )
{int n;
n=fun( );
printf("n= %d
",n);getch();}
三、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分)
28. 下面程序的功能是统计子串substr在母串str中出现的次数。请填空。
#include<stdio.h>
#include<conio.h>
#include<string.h>
int count(char * str, char * substr)
{ int i,j,k,num=0;
for(i=0;【1】;i++)
for(j=i,k=0;【2】;k++,j++)
if(substr[【3】]=='\0') { num++;break;}
return(num);}
int main( )
{ char str[80], substr[80];
int n;
gets(str); gets(substr);
printf("%d
",count(str,substr));
getch();}
29. 下面程序的功能是用递归法将一个整数存放到一个字符数组中,按逆序存放。如将583存放成385。请填空。
#include<stdio.h>
#include<conio.h>
void convert(char * a,int n)
{ int i;
if((【1】)!=0) convert(a+1,i);
* a=【2】; }
int main( )
{int number;
char str[10]="";
scanf("%d",&number);
convert(str,number);
puts(str);
getch();}
30. 下列程序的功能是统计文本文件abc.txt中的英语字母、阿拉伯数字字符的个数,请填空。
#include<stdio.h>
#include<conio.h>
main()
{ int a=0,b=0;
FILE *fp;char ch;
fp=fopen(“abc.txt”,“r”);
if(fp==NULL)
{ printf(“file open fail!”);
exit(0);}
while(【1】)
{ if(【2】) a++;
if(ch>=‘0’&&ch<=‘9’) b++;}
printf(“英文字母的个数为:%d,阿拉伯数字的个数为:%d”,a,b);
【3】 ;getch();}
四、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。(每处3分,共15分)
31. 下面程序将二维数组 a的行和列元素互换后存到另一个二维数组b中。程序中有两处错误,请改正。
L1 #include <stdio.h>
L2 #include<conio.h>
L3 main()
L4 { int a[2][3]={{1,2,3},{4,5,6}};
L5 int b[3][2],i,j;
L6 printf("array a:
");
L7 for(i=0;i<=1;i++)
L8 { for(j=0;j<=2;j++)
L9 { printf("%5d",a[i][j] );
L10 b[i][j]=a[i][j];}
L11 printf("
");}
L12 printf("array b:
");
L13 for(i=0;i<=2;i++)
L14 { for(j=0;j<=1;j++)
L15 printf("%5d",a[i][j]);
L16 printf("
");}
L17 getch();}
32. 下列程序的功能是:在主函数中输入10个等长的字符串,用另一个函数对他们进行排序,然后在主函数中输出这10个已经排好序的字符串。
L1 #include <stdio.h>
L2 #include<conio.h>
L3 #include <string.h>
L4 int main()
L5 {void sort(char s[][6]);
L6 int i;
L7 char str[10][6];
L8 printf("input 10 strings:
");
L9 for(i=0;i<10;i++)
L10 scanf("%s",str[i]);
L11 sort(str);
L12 printf("Now,the sequence is :
");
L13 for(i=0;i<10;i++)
L14 printf("%s
",str[i]);
L15 getch();}
L16 void sort(char s[10][6])
L17 {int i,j;
L18 char *p,temp[10];
L19 *p=temp;
L20 for(i=0;i<9;i++)
L21 for(j=0;j<9;j++)
L22 if(strcmp(s[j],s[j+1])<0)
L23 {strcpy(p,s[j]);
L24 strcpy(s[j],s[j+1]);
L25 strcpy(s[j+1],p);}}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$
《编程语言基础——C语言》高等教育出版社(第五版)
编程语言基础(C语言) 模拟卷(二)
考试时间:100分钟 满分:100分
姓名 班级 学号 1
1、 单项选择题(本题共20小题,每题2分,共40分,多选、错选均不得分)
1. fwrite 函数的一般调用形式是( )
A. fwrite(buffer,count,size,fp);
B. fwrite(fp,size,count,buffer);
C. fwrite(fp,cout,size,buffer);
D. fwrite(buffer,size,count,fp);
答案:D
2. 若有以下定义和语句,则对a数组元素地址的正确引用为( )
int a[2][3],( * p)[3];
p=a;
A.p[1]+1 B.*(p+2) C.p[2] D.(p+1)+2
答案:A
3. 已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是( )
A. p=max;
B. p=max(a,b);
C. *p=max;
D. *p=max(a,b);
答案:B
4. 下列程序的输出结果是( )
int main( )
{ char s[80], *sp="HELLO!";
sp=strcpy(s,sp); s[0]='G';
puts(sp);getch();}
A. HELLO!
B. ELLO!
C. G
D. GELLO!
答案:D
5. 相同结构体类型的变量之间,可以( )
A.比较大小 B.地址相同 C.赋值 D.相加
答案:C
6. 能正确表示逻辑关系:" a≥10或a≤0 "的C语言表达式是( )
A.a>=0 | a<=10 B.a>=10 or a<=0
C.a>=10 && a<=0 D.a>=10 || a<=0
答案:D
7. 已有定义 int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是( )
A.a=*p1+*p2; B.p1=a; C.p1=p2; D.a=*p1*(*p2);
答案:B
8. 若有说明:int *p, a=1, b; 以下正确的程序段是( )
A. p=&b; B. scanf("%d", &b);
scanf("%d", &p); *p=b;
C. p=&b; D. p=&b;
scanf("%d", *p); *p=a;
答案:B
9. 以下程序的输出结果是( )
main(){
int a[10]={1,3,5,7,9,11,13,15,17,19},*p=&a[4],*q=p+3;
printf("%d",*p+*(q+1));
getch(); }
A.12 B.24 C.25 D.26
答案:D
10. 设有定义char a,b;若想要通过a&b运算保留a的第3位和第6位的值,则b的二进制数应该是( )
A.11011011 B.00010010 C.01110010 D.00100100
答案:A
11. 下列程序段的运行结果是( )
main()
{int x[5],i;
x[0]=1;x[1]=1;
for(i=2;i<5;i++) x[i]=x[i-1]+x[i-2];
for(i=2;i<5;i++) printf("%d ",x[i]);
getch();}
A.3 5 8 B.1 1 2 C.1 2 3 D. 2 3 5
答案:D
12. 已有定义:int a[5];则以下为a[0]中输入数据的语句中,错误的一项是( )
A.scanf(“%d”,a[0]); B.scanf(“%d”,a);
C.scanf(“%d”,&a[0]); D.scanf(“%d”,&a);
答案:A
13. 若有语句:int c1=1,c2=2,c3;c3=1.0/c2*c1;则c3的值是( )
A.0 B.0.5 C.1 D.2
答案:A
14. 下列选项中,对数组进行初始化的方式不正确的一项是( )
A.char a[5]={“ABCD”}; B.char a[5]=“”;
C.char a[5]={‘A’,‘B’,‘C’,‘D’}; D.char a[5]=“ABCDE”;
答案:D
15. 语句:while(!E);中的表达式!E等价于( )
A.E==0 B.E!=1 C.E!=0 D.E==1
答案:A
16. else总是与在其之前( )if配对
A.最近的 B.缩进相同的 C.最远的 D.最近的、未配对的、同一{}内的
答案:D
17. 下列选项中,可以判断整数n是否为两位数的表达式是( )
A.10<=n<=99 B.10<=n||n<=99 C.10<=n,n<=99 D.10<=n&&n<=99
答案:D
18. 下列表达式中,值不为4的是( )
A.sizeof(“ABC”) B.sizeof(‘1’) C.sizeof(1F) D.strlen(“ABCD”)
答案:B
19. 下列选项中,说法正确的一项是( )
A.预处理命令都以#开头
B.预处理命令都以分号开头
C.#include后只能是.h文件
D.用#define定义的符号常量可以用于说明数组大小
答案:A
20. 已有语句:int a=1,b=0,c=a>0?++b:- -b;,则b和c的值分别是( )
A.-1 1 B.-1 -1 C.0 1 D.1 1
答案:D
二、程序运行结果题(本题共7小题,每题3分,共21分)
21. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
void fun(int * x,int * y)
{printf("%d %d", * x, * y);
*x=1+*y;
*y=3+*x;}
int main( )
{ int x=7,y=8;
fun(&y,&x);
printf(" %d %d ",x,y);
getch();}
答案:8 7 11 8
22. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
int fun()
{static int x=1;
x=x*2;
return x++;}
main(){
int i,s=1;for(i=1;i<=4;i++) s+=fun();
printf("%d+%d",s,s+1);
getch();}
答案:53+54
23. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
main(){
char s[ ]="ab\'cefg\'",*p=s+1;
printf("%c+", * (p++));
printf("%s",p+2);
getch();}
答案:b+efg'
24. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
main()
{int a[3][3]={1,3,6,7,9,11,14,15,17},s1=0,s2=0,i,j;
for( i=0;i<3;i++)
for( j=0;j<3;j++)
if( i==j ) s1=s1+a[i][j];
for( i=0;i<3;i++)
for (j=2;j>=0;j--)
if ((i+j)==2) s2=s2+a[i][j];
printf("s1=%d,s2=%d
",s1,s2 );
getch();}
答案:s1=27,s2=29
25. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
void f(int a[ ])
{int i=0;
while(a[i]<=10)
{ printf("%d ",a[i]);
i++;} }
int main( )
{int a[ ]={1,5,10,9,11,7};
f(a+1);
getch();}
答案:5 10 9
26. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
void sort(int a[ ])
{int i,j,t;
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
if(a[j]>a[j+1]){ t=a[j];a[j]=a[j+1];a[j+1]=t;}}
int main( )
{int a[5]={-5,10,-7,3,7},i,t,j;
sort(a);
for(i=0;i<=4;i++) printf("%d ",a[i]);
getch();}
答案:-7 -5 3 7 10
27. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
int fun( )
{int n=0,i,j,k;
for(i=1;i<=9;i++)
for(k=0;k<=8;k=k+2)
for(j=0;j<=9;j++)
if(j==i&&i==k) n++;
return n;}
int main( )
{int n;
n=fun( );
printf("n= %d
",n);getch();}
答案:n= 4
三、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分)
28. 下面程序的功能是统计子串substr在母串str中出现的次数。请填空。
#include<stdio.h>
#include<conio.h>
#include<string.h>
int count(char * str, char * substr)
{ int i,j,k,num=0;
for(i=0;【1】;i++)
for(j=i,k=0;【2】;k++,j++)
if(substr[【3】]=='\0') { num++;break;}
return(num);}
int main( )
{ char str[80], substr[80];
int n;
gets(str); gets(substr);
printf("%d
",count(str,substr));
getch();}
答案:
【1】str[i]!='\0'
【2】substr[k]==str[j]
【3】k+1
29. 下面程序的功能是用递归法将一个整数存放到一个字符数组中,按逆序存放。如将583存放成385。请填空。
#include<stdio.h>
#include<conio.h>
void convert(char * a,int n)
{ int i;
if((【1】)!=0) convert(a+1,i);
* a=【2】; }
int main( )
{int number;
char str[10]="";
scanf("%d",&number);
convert(str,number);
puts(str);
getch();}
答案:
【1】i=n/10
【2】n%10+'0'
30. 下列程序的功能是统计文本文件abc.txt中的英语字母、阿拉伯数字字符的个数,请填空。
#include<stdio.h>
#include<conio.h>
main()
{ int a=0,b=0;
FILE *fp;char ch;
fp=fopen(“abc.txt”,“r”);
if(fp==NULL)
{ printf(“file open fail!”);
exit(0);}
while(【1】)
{ if(【2】) a++;
if(ch>=‘0’&&ch<=‘9’) b++;}
printf(“英文字母的个数为:%d,阿拉伯数字的个数为:%d”,a,b);
【3】 ;getch();}
答案:
【1】!feof(fp)&&ch=fgetc(fp)
【2】ch>=‘a’&&ch<=‘z’||ch>=‘A’&&ch<=‘Z’
【3】fclose(fp)
四、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。(每处3分,共15分)
31. 下面程序将二维数组 a的行和列元素互换后存到另一个二维数组b中。程序中有两处错误,请改正。
L1 #include <stdio.h>
L2 #include<conio.h>
L3 main()
L4 { int a[2][3]={{1,2,3},{4,5,6}};
L5 int b[3][2],i,j;
L6 printf("array a:
");
L7 for(i=0;i<=1;i++)
L8 { for(j=0;j<=2;j++)
L9 { printf("%5d",a[i][j] );
L10 b[i][j]=a[i][j];}
L11 printf("
");}
L12 printf("array b:
");
L13 for(i=0;i<=2;i++)
L14 { for(j=0;j<=1;j++)
L15 printf("%5d",a[i][j]);
L16 printf("
");}
L17 getch();}
答案:
【1】L10 b[j][i]=a[i][j];}
【2】L15 printf("%5d",b[i][j]);
32. 下列程序的功能是:在主函数中输入10个等长的字符串,用另一个函数对他们进行排序,然后在主函数中输出这10个已经排好序的字符串。
L1 #include <stdio.h>
L2 #include<conio.h>
L3 #include <string.h>
L4 int main()
L5 {void sort(char s[][6]);
L6 int i;
L7 char str[10][6];
L8 printf("input 10 strings:
");
L9 for(i=0;i<10;i++)
L10 scanf("%s",str[i]);
L11 sort(str);
L12 printf("Now,the sequence is :
");
L13 for(i=0;i<10;i++)
L14 printf("%s
",str[i]);
L15 getch();}
L16 void sort(char s[10][6])
L17 {int i,j;
L18 char *p,temp[10];
L19 *p=temp;
L20 for(i=0;i<9;i++)
L21 for(j=0;j<9;j++)
L22 if(strcmp(s[j],s[j+1])<0)
L23 {strcpy(p,s[j]);
L24 strcpy(s[j],s[j+1]);
L25 strcpy(s[j+1],p);}}
答案:
【1】L19 p=temp;
【2】L21 for(j=0;j<9-i;j++)
【3】L22 if(strcmp(s[j],s[j+1])>0)
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$