内容正文:
《编程语言基础——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+i)+j
C.*(a+i+j) D.*(*(a+i)+j)
2. 有以下程序段,若k为int型变量且 0≤k<4, 则对字符串的不正确引用是( )
char str[4][10]={"first","second","third","fourth"}, * strp[4];
int n;for ( n=0;n<4;n++) strp[n]=str[n];
A.strp B.*strp C.str[k] D.strp[k]
3. 标准函数fgets(s,n,f)的功能是( )
A.从文件f中读取长度为n的字符串存入指针s所指向的内存
B.从文件f中读取长度为n-1的字符串存入指针s所指向的内存
C.从文件f中读取n个字符串存入指针s所指向的内存
D.从文件f中读取长度不超过n-1的字符串存入指针s所指向的内存
4. 设有定义:char *a[2]={"1234","5678"};则正确的叙述是( )
A. a数组的两个元素中各自存放了字符串"1234"和"5678"的首地址
B. a数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
C. a是指针变量,它指向含有两个数组元素的字符型一维数组
D. a数组元素的值分别是1234 和5678
5. 语句 int( *ptr)( );的含义是( )
A. ptr 是指向一维数组的指针变量
B. ptr 是指向 int 型数据的指针变量
C. ptr 是指向函数的指针,该函数返回一个int型数据
D. ptr 是一个函数名,该函数的返回值是指向int型数据的指针
6. 以下程序的输出结果是( )
main(){
int x,y,z;
x = 1; y = 2; z = 3;
if(x>y)
if(x>z)printf("%d",x);
else printf("%d",y);
printf("%d
",z);
getch();}
A.3 B.1 C.2 D.无输出
7. 以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h">
main()
{int i;
for(i=0; i<3; i++)
switch(i)
{ case 1: printf("%d", i);
case 2: printf("%d", i);
default : printf("%d", i);} getch();}
A.012 B.0111 C.01112 D. 011122
8. 以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
main(){
int a, b, *p = &a, *q = &b;
a = 10; b = 20; *p = b;*q = a;
printf("a=%d,b=%d
", a, b);
getch();}
A.a=10,b=20 B.a=20,b=10 C. a=20,b=20 D.a=10,b=10
9. 下列程序的运行结果是( )
main(){
int x = 2;
while ( x-- );
printf("%d
", x);
getch();}
A.2 B.1 C.0 D. -1
10. 下列程序的运行结果是( )
main(){
int i=1,j=3;
printf("%d,", i++);
{int i = 0; i += j * 2;
printf("%d,%d,", i,j ); }
printf("%d,%d
", i,j ); getch();}
A. 1,6,3,2,3 B.1,6,3,2,2 C.1,3,5,7,9 D.以上选项均不正确
11. 以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
main(){
int k=8;
switch(k)
{case 9: k+=1;
case 10: k+=1;
case 11: k+=1; break;
default: k+=1;}
printf("%d
",k);
getch();}
A.8 B.7 C.10 D.9
12. 若有定义:union{int a;char c;float x;}b;,则变量b占用的字节数为( )
A.4 B.1 C.9 D.不确定
13. 执行下列程序段后,z的二进制值是( )
char x=3,y=6,z;
z=x^y<<2;
A.000101000 B.00011011 C.00011100 D.00011000
14. 若有下列程序段,则下面叙述中,错误的一项是( )
union data
{int d1;float d2;}t;
A.变量t与成员d2所占的内存字节数相同
B.成员d1和d2的地址相同
C.变量t和成员d2的地址相同
D.若给t.d1赋值99后,则t.d2中的值是99.0
15. 在宏定义:#define PI 3.1415中,用宏名PI代替一个( )
A.变量 B.单精度数 C.双精度数 D.字符串
16. 下列有关文件的打开方式,叙述正确的一项是( )
A.用“r”的方式打开文件时只能向文件写数据
B.用“R”的方式可以打开文件读数据
C用“w”的方式打开文件时只能向文件写数据,且该文件可以不存在
D.用“a”的方式向已存在的文件写入数据时,会覆盖文件的原有数据
17. 设有语句:int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;,则当0<=i<10时,对数组a的引用错误的一项是( )
A.a[p-a] B.*(*(a+1)) C.p[i] D.*(&a[i])
18. 若有定义:char *s=“\t\’name\\address
”;,则指针s所指向的字符串的长度为( )
A.19 B.18 C.15 D.17
19. 若有语句:char str[]=“hello”,*ptr=str;,则*(ptr+5)的值为( )
A.‘0’ B.‘\0’ C.不确定的值 D.‘\0’的地址
20. 以下有关函数的叙述中,正确的是( )
A.函数定义不能嵌套,但是函数调用可以嵌套
B.函数定义与调用都可以嵌套
C.函数定义可以嵌套,但是函数调用不可以嵌套
D.函数定义与调用都不能嵌套
二、程序运行结果题(本题共7小题,每题3分,共21分)
21. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int a[3][3]={1,2,3,4,5,6,7,8,9}, * p;
void f(int * s,int p[ ][3])
{* s= * (* (p+1)-2);}
int main( )
{ int x=20;p=&x;
f(p,a);
printf("%d
", * p);
getch();}
22. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int *p;
void pp(int a,int * b)
{ int c=5;*p=*b+c;a=*p-c;
printf("(2) %d %d %d
",a, * b, * p);}
int main( )
{ int a=4,b=5,c=6;
p=&b;pp(a+b,&c);
printf("(l) %d %d %d
",a,b, * p);
getch();}
23. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
main(){
int a = 3, b = 2, c = 1;
c -= ++b;
b *= a + c;
{ int b = 5, c = 12;
c /= b * 2;
a -= c;
printf("%d, %d, %d, ", a, b, c );
a += --c;}
printf("%d, %d, %d
", a, b, c);
getch();}
24. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
main()
{ int a[10]={1,2,2,3,4,3,4,5,4,5};
int n=0,i,j,c,k;
for(i=0;i<10-n;i++)
{ c=a[i];
for(j=i+1;j<10-n;j++)
if(a[j]==c)
{ for(k=j;k<10-n;k++)
a[k]=a[k+1];
n++;} }
for(i=0;i<(10-n);i++)
printf("%d",a[i]);
getch();}
25. 当从键盘输入23时,以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
main()
{ int x,y,i,a[8],j,u;
scanf("%d",&x);
y=x;i=0;
do
{ u=y/2;
a[i]=y%2;
i++;y=u;
} while(y>=1);
for(j=i-1;j>=0;j--)
printf("%d",a[j]);
getch();}
26. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
int sub(int n);
int main( )
{ int i=5;
printf("%d
",sub(i));
getch();}
int sub(int n)
{int a;
if(n==1) return 1;
a=n+sub(n-1);
return(a);}
27. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
int fun(char * s)
{char * p=s;
while(*p) p++;
return(p-s);}
int main( )
{char * a="123456789";
int i;
i=fun(a+2);
printf("%d",i);getch();}
三、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分)
28. 以下程序将数组 a中的数据按逆序存放。请填空。
#include <stdio.h>
#include<conio.h>
#define M 8
int main( )
{ int a[M], i, j, t ;
for( i=0;i<M;i++) scanf("%d", a+i );
i=0; j=M-1;
while ( i<j )
{ t= * (a+i);【1】; * (a+j)=t;
i++; j--; }
for( i=0;i<M ;i++)printf("%3d", 【2】);
getch();}
29. 下面程序的功能是检查字符串s中左括号“(”的个数和右括号“)”的个数,如果个数相同或者右括号的个数少于左括号的个数,函数返回1,否则返回0。请填空。
#include <stdio.h>
#include<conio.h>
【1】
int main( )
{char c[80];
int d; gets(c);
d=check(c);
printf("d=%d",d);
getch();}
int check(char * s)
{ int i=0,r=0;
while( * s!='\0')
{ if( * s=='(' ) i++;
else if( * s==')' ) r++;
【2】; }
if (【3】) return(1);
else return(0);}
30. 下面程序的功能是判断输入的字符串是否是“回文”(顺读和倒读都一样的字符串称为“回文”,如level)。请填空。
#include <stdio.h>
#include<conio.h>
#include <string.h>
int main( )
{ char s[81], * p1, * p2;
int n;
gets(s);
n=strlen(s);
p1=s;
p2=【1】;
while(【2】)
{ if(【3】) break;
else { p1++;p2--;} }
if(p1<p2) printf("No
");
else printf("Yes
");getch();}
四、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。(每处3分,共15分)
31. 下列程序的功能是:输入一行字符,将此字符串中最长的单词输出。程序中有五处错误,请改正。
L1 #include <stdio.h>
L2 #include<conio.h>
L3 #include <string.h>
L4 int main()
L5 {int alphabetic(char);
L6 int longest(char []);
L7 int i;
L8 char line[100];
L9 printf("input one line:
");
L10 gets(line);
L11 printf("The longest word is:");
L12 for(i=longest(i);alphabetic(line[i]);i++)
L13 printf("%c",line[i]);
L14 printf("
"); getch();}
L15 int alphabetic(char c) //判断是否为字母
L16 {if((c>='a'&&c<='z')&&(c>='A'&&c<='Z'))
L17 return(1);
L18 else return(0);}
L19 int longest(char string[])//查找最长的单词
L20 {int len=0,i,length=0,flag=1,place=0,point;
L21 for(i=0;i<= string;i++)
L22 if(alphabetic(string[i]))
L23 if(!flag)
L24 {point=i; flag=0;len++;}
L25 else len++;
L26 else
L27 {flag=1;
L28 if(len<=length)
L29 {length=len; place=point;}
L30 len=0;}
L31 return(place);}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$
《编程语言基础——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+i)+j
C.*(a+i+j) D.*(*(a+i)+j)
答案:D
2. 有以下程序段,若k为int型变量且 0≤k<4, 则对字符串的不正确引用是( )
char str[4][10]={"first","second","third","fourth"}, * strp[4];
int n;for ( n=0;n<4;n++) strp[n]=str[n];
A.strp B.*strp C.str[k] D.strp[k]
答案:A
3. 标准函数fgets(s,n,f)的功能是( )
A.从文件f中读取长度为n的字符串存入指针s所指向的内存
B.从文件f中读取长度为n-1的字符串存入指针s所指向的内存
C.从文件f中读取n个字符串存入指针s所指向的内存
D.从文件f中读取长度不超过n-1的字符串存入指针s所指向的内存
答案:D
4. 设有定义:char *a[2]={"1234","5678"};则正确的叙述是( )
A. a数组的两个元素中各自存放了字符串"1234"和"5678"的首地址
B. a数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
C. a是指针变量,它指向含有两个数组元素的字符型一维数组
D. a数组元素的值分别是1234 和5678
答案:A
5. 语句 int( *ptr)( );的含义是( )
A. ptr 是指向一维数组的指针变量
B. ptr 是指向 int 型数据的指针变量
C. ptr 是指向函数的指针,该函数返回一个int型数据
D. ptr 是一个函数名,该函数的返回值是指向int型数据的指针
答案:C
6. 以下程序的输出结果是( )
main(){
int x,y,z;
x = 1; y = 2; z = 3;
if(x>y)
if(x>z)printf("%d",x);
else printf("%d",y);
printf("%d
",z);
getch();}
A.3 B.1 C.2 D.无输出
答案:A
7. 以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h">
main()
{int i;
for(i=0; i<3; i++)
switch(i)
{ case 1: printf("%d", i);
case 2: printf("%d", i);
default : printf("%d", i);} getch();}
A.012 B.0111 C.01112 D. 011122
答案:D
8. 以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
main(){
int a, b, *p = &a, *q = &b;
a = 10; b = 20; *p = b;*q = a;
printf("a=%d,b=%d
", a, b);
getch();}
A.a=10,b=20 B.a=20,b=10 C. a=20,b=20 D.a=10,b=10
答案:C
9. 下列程序的运行结果是( )
main(){
int x = 2;
while ( x-- );
printf("%d
", x);
getch();}
A.2 B.1 C.0 D. -1
答案:D
10. 下列程序的运行结果是( )
main(){
int i=1,j=3;
printf("%d,", i++);
{int i = 0; i += j * 2;
printf("%d,%d,", i,j ); }
printf("%d,%d
", i,j ); getch();}
A. 1,6,3,2,3 B.1,6,3,2,2 C.1,3,5,7,9 D.以上选项均不正确
答案:A
11. 以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
main(){
int k=8;
switch(k)
{case 9: k+=1;
case 10: k+=1;
case 11: k+=1; break;
default: k+=1;}
printf("%d
",k);
getch();}
A.8 B.7 C.10 D.9
答案:D
12. 若有定义:union{int a;char c;float x;}b;,则变量b占用的字节数为( )
A.4 B.1 C.9 D.不确定
答案:A
13. 执行下列程序段后,z的二进制值是( )
char x=3,y=6,z;
z=x^y<<2;
A.000101000 B.00011011 C.00011100 D.00011000
答案:B
14. 若有下列程序段,则下面叙述中,错误的一项是( )
union data
{int d1;float d2;}t;
A.变量t与成员d2所占的内存字节数相同
B.成员d1和d2的地址相同
C.变量t和成员d2的地址相同
D.若给t.d1赋值99后,则t.d2中的值是99.0
答案:D
15. 在宏定义:#define PI 3.1415中,用宏名PI代替一个( )
A.变量 B.单精度数 C.双精度数 D.字符串
答案:D
16. 下列有关文件的打开方式,叙述正确的一项是( )
A.用“r”的方式打开文件时只能向文件写数据
B.用“R”的方式可以打开文件读数据
C用“w”的方式打开文件时只能向文件写数据,且该文件可以不存在
D.用“a”的方式向已存在的文件写入数据时,会覆盖文件的原有数据
答案:C
17. 设有语句:int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;,则当0<=i<10时,对数组a的引用错误的一项是( )
A.a[p-a] B.*(*(a+1)) C.p[i] D.*(&a[i])
答案:B
18. 若有定义:char *s=“\t\’name\\address
”;,则指针s所指向的字符串的长度为( )
A.19 B.18 C.15 D.17
答案:C
19. 若有语句:char str[]=“hello”,*ptr=str;,则*(ptr+5)的值为( )
A.‘0’ B.‘\0’ C.不确定的值 D.‘\0’的地址
答案:B
20. 以下有关函数的叙述中,正确的是( )
A.函数定义不能嵌套,但是函数调用可以嵌套
B.函数定义与调用都可以嵌套
C.函数定义可以嵌套,但是函数调用不可以嵌套
D.函数定义与调用都不能嵌套
答案:A
二、程序运行结果题(本题共7小题,每题3分,共21分)
21. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int a[3][3]={1,2,3,4,5,6,7,8,9}, * p;
void f(int * s,int p[ ][3])
{* s= * (* (p+1)-2);}
int main( )
{ int x=20;p=&x;
f(p,a);
printf("%d
", * p);
getch();}
答案:2
22. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int *p;
void pp(int a,int * b)
{ int c=5;*p=*b+c;a=*p-c;
printf("(2) %d %d %d
",a, * b, * p);}
int main( )
{ int a=4,b=5,c=6;
p=&b;pp(a+b,&c);
printf("(l) %d %d %d
",a,b, * p);
getch();}
答案:
(2) 6 6 11
(l) 4 11 11
23. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
main(){
int a = 3, b = 2, c = 1;
c -= ++b;
b *= a + c;
{ int b = 5, c = 12;
c /= b * 2;
a -= c;
printf("%d, %d, %d, ", a, b, c );
a += --c;}
printf("%d, %d, %d
", a, b, c);
getch();}
答案:2, 5, 1, 2, 3, -2
24. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
main()
{ int a[10]={1,2,2,3,4,3,4,5,4,5};
int n=0,i,j,c,k;
for(i=0;i<10-n;i++)
{ c=a[i];
for(j=i+1;j<10-n;j++)
if(a[j]==c)
{ for(k=j;k<10-n;k++)
a[k]=a[k+1];
n++;} }
for(i=0;i<(10-n);i++)
printf("%d",a[i]);
getch();}
答案:12345
25. 当从键盘输入23时,以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
main()
{ int x,y,i,a[8],j,u;
scanf("%d",&x);
y=x;i=0;
do
{ u=y/2;
a[i]=y%2;
i++;y=u;
} while(y>=1);
for(j=i-1;j>=0;j--)
printf("%d",a[j]);
getch();}
答案:10111
26. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
int sub(int n);
int main( )
{ int i=5;
printf("%d
",sub(i));
getch();}
int sub(int n)
{int a;
if(n==1) return 1;
a=n+sub(n-1);
return(a);}
答案:15
27. 以下程序的运行结果是【 】。
#include <stdio.h>
#include<conio.h>
int fun(char * s)
{char * p=s;
while(*p) p++;
return(p-s);}
int main( )
{char * a="123456789";
int i;
i=fun(a+2);
printf("%d",i);getch();}
答案:7
三、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分)
28. 以下程序将数组 a中的数据按逆序存放。请填空。
#include <stdio.h>
#include<conio.h>
#define M 8
int main( )
{ int a[M], i, j, t ;
for( i=0;i<M;i++) scanf("%d", a+i );
i=0; j=M-1;
while ( i<j )
{ t= * (a+i);【1】; * (a+j)=t;
i++; j--; }
for( i=0;i<M ;i++)printf("%3d", 【2】);
getch();}
答案:
【1】*(a+i)=*(a+j)
【2】*(a+i)
29. 下面程序的功能是检查字符串s中左括号“(”的个数和右括号“)”的个数,如果个数相同或者右括号的个数少于左括号的个数,函数返回1,否则返回0。请填空。
#include <stdio.h>
#include<conio.h>
【1】
int main( )
{char c[80];
int d; gets(c);
d=check(c);
printf("d=%d",d);
getch();}
int check(char * s)
{ int i=0,r=0;
while( * s!='\0')
{ if( * s=='(' ) i++;
else if( * s==')' ) r++;
【2】; }
if (【3】) return(1);
else return(0);}
答案:
【1】int check(char * s);
【2】s++
【3】r==i||r<i
30. 下面程序的功能是判断输入的字符串是否是“回文”(顺读和倒读都一样的字符串称为“回文”,如level)。请填空。
#include <stdio.h>
#include<conio.h>
#include <string.h>
int main( )
{ char s[81], * p1, * p2;
int n;
gets(s);
n=strlen(s);
p1=s;
p2=【1】;
while(【2】)
{ if(【3】) break;
else { p1++;p2--;} }
if(p1<p2) printf("No
");
else printf("Yes
");getch();}
答案:
【1】s+n-1
【2】p1<p2
【3】*p1!=*p2
四、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。(每处3分,共15分)
31. 下列程序的功能是:输入一行字符,将此字符串中最长的单词输出。程序中有五处错误,请改正。
L1 #include <stdio.h>
L2 #include<conio.h>
L3 #include <string.h>
L4 int main()
L5 {int alphabetic(char);
L6 int longest(char []);
L7 int i;
L8 char line[100];
L9 printf("input one line:
");
L10 gets(line);
L11 printf("The longest word is:");
L12 for(i=longest(i);alphabetic(line[i]);i++)
L13 printf("%c",line[i]);
L14 printf("
"); getch();}
L15 int alphabetic(char c) //判断是否为字母
L16 {if((c>='a'&&c<='z')&&(c>='A'&&c<='Z'))
L17 return(1);
L18 else return(0);}
L19 int longest(char string[])//查找最长的单词
L20 {int len=0,i,length=0,flag=1,place=0,point;
L21 for(i=0;i<= string;i++)
L22 if(alphabetic(string[i]))
L23 if(!flag)
L24 {point=i; flag=0;len++;}
L25 else len++;
L26 else
L27 {flag=1;
L28 if(len<=length)
L29 {length=len; place=point;}
L30 len=0;}
L31 return(place);}
答案:
【1】L12 for(i=longest(line);alphabetic(line[i]);i++)
【2】L16 {if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
【3】L21 for(i=0;i<=strlen(string);i++)
【4】L23 if(flag)
【5】L28 if(len>=length)
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$