名校C語言程序設計(你們想要試題資料)

筆試試題(A卷)

題號

筆試(70%)

綜合

(30%)

總分

分數

試卷說明:

1. 筆試卷面總分100分,取卷面成績的70%計入總分;

2. 綜合成績為平時成績(10%)和實驗成績(20%)之和,佔總分的30%;

3. 答題時禁止拆開試卷釘,試卷背面即為草稿紙;

4. 答題時間120分鐘。

一、單項選擇題。請把答案填入下面框中,

不允許出框線。(本題16分,每小題1分)

題號

1

2

3

4

5

6

7

8

答案

題號

9

10

11

12

13

14

15

16

答案

1.有以下定義:int a; long b; double x,y;則下列正確的是( A )。

A) a%(int)(x-y) B) a=x!=yC) (a*y)%bD) y=x+y=x

2. 有以下程序

main()

{int a=1,b=0;

if(!a) b++;

else if(a==0) if(a) b+=2;

else b+=3;

printf(“%d\n”,b);

}則程序輸出( A )。

A) 0 B) 1C) 2 D) 3

3. 若有定義 int (*p)[3];則下列說法正確的是( C )。

A) 定義了基類型為int的三個指針變量

B) 定義了一個名為 *pt、具有三個元素的整型數值

C) 定義了一個名為pt的指針變量,它可以指向每行有三個整數元素的二維數組

D) 定義了基類型為int的具有三個元素的整型數組

4. 有以下程序段

main()

{int x=10;

while(x--);

printf("x=%d\n",x);}

則最後的輸出結果是:( B )。

A) x=0 B) x= -1 C) x=1D)while構成無限循環

5. 有以下程序:

int fun()

{static int x=1;

x *= 2;

return x;}

main( )

{ int i,s=1 ;

for(i=1 ;i<=2 ;i++) s=fun() ;

printf(“%d\n ”,s) ;}

執行後的輸出結果為( D )。

A) 0B) 1C) 8D) 4

6. void main( ){

int k=011;

printf("%d\n",k++); }

}程序輸出結果是( D )

A)12 B) 11C) 10D) 9

7. 以下C語言標識符中,不合法的是( C )。

A) _2 B) a_b C) a--bD) AaBc

8. C語言允許函數類型默認定義,此時該函數值隱含的類型是( B )。

A) floatB) int C) longD) double

9. 以下程序段運行結果是( B )。

enum weekday{aa,bb=2,cc,dd,ee}week=ee;

printf(“%d\n“,week);

A) 4 B) 5 C) eeD) 0

10. 以下對C語言函數的描述中,不正確的是( B )。

A) 不同函數中可以使用相同名字變量 B) 函數可以嵌套定義

C) 函數可以沒有返回值 D) 程序由函數組成

11. 若有定義語句:double x[5]={1.0,2.0,3.0,4.0,5.0},*p=x;則錯誤引用x數組元素的是( D )。

A) *p B) *x C) *(p+1) D) x[5]

12. 以下程序段運行結果是( B )。

int a=6;

printf(“%d\n“,a>>1);

A) 12 B) 3 C) 6 D) 1

13. 若有定義語句:double x,y,*px,*py;執行了px=&x;py=&y;之後,正確的輸入語句是( B )。

A) scanf(“%lf%lf”,x,y); B) scanf(“%lf,%lf”,px,py);

C) scanf(“%f%f”, &x, &y); D) scanf(“%f%f”,x,y);

14. 以下程序運行結果是( D )。

char str[ ]=“abc“;

printf(“%d, %d \n“,strlen(str),sizeof(str));

A)6,3 B) 3,3 C) 10,10 D) 3,10

15. 以下程序段運行結果是( A )。

#define f(x) x*x*x

main( )

{ int a=1,b,c;

b=f(a+1);c=f((a+1));

printf(“%d,%d\n“,b,c);}

A) 4,8 B) 8,4 C) 8,8 D) 4,4

16. 有以下程序:

main()

{FILE *f;

f=fopen(“fa.txt“,“w“);

fprintf(f,“day“);

fclose(f);}

若文本文件fa.txt中原有內容為:hello,則運行以上程序後,文件fa.txt中的內容為( A )。

A)day B) helloday C) daylo D)dayhello

二、填空題。請按序號把答案填入下面框中,

不允許出框線。(本題20分,每空2分)

題號

答 案

題號

答 案

1

a[row][col]

6

k<=n

2

x%10或x%100%10

7

k++

3

23hE45a

8

m%i==0&&n%i==0

4

fun()

9

p=p->next

5

m++

10

s[i]或’\0’

