【解析】C。fun函数功能是新开辟内存空间(地址s)存放a和b的值(通过&a、&b将地址复制给p1、p2),q的地址并没有变化,所以应该还是指向地址a。
36.有以下程序: #include<>
struct STU{char name[9];char sex;int score[2];}; void f(struct STU a[])
{ struct STU b={\,’m’,85,90); a[1]=b; } main()
{struct STU c[2]={{\,’f’,95,92},{\,’m’ 98,99}};
f(c);
printf(”%s,%c,%d,%d,¨,c[0].name,c[0].sex,c[0].score[0],c[o].score[1]);
printf(\,%c,%d,%d\\n\,c[1].name,c[1].sex,c[1].score[o],c[1].score[1]);
}
程序运行后的输出结果是( )。
,m,85,90,Sun,m,98,99 ,m,85,90,Qian,f,95,92 ,f,95,92,Sun,m,98,99 ,f,95,92,Zhao,m,85,90
【解析】D。f函数是为结构体数组的第二个元素(结构体类型的元素)赋值,数组的第一个元素没有变化,所以正确答案应选D。
37.以下叙述中错误的是( )。
A.可以用typedef说明的新类型名来定义变量
说明的新类型名必须使用大写字母,否则会出编译错误 C.用typedef可以为基本数据类型说明一个新名称
D.用typedef说明新类型的作用是用一个新的标识符来代表已存在的类型名
【解析】B。typedef是用来定义新类型,或定义原有类型的别名(新名称)。用typedef说明的类型不是必须用大写,而是习惯上用大写。
38.以下叙述中错误的是( )。
A.函数的返回值类型不能是结构体类型,只能是简单类型 B.函数可以返回指向结构体变量的指针
C.可以通过指向结构体变量的指针访问所指结构体变量的任何成员
D.只要类型相同,结构体变量之间可以整体赋值
【解析】A。函数返回值类型可以是简单类型和结构体类型。 39.若有定义语句int b=2;,则表达式(b<<2)/(3‖b)的值是( )。
【解析】B。2的二进制数为010,移两位后的二进制数为01000,转成十制数为8,(3||2)为真即1,8/ 1=8,所以结果为8。
40.有以下程序: #include <> main()
{ FILE *fp; int i,a[6]={1,2,3,4,5,6}; fp=fopen(\,\
for=(i=0;i<6;i++) fpintf(fp,\,a[i]); rewind(fp);
for(i=0;i<6;i++) fscanf(fp,\,&a[5-i]); fclose(fp);
for(i=0;i%6;i++)printf(\,\,a[i]); }
程序运行后的输出结果是( )。 ,5,6,1,2,3, ,2,3,3,2,1,
,2,3,4,5,6, ,5,4,3,2,1,
【解析】D。这个是对文件的操作,把数组的数写到文件里,然后再从文件里倒序读出。所以输出结果为6,5,4,3,2,1。
二、基本操作题(共18分)
str是一个由数字和字母字符组成的字符串,由变量num传入字符串长度。请补充函数proc(),该函数的功能是:把字符串str中的数字字符转换成数字并存放到整型数组bb中,函数返回数组bb的长度。
例如,str=\,结果为:l234567。 注意:部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干表达式或语句。
试题程序: #include <> #define M 80 int bb[M];
int proc(char str[],int bb[],int num) {
int i,n=0;
for(i=0;i if( 【1】 ) { bb[n]=【2】 ; n++; } } return 【3】 ; } void main() { char str[M]; int num=0,n,i; printf(\:\\n\ gets(str); while(str[num]) num++; n=proc(str,bb,num); printf(\