筆試試題(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)的人數,並打印輸出統計結果。
參考答案:
六、編程題(本題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 (max max=h->s; h=h->next; } return max; }
閱讀更多 亦是花 的文章