1. 以下fun函數功能是在N行M列的整型二維數組中,選出一個最大值作為函數值返回。

int fun(int a[N][M])

{ int i,j,row=0,col=0;

for(i=0;i

for(j=0;j

if(a[i][j]>a[row][col]){row=i;col=j;}

return( 【1】 );}

2. 以下程序的功能是:將值為三位正整數的變量x中的數值按照個位、十位,百位的順序拆分輸出。

main()

{ int x=123;

printf(“%d-%d-%d\n”, 【2】 ,x/10%10,x/100);}

3. 下列程序運行時,若輸入23he45a,輸出結果是 【3】

#include

main()

{ char a=0;ch;

while((ch=getchar())!=’\n’)

{if(a%2!=0&&(ch>=’a’&&ch<=’z’)) ch=ch-‘a’+’A’;

a++;putchar(ch);}

printf(“\n”);}

4. 以下程序的功能是,通過函數fun輸入字符並統計輸入字符個數。用字符$作為輸入結束標誌。

#include

long 【4】 ;/*函數聲明語句*/

main()

{ long n;

n=fun(); printf(“n=%ld\n”,n);}

long fun()

{long m;

for(m=0;getchar()!='$'; 【5】 );

return m;}

5. 有以下程序段,且變量已正確定義和賦值

for(s=1.0,k=1;k<=n;k++)s=s+1.0/(k*(k+1));

printf("s=%f\n\n",s);

請填空,是下面程序段的功能與之完全相同

s=1.0;k=1;

while( 【6】 ){s=s+1.0/(k*(k+1)); 【7】 ;}

printf("s=%f\n\n",s);

6. 以下函數的功能是求兩個整數的最大公約數。

fun(int m,int n)

{int i=1,t;

for(;i<=m&&i<=n;i++)

if( 【8】 )t=i;

return(t);}

7. 以下程序將三個struct node型變量鏈接成一個鏈表,並在while循環中輸出鏈表節點數據域中的數據。

struct node

{int data;struct node *next;}

main()

{ struct node a,b,c,*p,*q;

a.data=10; b.data=20; c.data=30;p=&a;

a.next=&b;b.next=&c;c.next=NULL;q=p;

while(p){printf(“%d,”,p->data); 【9】 ;}

printf(“\n”);}

8. 以下程序的功能是:刪除字符串中所有的空格。

main()

{ char s[20]=”how are you!”;

int i,j;

for(i=j=0;s[i]!=’\0’;i++)

if(s[i]!=’ ’){ s[j]=s[i]; j++; }

s[j]= 【10】 ;}

三、請把下列程序運行結果填入答案框中,不允

許出框線,用“↙”表示回車。(本題24分,每小題3分)

題號

1

2

3

4

5

6

7

8

答案

124

43

6

4

121

55555

30

4

1. main()

{ int i,j,a[ ][2]={1,2,3,4};

for(i=0;i<2;i++)

for(j=i;j<2;j++) printf(“%d”,a[i][j]);

printf(“\n”);}

2.main()

{char ch[ ]=”453cd34”;

int i,s=0;

for(i=0;ch[i]>’0’&& ch[i]

s=10*s+ ch[i]-’0’;

printf(“%d\n”,s);}

3. long fib(int n)

{if(n>2) return(fib(n-1)+fib(n-2));

else return(2);}

void main()

{printf(“%d\n”,fib(4));}

4. main( )

{union example{

struct

{ int x;

int y;

}in;

int a;

int b;

}e;

e.a=2;e.b=1;

e.in.x=e.a+e.b

e.in.y=e.a*e.b;

printf(“%d\n”,e.in.y);}

5. struct NODE

{int k;

struct NODE *link;};

void main()

{ struct NODE m[3],*p=m,*q=m+2;

int i=0;

while(p!=q){

p->k=++i;p++;

q->k=i++;q--; }

q->k=i;

for(i=0;i<3;i++)printf(“%d”,m[i].k);

printf(“\n”);}

6. main()

{ int j,a[]={1,3,5,7,9},*p=a+3;

for(j=3;j;j--)

{switch(j)

{case 1:

case 2:printf("%d",*(p++));

case 3:printf("%d",*(--p));

}}}

7. main()

{int x;

for(x=1;x<=50;x++)

if(x%2==0)

if(x%3==0)

if(x%5==0)

printf("%d",x);}

8. main(){

int a,b;

for(a=1,b=1;a<=50;a++)

{if(b>8)break;

if(b%3==1){b+=3;continue;}

b-=5;}

printf("%d\n",a);}

四、根據功能描述改正程序中的錯誤。

不得增行或刪行,不得更改程序結構。(本題10分)

1. 下列給定程序中,函數fun的功能是:實現兩個整數的交換。例如給a和b分別輸入60和65,輸出為:a=65 b=60。(本小題6分)

#include

#include

void fun (int a,b)

{

int t;

t=b;b=a;a=t;

}

main()

{

int a,b;

printf("Enter a,b:");

scanf("%d%d",a, b);

fun(&a,&b);

printf("a=%d b=%dn",a,b);

}

答案:

scanf("%d%d",a, b); 改為:scanf("%d%d",&a,&b);------2分

fun (int a,b) 改為:fun (int *a,int *b) ------2分

t=b; b=a; a=t; 改為:t=*b ;*b=*a ;*a=t ; ------2分

2. 下述代碼定義了一個結構體STRU,用其聲明指針變量*s,並完成對這個指針變量的賦值、輸出的任務。請指出下列程序的錯誤,並予以更正(本小題4分)

struct STRU

{ int num;

char name[20];

float score;

 struct STRU *p1;

};

main()

{

STRU *s=(struct STRU *)malloc(sizeof(struct STRU));

s.num=123;

s->name=”zhang”;

s->score=61.5;

printf(“num=%d,name=%s,score=%f”,s->num,s->name, s->score);

}

答案:

s.num=123; 改為:s->num或(*s).sum------2分

s->name=”zhang”; 改為:strcpy(s->name,”zhang”) ------2分

五、請用標準程序流程圖描述下列問題的算法

(本題10分)

依次從鍵盤輸入30個學生的《計算機實用基礎》成績,請分別統計不及格的人數和優秀(成績不小於90)的人數,並打印輸出統計結果。

參考答案:

名校C語言程序設計(你們想要試題資料)

六、編程題(本題20分)

(考查課做前兩道,考試課做後兩道)

某個公司採用公用電話傳遞數據,數據是四位的整數,在傳遞過程中是加密的,加密規則如下:每位數字都加上5,然後用和除以10的餘數代替該數字,再將第一位和第四位交換,第二位和第三位交換。 (本小題10分)

參考答案:

main()

{ int a,i,aa[4],t;

scanf("%d",&a);

aa[0]=a%10;

aa[1]=a%100/10;

aa[2]=a%1000/100;

aa[3]=a/1000;

for(i=0;i<=3;i++)

{ aa[i]+=5;

aa[i]%=10;

}

for(i=0;i<=3/2;i++)

{

t=aa[i];

aa[i]=aa[3-i];

aa[3-i]=t;

}

for(i=3;i>=0;i--)

printf("%d",aa[i]);

}

2. 假定輸入的字符串中只包含字母和*號。請編寫函數fun,它的功能是:刪除字符串中所有的*號。在編寫函數時,不得使用C語言提供的字符串函數。(本小題10分)

例如:若字符串中的內容為 ****A*BC*DEF*G*******

刪除後,字符串內容應該是:ABCDEFG

void fun( char *a)

{

}

main()

{ int s[81];

gets(s);

fun(s);

puts(s);

}

參考答案:

fun( char *a)

{ int i=0; char *p=a;

while(*p!='\0')

{ if(*p!='*')

{ a[i]=*p; i++; }

p++;

}

a[i]='\0';

}

3. 60名學生的成績已在主函數中放入一個帶頭節點的鏈表結構中,h指向鏈表的頭節點。請編寫函數fun(),它的功能是:找出學生的最低分,由函數值返回。(本小題10分)

#include

#include

#define N 60

struct slist

{ double s;

struct slist *next;

};

typedef struct slist STREC;

double fun(STREC *h)

{

}

STREC * creat (double *s)

{ STREC *h,*p,*q;

int i=0;

h=p=(STREC*)malloc(sizeof(STREC));

p->s=0;

while(i

{

q=(STREC*) malloc(sizeof(STREC));

p->s=s[i]; i++; p->next=q; p=q;

}

p->next=NULL;

return h;

}

outlist(STREC *h)

{ STREC *p;

p=h->next;

printf("head");

do

{

printf("->%2.0f ",p->s);

p=p->next;

}while(p!=0);

printf("->NULL\n\n ");

}

main()

{double s[N]={56,89,76,95,91,68,75,85}, max;

STREC *h;

h=creat(s);

outlist(h);

max=fun(h);

printf("min=%6.1f\n ",max);

}

參考答案:

double fun(STREC *h)

{ double max=h->s;

while(h!=NULL)

{

if (maxs)

max=h->s;

h=h->next;

}

return max;

}


分享到:


相關文章: