81、以下函数sstrcat()的功能是实现字符串的连接,即将t所指字符串复制到s所指字符串的尾部。例如:s所指字符串为abcd,t所指字符串为efgh,函数调用后s所指字符串为abcdefgh。请填空。
# include
void sstrcat(char *s, char *t)
{ int n;
n= strlen(s);
while (*(s+n)= 【 】 ){s++; t++;}
}
教师批改:*t
82、以下程序输出的是 【
】
main( )
{ int a[10]={19,23,44,17,37,28,49,36}, *p;
p=a;
printf("%d\n",(p+=3)[3]);
}
教师批改:49
83、以下fun函数的功能是:累加数组元数中的值.n为数组中元素的个数, 累加的和值放入x所指的存储单元中,请填空.
fun(int b[ ],int n, int *x)
{ int k,
r=0;
for(k=0;k
【2】 =r;
教师批改:【1】r+b[k]或b[k]或*(b+k)+r 【2】*x
84、若有以下定义和语句,则使指针p指向值为36的数组元素的表达式是【 】 。
int
a[10]={19,23,44,17,37,28,49,36},*p;
p=a;
教师批改:p=p+7
85、下面程序通过函数average计算数组中各元素的平均值,请填空.
float
average(int * pa,int n)
{ int
i;
float
avg=0.0;
for(i=0;i
avg=【2】;
return
avg; }
main()
{ int
i,a[5]={2,4,6,8,10};
float
mean;
mean=average(a,5); printf("mean=%f\n",mean);}
教师批改:【1】*(pa+i)或 pa[i] 【2】avg/n 或avg/(float)n 或 avg/(double)n
86、下面程序的输出是 【 】 。
main()
{ int
a[]={ 2,4,6}, *prt=&a[0], x=8,y,z;
for(y=0;
y<3; y++)
z=(*(prt+y)
printf("%d\n", z);}
教师批改:6
87、以下程序求a数组中的所有素数的和,函数isprime用来判断自变量是否为素数。素数是只能被1和本身整除且大于1的自然数。
#include
main()
{ int
i,a[10],*p=a,sum=0;
printf("Enter 10 num:\n");
for(i=0;i<10;i + + )
scanf("%d",&a[i]);
for(i=0;i<10;i + + )
if(isprime(*(p+ 【1】 )) = = 1){ printf("%d",*(a+i)); sum+=*(a+i);
}
printf("\nThe sum=%d\n",sum); }
isprime(x)
int
x;
{ int i;
for(i=2;i<=x/2;i + + )
if(x%i = = 0) return (0); 【2】 ; }
教师批改:【1】I 【2】return
1
88、以下程序中,fun函数的功能是求3行4列二维数组每行元素中的最大值.请填空.
void fun(int, int, int (*)[4],int *)
main()
{
int a[3][4]={{12,41,36,28},{19,33,15,27},{3,27,19,1}},b[3],i;
fun(3,4,a,b);
for(i=0;i<3;i++)
printf("%4d",b[i]);
printf("\n");
}
void
fun(int m,int n,int ar[][4],int *br)
{
int i,j,x;
for(i=0;i
{ x=ar[i][0];
for(j=0;j
if(x
【 】 =x;
}
教师批改:br[i]
89、以下程序中,函数
sumColumM的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。请填空。
#define M 2
#define N 4
void
SumColumMin(int a[M][N],int *sum)
{ int
i,j,k,s=0;
for(i=0;i
{ k=0;
for(j=1;j
if(a[k][i]>a[j][i])k=j;
s+= 【1】 ;
}
【2】 =s;
}
main()
{ int
x[M][N]={3,2,5,1,4,1,8,3},s;
SumColumMin( 【3】 );
printf("%d\n",s);
}
教师批改:【1】a[k][i] 【2】*sum 【3】x,&s
90、fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那个数作为函数值返回。请填空。
#include
#define N 100
int fun(int(*a)[N])
{
int row,col,max,min;
for(row=0;row
{
for(max=a[row][0],col=1;col
if( 【1】 )max=a[row][col];
if( row==0)min=max;
else if( 【2】 )min=max;
}
return min;
}
教师批改:【1】a[row][col]>max 或
a[row][col]>=max 或
max<=a[row][col] 【2】Maxmax 或
max<=min 或 min>=max
91、以下程序中,select
函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标。请填空。
#define N 3
#define M 3
select(int a[N][M],int *n)
{ int i,j,row=1,colum=1;
for(i=0;i
for(j=0;j
if(a[i][j]>a[row][colum]){row=i;colum=j;}
*n=
【1】;
return
【2】;
}
main()
{int a[N][M]={9,11,23,6,1,15,9,17,20},max,n;
max=select(a,&n);
printf("max=%d,line=%d\n",max,n);
}
教师批改:【1】row 【2】a[row][colum]
92、设有以下定义的语句:
int a[3][2]={10,20,30,40,50,60}, (*p)[2];
p=a;
则 *(*(p+2)+1)值为【 】 。
教师批改:60
93、以下程序运行后的输出结果是【 】 。
#include
char *ss(char *s)
{ char *p, t;
p=s+1; t=*s;
while(*p) { *(p-1) = *p; p++;}
*(p-1)=t;
return s;
}
main()
{ char *p, str[10]="abcdefgh";
p = ss(str) ;
printf("%s\n",p);
}
教师批改:bcdefgha
94、以下程序运行后的输出结果是 【 】
#include
"string.h"
void
fun(char *s,int p,int k)
{ int i;
for(i=p;i
s[i]=s[i+2];
}
main()
{ char s[]="abcdefg";
fun(s,3,strlen(s));
puts(s);
}
教师批改:abcfg
95、以下程序中函数huiwen的功能是检查一个字符串是否是回文,当字符串是回文时,函数返回字符串:yes
yes!,否则函数返回字符串:no!,并在主函数中输出.所谓回文即正向与反向的拼写都一样,例如:adgda.请填空.
#include "string.h"
char *huiwen(char *str)
{
char *p1,*p2; int i,t=0;
p1=str; p2=
【1】
for(i=0;i<=strlen(str)/2;i++)
if(*p1++!=*p2--)
{ t=1; break; }
if(【2】) return ("yes!");
else return
("no!");
}
main()
{
char str[50];
printf("Input:"); scanf("%s",str);
printf("%s\n",
【3】);
}
教师批改:【1】str+strlen(str)-1 【2】t==0或!t
【3】huiwen(str)
96、以下程序运行后的输出结果是 【 】 。
main
()
{ char
a[]="Language",b[]="Programe";
char *p1,*p2; int k;
p1=a; p2=b;
for(k=0;k<=7;k++)
if(*p1+k)==*(p2+k)} printf("%c",*(p1+k))_;
]
教师批改:gae
97、以下程序运行后的输出结果是 【 】 。
main()
{ char
a[]="123456789",*p; int i=0;
p=a;
while(*p)
{ if(i%2==0) *p=‘*‘;
p++;i++;
}
puts(a);
}
教师批改:*2*4*6*8*
98、以下sstrcpy(
)函数实现字符串复制,即将t所指字符串复制到s所指向内存空间中,形成一个新的字符串s。请填空。
void
sstrcpy(char *s,char *t)
{
while(*s++=【 】);}
main(
)
{ char str1[100],str2[]=”abcdefgh”;
sstrcpy(str1,str2);
printf(“%s\n”,str1);
}
教师批改:*t++
99、下列程序的运行结果是:【 】
#include
char
*ss(char *s)
{ return
s+strlen(s)/2;}
main(
)
{ char *p,*str=”abcdefgh”;
p=ss(str); printf(“%s\n”,p);
}
教师批改:efgh
100、以下程序运行后输入:3,abcde<回车>,则输出结果是 【 】
#include
move(char *str, int n)
{
char temp ; int i;
temp=str[n-1];
for(i=n-1;
i>0;i--) str[i]=str[i-1];
str[0]=temp;
}
main()
{ char s[50]; int n, i, z;
scanf("%d,%s",&n, s);
z=strlen(s);
for(i=1;
i<=n; i++) move(s,z);
printf("%s\n",s);
}
教师批改:cdeab
101、以下函数的功能是删除字符串s中的所有数字字符。请填空。
void
dele(char *s)
{ int
n=0,i;
for(i=0,s[i];i++)
if(【1】)
s[n++]=s[i];
s[n]=【2】;
}
教师批改:【1】s[i]‘9‘
或
!(s[i]>=‘0‘&&s[i]<=‘9‘)
【2】 ‘\0‘或 0 或 NULL
102、函数sstrcmp()的功能是对两个字符串进行比较。当s所指字符串和t所指字符串相等时,返回值为0;当s所指字符串大于t所指字符串时,返回值大于0;当s所指字符串小于t所指字符串时,返回值小于0(功能等同于库函数strcmp())。请填空。
#include
int
sstrcmp(char *s,char *t)
{ while(*s&&*t&& *s== 【1】 )
{ s++;t++;}
return 【2】;
}
教师批改:【1】*t 或 t[0] 【2】*s-*t 或 *s-t[0] 或 s[0]-*t
或 s[0]-t[0]
103、以下程序的输出结果是【 】 。
main()
{ char *p="abcdefgh",*r;
long *q;
q=(long*)p;
q++;
r=(char*)q;
printf("%s\n",r);
}
教师批改:efgh
104、mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。
int mystrlen(char *str)
{
int i;
for(i=0;
【1】!=‘\0‘;i++);
return(【2】);
}
教师批改:【1】*(str+i)str[i]
【2】i
105、以下函数把b字符串连接到a字符串的后面,并返回a中新字符串的长度。请填空。
Strcen(char a[],
char b[])
{ int num=0,n=0;
while(*(a+num)!= 【1】) num++;
while(b[n]){*(a+num)=b[n]; num++;
【2】;}
return(num);
}
教师批改:【1】
‘\0‘或0 【2】n++或n+=1或n=n+1
106、以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。例如,输入的字符串为:556,则输出十进制整数366。请填空。
#include
main()
{ char *p, s[6];
int n;
p=s;
gets(p);
n=*p-‘0‘;
while(【 】!=‘\0‘)n=n*8+*p-‘0‘;
printf("%d \n",n);
}
教师批改:*(++p)
107、下列程序的输出结果是【 】 。
#include
main( )
{ char b[30],*chp;
strcpy(&b[0],"CH");
strcpy(&b[1],"DEF");
strcpy(&b[2],"ABC");
printf("%s \n",b);
}
教师批改:CDABC
108、下面程序的输出结果是 【 】
char b[]="ABCD";
main()
{ char *chp;
for(chp=b; *chp: chp+=2) printf("%s",chp);
printf("\n");
教师批改:ABCDCD
109、以下程序输出的是【 】
main( )
{ int i=3, j=2;
char *a="DCBA";
printf("%c%c\n",a[i],a[j]);
}
教师批改:AB
110、函数mycmp (char*s,chat *t)的功能是比较字符串s和t的大小,当s等于t
时返回0,否则返回s和t的第一个不同字符的ASCOII码的差值,即当s>t时返回正值, 当s等于t
时返回0,否则返回s和t的第一个不同字符的ASCOII码的差值,即当s>t时返回正值,
当s
mycmp(char *s,char *t)
{
while(*s==*t)
{if(*s==‘\0‘) return 0;
++s; ++t;}
return (【
】); }
教师批改:*s=*t
111、下列程序的输出结果是【 】
main()
{ char
b[]="ABCDEFG";
char *chp=&b[7];
while(--chp>&b[0]) putchar(*chp);
putchar(‘\n‘);
}
教师批改:GFEDCB
112、阅读程序:
#include
"string.h"
#include
"stdio.h"
strle(char a[],char b[])
{ int
num=0,n=0;
while(*(a+num)!=‘\0‘),num++;
while(b[n]){ *(a+num)=b[n];num++;n++;}
return (num);
}
main()
{ char
str1[81],str2[81],*p1=str1,*p2=str2;
gets(p1); gets(p2);
printf("%d\n",strle(p1,p2));
}
运行上面程序,如果从键盘上输入字符串qwerty和字符串abcd则程序的输出结果是【 】 。
教师批改:10
113、阅读程序:
main()
{ char
str1[]="how do you do" ,str2[10];
char *p1=str1,*p2=str2;
scanf("%s",p2); printf("%s",p2); printf("%s\n",p1);
}
运行上面的程序,输入字符串HOW DO YOU DO 则程序的输出结果是【 】 。
教师批改:HOW how do you do (说明:HOW
和how之间有无空格均可)
114、下面程序的输出结果是【 】 。
#include
main()
{ static
char b[]="Goodbye";
char *chp=&b[7];
while( --chp >=&b[0]) putchar(
*chp);
putchar(‘\n‘);
}
教师批改:eybdooG
115、下面程序的输出结果是 【 】 。
#include
void fun(
char *a1, char *a2, int n)
{ int
k;
for( k=0; k
a2[k]=( a1[k]-‘A‘-3+26)%26+‘A‘;
a2[n]=‘\0‘;
}
main()
{ char
s1[5]="ABCD", s2[5];
fun( s1,
s2, 4);
puts(
s2);
}
教师批改:XYZA
116、下面程序的输出结果是 【 】 。
#include
main()
{ char
*p[]={ "BOOL", "OPK", "H", "SP"};
int
i;
for(i=3;
i>=0; i--,i--) printf( "%c",
*p[i]);
printf("\n");
}
教师批改:SO
第11章 结构体与共用体
1、设有以下定义或语句,则输出的结果是?(用small模式编译,指针变量占2个字节)
struct date
{
long *cat;
struct date *next;
double dog;
}too;
printf("%d",sizeof(too)); A.20 B.16
C.1D D.12
[D] 教师批改:D
2、设有以下说明语句
struct ex
{ int x ; float y; char z ;} example;
则下面的叙述中不正确的是 A.struct结构体类型的关键字 B.example是结构体类型名
C.x,y,z都是结构体成员名 D.struct
ex是结构体类型
[B] 教师批改:B
3、已知有共用体变量data1定义如下:
union data
{ int i;
char ch;
float f;
} data1;
则变量data1所占的内存存储空间可表示为: A.sizeof(int) B.sizeof(char)
C.sizeof(float) D.sizeof(int)+sizeof(char)+sizeof(float)
[C] 教师批改:C
4、以下对枚举类型名的定义中正确的是 A.enum a={one,two,three}; B.enum a{one=9,two=-1,three};
C.enum a={″one″,″two″,″three″}; D.enum
a{″one″,″two″,″three″};
[B] 教师批改:B
5、以下关于typedef的叙述中错误的是: A.用typedef可以增加新的类型 B.用typedef可以定义各种类型名,但不能用来定义变量
C.用typedef只是将已有的类型用新的标识符来代表 D.使用typedef有利于程序的通用和移植
[A] 教师批改:A
6、当说明一个结构体变量时系统分配给他的内存是__。
A) 各成员所需内存量的总和。 B) 结构中第一个成员所需内存量。
C) 成员中占内存量最大者所需内存量。 D) 结构中最户一个成员所需内存量。
[A] 教师批改:A
7、设有以下语句
struct stu
{int a;
float b;
}stutype;
则下面叙述不正确的是__。
A) struct
是结构体类型的关键字。 B) struct
stu是用户定义的结构体类型。
C) stutype
是用户定义的结构体类型名。 D) a和b都是结构体成员名。
[C] 教师批改:C
8、在16位IBM-PC机上使用的C语言,若有如下定义:
struct data
{int i;
char ch;
double f;
}b;
则结构变量b占用内存的字节数是__。
A) 1 B) 2
C) 8 D) 11
[D] 教师批改:D
9、以下程序的运行结果是__。
#include
“stdio.h”
main()
{struct
date
{int
year,month,day;
}today;
printf(“%d\n”,sizeof(struct date));
}
A) 6 B) 8
C) 10 D) 12
[A] 教师批改:A
10、下面程序的运行结果是__。
main()
{
struct
cmplx{int x;
int y;
}cnum[2]={1,3,2,7};
printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x);
} A) 0 B) 1
C) 3 D) 6
[D] 教师批改:D
11、 有如下定义:
struct sk
{int n;
float x;
}dara,*p;
若要使p指向data中的n域,正确的赋值语句是__。
A) p=&data.n; B) *p=data.n;
C) p=(struct sk *)&data.n; D) p=(struct sk *)data.n;
[C] 教师批改:C
12、若有以下说明和语句:
struct student
{int age;
int
num;
}std.*p;
p=&std;
则以下对结构体变量age引用不正确的是__。
A) std.age B) p->age
C) (*p).age D) *p.age
[D] 教师批改:D
13、若有以下说明和语句,则对pup中sex域的正确引用方式是__。
struct pupil
{char name[20];
int
sex;
}pup,*p;
p=&pup;
A) p.pup.sex; B) p->pup.sex;
C) (*p).pup.sex D) (*p).sex
[D] 教师批改:D
14、以下对结构体变量stul中成员age的非法引用是__。
struct student
{int age;
int
num;
}stu1,*p;
p=&stu1;
A) stu1.age B) student.age
C) p->age D) (*p).age
[B] 教师批改:B
15、C语言共用体类型变量在程序运行期间__。
A) 所有成员一直驻留在内存中。 B) 只有一个成员驻留在内存中。
C) 部分成员驻留在内存中。 D) 没有成员驻留在内存中。
[B] 教师批改:B
16、在16位IBM-PC机上使用C语言,若有如下定义:
union data
{int i;
char ch;
double f;
}b;
则共用体变量b占用内存的字节数是__。
A) 1 B) 2
C) 8 D) 11
[C] 教师批改:C
17、下面对typedef的叙述不正确的是__。
A) 用typedef可以定义各种类型名,但不能用来定义变量。 B) 用typedef可以增加新类型
C) 用typedef只是将已存在的类型用一个新的标识符来代表 D) 使用typedef有利于程序的同意和移植
[B] 教师批改:B
18、以下程序的运行结果是__。
struct n{
int x;
char c;
};
main()
{ struct n
a=(10,’x’);
func(a);
printf(“%d,%c”,a.x,a.c);
}
func(struct n b)
{b.x =20;
b.c=’y’;
}
教师批改:10,x
第13章 文件
1、若fp是指向某文件的指针,且feof(fp)的返回值是非零值,则表示:
A.已读到此文件末尾 B.未读到此文件的末尾
C.此文件已关闭 D.此文件尚未被打开
[A] 教师批改:A
2、系统的标准输入文件是指__。
A) 键盘 B) 显示器
C) 软盘 D) 硬盘
[A] 教师批改:A
3、若执行fopen函数时发生错误,则函数的返回值是__。
A) 地址值 B) 0
C) 1 D) EOF
[B] 教师批改:B
4、若要用fopen打开一个新的二进制文件,该文件既能读也能写,则文件方式字符串应该是__。
A) “ab+” B) “wb+”
C) “rb+” D) “ab”
[D] 教师批改:B
5、当顺利执行了文件关闭操作时,fclose函数的返回值是__。
A) -1 B) TRUE
C) 0 D) 1
[C] 教师批改:C
6、fscanf函数的正确调用形式为__。
A) fscanf(fp,格式字符串,输出列表) B) fscanf(格式字符串, 输出列表,fp)
C) fscanf(格式字符串,输出指针,输出列表) D) fscanf(文件指针,格式字符串,输入列表)
[D] 教师批改:D
7、fwrite函数的一般调用形式为__。
A) fwrite(buffer,count,size,fp); B) fwrite(fp,size,count,buffer);
C) fwrite(“fp,count,size,buffer); D) fwrite(buffer,size,count,fp);
[D] 教师批改:D
8、fgetc函数的作用是从指定文件读入一个字符串,该文件的打开方式必须是__.
A) 只写 B) 追加
C) 读或读写 D) 答案B和C都正确
[C] 教师批改:C
9、若调用fputc函数输出字符成功,其返回值是__。
A) EOF B) 1
C) 0 D) 输出的字符
[D] 教师批改:D
10、利用fseek函数可实现的操作数__。
A) 改变文件的位置指针 B) 文件的顺序读写
C) 文件的随即读写 D) 以上答案均正确
[D] 教师批改:D
11、利用fseek函数可实现的操作数__。
A) 改变文件的位置指针 B) 文件的顺序读写
C) 文件的随即读写 D) 以上答案均正确
[D] 教师批改:D
12、函数rewind的作用是__。
A) 使位置指针重新返回文件的开头 B) 使位置指针指向文件所要求的位置
C) 使位置指针指向文件的末尾 D) 使位置指针自动移至下一个字符的位置
[A] 教师批改:A
13、函数ftell(fp)的作用是__。
A) 得到流式文件中的当前位置 B) 移动流式文件的位置指针
C) 初始化流式文件的位置指针 D) 以上答案均正确
[A] 教师批改:A
14、在执行fopen函数时,ferror函数的初值是__。
A) TRUE B) -1
C) 1 D) 0
[D] 教师批改:D
15、在C程序中,文件可以用【1】的方式存取,也可以用【2】方式存取。
教师批改:【1】
顺序(或随机)【2】随机(或顺序)
16、在C程序中,文件的存取以【1】为单位,这种文件被称作【2】文件。
教师批改:【1】字符 【2】流式
17、函数调用语句:fgets(buf,n,fp);从fp指向的文件中读入【1】个字符放到buf字符数组中,函数值为【2】。
教师批改:【1】n-1 【2】buf的首地址
18、feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为【1】,否则为【2】。
教师批改:【1】非零值
【2】0