}
main()
{intaa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(&aa[3],5);
for(i=0;i<10;i++)printf("%d,",aa[i]);
printf("\n");
}
程序运行后的输出结果是 。
A)1,2,3,4,5,6,7,8,9,10, B)10,9,8,7,6,5,4,3,2,1,
C)1,2,3,8,7,6,5,4,9,10, D)1,2,10,9,8,7,6,5,4,3,
[解析]sort(&aa[3],5)的作用是把数组aa的第3号元素及其后续4个元素(一共5个元素)由大到小排列,其他元素原样输出。
30、以下程序的运行结果是 。
#include"stdio.h"
main()
{structdate
{intyear,month,day;}today;
printf("%d\n",sizeof(structdate));
}
A)6 B)8 C)10 D)12
31、若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是 。
A)a,point,*&a B)&*a,&a,*point C)*&point,*point,&a D)&a,&*point,point
32、已定义以下函数
fun(char*p2,char*p1)
{
while((*p2=*p1)!
='\0'){p1++;p2++;}
}
函数的功能是 。
A)将p1所指字符串复制到p2所指内存空间 B)将p1所指字符串的地址赋给指针p2
C)对p1和p2两个指针所指字符串进行比较D)检查p1和p2两个指针所指字符串中是否有'\0'
33、若执行下述程序时,若从键盘输入6和8时,结果为 。
main()
{inta,b,s;
scanf("%d%d",&a,&b);
s=a
if(a
s=b;
s*=s;
printf("%d",s);
}
A)36 B)64 C)48 D)以上都不对
34、下列关于C语言数据文件的叙述中正确的是 。
A)文件由ASCII码字符序列组成,C语言只能读写文本文件
B)文件由二进制数据序列组成,C语言只能读写二进制文件
C)文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件
D)文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件
35、有以下程序
voidss(char*s,chart)
{while(*s)
{if(*s==t)*s=t-'a'+'A';
s++;
}
}
main()
{charstr1[100]="abcddfefdbd",c='d';
ss(str1,c);printf("%s\n",str1);
}
程序运行后的输出结果是 。
A)ABCDDEFEDBD B)abcDDfefDbD C)abcAAfefAbA D)Abcddfefdbd
[解析]把字符串中的小写字符‘d’转换为大写字符‘D’。
字符指针*s是指向该串的首字符(即字符‘a’),随着s++不断向后续字符移动。
t-'a'+'A'是英文字符小写转大写的公式,这里不再赘述。
二、填空题,答案不写入答题栏的一律不得分!
(每空2分,共30分)
36、以下程序段的输出结果是 28 。
main()
{inta=2,b=3,c=4;
a*=16+(b++)-(++c);
printf("%d",a);
}
37~38、若变量n中的值为24,则print()函数共输出5行,最后一行有4个数。
voidprint(intn,intaa[])
{inti;
for(i=1;i{printf("%6d",aa[i]);
if(!
(i%5))printf("\n");
}
printf("\n");
}
39、调用C语标准库函数时要求用include命令。
40、stract函数的作用是连接两个字符数组中的字符串。
41、C语言程序的注释可以出现在程序中的任何地方,一个注释以 /**/ 作为开始和结束。
42、设二进制数A是00101101,若想通过异或运算A^B使A的高4位取反,低4位不变,则二进制数B应是11110000。
43、若已知a=10,b=20,则表达式!
a
44、设i,j,k均为int型变量,则执行完下面的for语句后,k的值为 10 。
for(i=0,j=10;i<=j;i++,j--)k=i+j;
45~46、下面函数的功能是:
找出一维数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。
数组元素中的值已在主函数中赋予。
主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。
randomize()是初始化随机数生成器函数,rand()返回一个随机数函数。
请填空。
#include
#include
voidfun(inta[],intn,int*max,int*d)
{inti;
*max=a[0];
*d=0;
for(i=0;iif(*max{*max=a[i];*d=i;}
}
main()
{inti,x[20],max, index,n=10;
randomize();
for(i=0;i{
x[i]=rand()%50;printf("%4d",x[i]);
}
printf("\n");
fun(x,n,&max,&index);
printf("Max=%5d,Index=%4d\n",max,index);
}
47、以下程序的输出结果是 246 。
voidfun()
{staticinta=0;
a+=2;printf("%d",a);
}
main()
{intcc;
for(cc=1;cc<4;cc++)fun();
printf("\n");
}
[解析]第一次调用fun(),输出a为2;第二次调用fun(),输出a为4(局部静态变量,不重新赋初值);则第三次调用输出为6。
48、以下程序的输出结果是 7 。
#defineMAX(x,y)(x)>(y)?
(x):
(y)
main()
{inta=5,b=2,c=3,d=3,t;
t=MAX(a+b,c+d)*10;
printf("%d\n",t);
}
49、下列y的值是 8 。
inty;y=sizeof(2.25*4);
50、mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。
请填空。
intmystrlen(char*str)
{inti;
for(i=0;*(str+i)或者写成str[i]!
=′\0′;i++);
return(i);
}
三、程序设计题。
要求程序结构清晰,没有逻辑错误,书写工整,无需写出运行结果。
请写在背面并标明题号(第51题7.5分、第52题10分,共17.5分,按关键步骤评分)
51、输入一个3╳3的整数矩阵,求其对角线元素之差。
#include
voidmain()
{
inta[3][3],minus;
inti,j;
printf("enterdata:
\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
minus=a[0][0];
for(i=1;i<3;i++)
minus=minus-a[i][i];
printf("minus=%6d\n",minus);
}
52、有10个学生,每个学生的数据包括学号(stu_num,6个字符,如s00101)、姓名(name,8个字符)、三门课程的成绩(score[3],实型)及其平均分(avr,实型,初始时不赋值,)。
首先输入这10个学生的数据,然后再计算每个学生3门课程的平均分,存回avr中,并输出第6号学生的所有信息。
#include
#defineN10
structstudent
{
charstu_num[6];
charname[8];
floatscore[3];
floatavr;
}stu[N];
voidmain()
{
floatsum;
inti,j;
for(i=0;i {printf("enterinformationofstudent%d:
\n",i+1);
printf("stu_num:
");
scanf("%s",stu[i].stu_num);
printf("name:
");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{printf("score%d:
",j+1);
scanf("%f",&stu[i].score[j]);/*此处的&运算符是指取结构体数组中元素的地址*/
}
}
for(i=0;i {sum=0;
for(j=0;j<3;j++)
sum+=stu[i].score[j];
stu[i].avr=sum/3.0;
}
printf("stu_num name score1 score2 score3 average_score\n");
printf("%6s%10s",stu[5].stu_num,stu[i].name);
for(j=0;j<3;j++)
printf("%9.2f",stu[5].score[j]);
printf("%8.2f",stu[5].avr);
}