自测题2
一 、单项选择题(2*20=40分)
1.能正确表示a和b同时为正或同时为负的逻辑表达式是______。D A、(a>=0||b>=0)&&(a<0|| b<0) B、(a>=0&&b>=0)&&(a<0&&b<0) C、(a+b>0)&&(a+b<=0) D、a*b>0 2.下面程序的输出结果是______。B #include
int a,b;
for(a=1,b=1;a<=100;a++)
{
if(b>=20) break; if(b%3==1)
{
b+=3; continue; }
b-=5; }
printf(\ return 0; }
A、7 B、8 C、9 D、10
3.若有说明:int i,j=7,*p=&i;则与i=j;等价的语句是______。B A、i=*p; B、*p=*&j; C、i=&j; D、i=**p; 4.下面程序的输出结果是______。B
#include
int n=9;
while(n>6) { n--;
printf(\}
return 0; }
A、987 B、876 C、8765 D、9876 5.下面程序中的for循环执行的次数是______。B
#include
#define NUM 2*M+1 int main( ) { int i;
for(i=1;i<=NUM;i++) printf(\return 0; }
A、5 B、6 C、7 D、8
6.有如下说明:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则表达式值为9的是______。B A、*p+9 B、*(p+8) C、*p+=9 D、p+8 7.有如下定义,能输出字母M的语句是______。D
struct person{ char name[9]; int age; }; struct person class[10]={\ A、printf(\ B、printf(\ C、printf(\ D、printf(\
8.已知变量a、b、c为float类型,要通过语句scanf(\%f %f\给 a输入10.0,b输入22.0,c输入33.0,不正确的输入形式是:______。B
A、10 B、10.0,22.0,33.0 22 33
C、10.0 D、10 22 22.0 33.0 33
9.假定已建立以下链表,且指针p和q已指向如图所示的结点:
则以下选项中可将q所指结点从链表中删除,并释放该结点的语句是______。D A、(*p).next=(*q).next; free(p); B、p=q->next; free(q); C、p=q; free(q); D、p->next=q->next; free(q); 10.以下选项中,非法的字符常量是______。C A、'\\t' B、'\\17' C、\ D、'\\xaa'
11.在下划线处中填入______,使findmax函数能返回参数a所表示的数组中的最大值。 #include
int findmax(int *a,int n) {
int *p,*s;
for(p=a,s=a;p-a int main( ) { int x[5]={12,21,13,6,18}; printf(\ return 0; } A、p>s B、*p>*s C、a[p]>a[s] D、p-a>p-s 12.下面程序的输出结果是______。B #include void ss(char *s,char t) { while(*s) { if(*s==t) *s=t-'a'+'A'; s++; } return; } int main( ) { char str1[100]=\ ss(str1,c); printf(\return 0; } A、ABCDDEFEDBD B、abcDDfefDbD C、AbcAAfefAbA D、Abcddfefdbd 13.下面fun( )函数的功能是______。C fun(char *sl,char *s2) { int i=0; while(sl[i]==s2[i]&&s2[i]!='\\0') i++; return(sl[i]=='\\0'&&s2[i]=='\\0'); } A、将s2所指字符串赋给s1 B、比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0 C、比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0 D、比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0 14.以下选项中,全部是合法用户标识符的是______。B ① ② ③ ④ _main If txt int enclude _max REAL k_2 sin turbo 3COM _001 A、1 B、2 C、3 D、4 15.若程序中定义了以下函数: double myadd(double a,double b) { return(a+b); } 对函数myadd声明时,以下选项中错误的说明是______。A A、double myadd(double a,b); B、double myadd(double,double); C、double myadd(double b,double a); D、double myadd(double x,double y); 16.下列条件语句中,功能与其它语句不同的是______。D A、if(a) printf(\ B、if(a==0) printf(\ C、if (a!=0) printf(\ D、if(a==0) printf(\ 17.设a、b和c都是int型变量,且a=3、b=4、c=5,则下面的表达式值为0的是______。D A、'a'&&'b' B、a<=b C、a||c&&b-c D、!((a #include static int m=0,i=2; i+=m+1; m=i+x+y; return m; } int main( ) { int j=1,m=1,k; k=fun(j,m); printf(\ k=fun(j,m); printf(\ return 0; } A、5,5 B、5,11 C、11,11 D、11,5 19.下面程序运行后,文件t1.dat中的内容是____________。B #include void WriteStr(char *fn,char *str) { FILE *fp; fp=fopen(fn,\ fputs(str,fp); fclose(fp); return; } int main( ) { WriteStr(\ WriteStr(\ return 0; } A、start B、end C、startend D、endrt 20.已知整型变量a的值是15,b的值是9,则表达式a&b的值是____________。D A、1 B、0 C、8 D、9 二 、程序填空题(18分,每空3分) 注意:不得增行或删行,也不得更改程序的结构! 1.下面程序的功能是将十进制正整数m转换成k进制(2≤k≤9)的数字输出。例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。请在程序的下划线处填入正确的内容,使程序得出正确结果。 #include int aa[20],i; for(i=0; m; i++) { aa[i]=___1___; // aa[i]=m%k; m/=___2___; // m/=k; } for(;i;i--) printf(\ // printf(\} int main( ) { int b,n; printf(\ scanf(\ fun(n,b); return 0; } 2.函数fun( )的功能是:根据整型形参n,计算数列中第n项An的值。 A1?1,A2?1,A3?1,......,An?1?A11?A21 1?An?1请在程序的下划线处填入正确的内容,使程序得出正确结果。 #include float A=___1___ ; // float A=1 ; int i; for (i=1; i<=___2___; i++) // for (i=1; i<=n; i++) A=1.0/(1+A); ___3___ ; // return A ; } int main( ) { int n; printf(\ scanf(\ printf(\ return 0; } 三、程序改错题(共12分 每处3分) 注意:每题有两处错误;改错时,不得增行或删行,也不得更改程序的结构! 1.函数fun的功能是:从n个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。请改正程序中的错误,使它能得出正确的结果。 #include int fun(float *s,int n,float *aver) { float ave,t=0.0f; int count=0,k,i; for (k=0;k t=s[k]; // t+=s[k]; ave=t/n; for (i=0;i if(s[i] *aver=&ave; //*aver=ave; return count; } int main( ) { float s[30],aver; int m,i; printf(\ scanf(\ printf(\ for(i=0;i printf(\ printf(\ return 0; } 2.函数fun的功能是:用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num)为止: π/4=1-1/3+1/5-1/7+…… 请改正程序中的错误,使它能得出正确结果。 #include float n,t,pi; t=1;pi=0;n=1;s=1; while(t>=num) //while(fabs(t)>=num) { pi=pi+t; n=n+2; s=-s; t=s%n; // t=s/n; } pi=pi*4; return pi; } int main( ) { float n1,n2; printf(\ scanf(\ n2=fun(n1); printf(\ return 0; } 三、程序设计题(30分) 1.请编一个函数fun(char *s),函数的功能是把字符串中所有的字符前移一个位置,串中的第一个字符移到 最后。例如:原有的字符串为:Mn.123xyZ,则调用该函数后,字符串中的内容为:n.123xyZM (20分) #include char b[N]; sprintf(b,\ strcpy(s,b); } int main( ) { char a[N]; printf(\ gets(a); fun(a); printf(\ puts(a); return 0; } 2.编写函数fun,函数的功能是:根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。 111 s?1???......?1?21?2?31?2?3?......?n(10分) #include int i; float s=1.0,h=1; for (i=2;i<=n;i++) { h=h+i; s=s+1.0/h; } return s; } int main( ) { int n; float s; printf(\ scanf(\ s=fun(n); printf(\ return 0; }