一、判斷題:(每小題1分,共6分)
1、若有說明int c;則while(c=getchar());是正確的C語句。 ( )
2、int i,*p=&i;是正確的C說明。 ( )
3、7&3+12的值是15。 ( )
4、while 1 i,j; 一定是錯誤的C說明。 ( )
5、for( ; ; )S中的語句S必執行無窮多次。 ( )
6、unsigned 和void 在C中都是保留的。 ( )
二、單項選擇題(每小題1分,共5分)
1、設有int i;則表達式i=1,++i,++i||++i,i的值爲 ( ) A.1 B.2 C.3 D.4
2、設有int i;則表達式(i=1,i=10)?i++||++i:++i的值爲 ( ) A.1 B.2 C.3 D.10
3、設有int a[ ]={10,11,12},*p=&a[0];則執行完*p++;*p+=1;後a[0],a[1],a[2]的值依次是 ( )A.10,11,12 B.11,12,12C.10,12,12 D.11,11,12
4、設有int i, j, k; 則表達式i=1,j=2,k=3, i&&j&k 的值爲 ( )A.1 B.2 C.3 D.05、設有說明int s[2]={0,1},*p=s; 則下列錯誤的C語句是 ( )A.s+=1; B.p+=1; C.*p++; D.(*P)++;
三、填空題(每小題2分,共10分)
1、char *(*pa)[10];說明pa是______________。
2、表達式98&&8&&31&1的值爲________________。
3、printf("%5.3f\n",123456.12345);輸出爲_____________。
4、表達式~3&(2&3^4)的值爲_______________。
5、若有說明int i,j,k;則表達式i=10,j=20,k=30,k*=i+j的值爲_______________。
四、程序分析,給出下列各程序的執行結果(輸出)
1、#include int f(n)int n;{static int s=1;while(n) s*=n--;return s;}main(){int i,j;i=f(3); j=f(5);printf("\nThe output of 5.1. is:\n\n");printf("i=%d j=%d \n",i,j);}
2、#include trans(m,n)int m,n;{int i;if (m>n){i=m%n;trans(m/n,/);}else i=m;if (i<10) printf("%d",i);else printf("%c",'A'+i-10);}main( ){int i;printf("\nThe output of 5.3 is:\n\n");printf("\n%d->-",-23);trans(21,3);printf("\n%d->",123);trans(123,16);}
3、#include #include
typedef struct node{int d;struct node *next;}t_node;
create(h)t_node **h;{int i,m=0;t_node *p,*q;scanf("%d",&i);while(i){p=(t_node*)malloc(sizeof(t_node));p->d=i>m?i:m;m=i;p->next=NULL;if(*h){q->next=p;q=p;} else{*h=p;q=p;}scanf("%d",&i);}}
void main(){ t_node *h=NULL,*p;create(&h);p=h;printf("\nThe output of 4.3 is:\n\n");while(p){printf("%d",p->d);p=p->next;}}
4、#include main(){ int m,n,sign,t;scanf("%d%d",&m,&n);while(m*n){if (m>=0&&n>=0||m<=0&&n<=0) sign=0;else sign=1;m=m>0?m:-m; n=n>0?n:-n;t=0;while(n--) t+=m;printf("\nThe result is:");if (sign) printf("-");printf("%d\n",t);scanf("%d%d",&m,&n);}}
5、#include int a[10]={1,2,3,4,5,6,7};rev (m,n)int *m,n;{int t;if(n>1){t=*m;*m=*(m+n-1);*(m+n-1)=t;rev(m+1,n-2);}}
main(){int i;printf("\nThe output of 5.5 is:\n\n");rev(a+2,6);for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");rev(a,5);for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");}
五、在下面程序中橫線處填上適當字句,使其能正確執行(6分)
[程序說明] 該程序用於計算cos x值,依據公式爲:
要求輸入X(以角度計)和誤差值epsil。當epsil<=0時程序停止執行。
#include #define PI 3.141526double ex(x,epsil)float x,epsil;{double t,s; int n;s=0.0; t=1.0; n=1;while ((t>=0.0?t:-t)>epsil){s+=t;___(1)___;___(2)___;}return s;}
main(){float x,epsil;printf("Input x,epsil:(epsil<=0 to quit)\n");scanf("%f%f",&x,&epsil);while(epsil>0.0){x*=PI/180;printf("e^%f=%f\n",x,ex(x,epsil));printf("Input x,epsil:(epsil<=0 to quit)\n");scanf("%f%f",&x,&epsil);}}
六、在下面程序中橫線處填上適當字句,使其能正確執行(18分)[程序說明]該程序能計算兩個整數集合A與B的差,其中A與B的元素都以值的遞增次序存放中單鏈表中,A中的同一元素允許在單鏈表中出現多次,A與B的差也以值的遞增次序存於單鏈表內,但是同一元素不允許出現多次。假定調用diff前a,b的值已創建。
#include typedef struct node{int d;struct node *next;}tnode;
void diff(a,b,c)tnode *a,*b,__(1)__;{int last_a; tnode *p;*c=NULL; last_a=-9999;while(a&&b){if(a->d==b->d){__(2)__;a=a->next;__(3)__;}elseif (a->d>d->d)__(4)__;else {if (a->d!=last_a){last_a=a->d;p=(tnode *)malloc(sizeof(tnode));p->d=last_a;p->next=*c;*c=p;}a=a->next;}}while(a){if(__(5)__){last_a=a->d; p->d=last_a;p->next=*c;__(6)__;}a=a->next;}}
void print(h)tnode *h;{while(h){printf("%d ",h->d);h=h->next;}}
main(){tnode *a,*b,*c;...diff(a,b,&c);print(c);}
(注:請北京考生注意!《C語言》將在2001年變更爲《計算機網絡技術》。)(黨劍新 提供)
|