C語言程序設計F卷
考試試卷(F卷)
——標 ?準 ?答 ?案
計算機程序設計 課程 56 學時 ? 3.5 ?學分 考試形式: 閉 卷
一、選擇題(15小題,每小題2分,共計30分)
1.下面不正確的字符串常量是 A 。
A)'abc' ?B)"12'12" ?C)"0" ?D)" "
2.以下正確的敘述是 ? ?D ? ?
A)在C程序中,每行中只能寫一條語句
B)若a是實型變量,C程序中允許賦值a=10,因此實型變量中允許存放整型數
C)在C程序中,無論是整數還是實數,都能被準確無誤(精確)地表示
D)在C程序中,%是只能用于整數運算的運算符
3.已知字母A的ASCII碼為十進制數65,且c2為字符型,則執(zhí)行語句c2='A'十'6'一'3';后,c2中的值為 ?A ? ? ?
A)D ?B)68 ?C)不確定的值 ?D)C
4.sizeof(float)是 ? ?B ? ? ? :
A)一個雙精度型表達式 ? B)一個整型表達式
C)一種函數調用 D)一個不合法的表達式
5.以下說法正確的是 ? ? ?D ? ?:
A)輸入項可以為一實型常量,如scanf("%f",3.5);
B)只有格式控制,沒有輸入項,也能進行正確輸入,如scanf("a=%d,b=%d");
C)當輸入一個實型數據時,格式控制部分應規(guī)定小數點后的位數,如scanf("%4.2f",&f);
D)當輸入數據時,必須指明變量的地址,如scanf("%f",&f);
6.已有如下定義和輸入語句,若要求a1,a2,c1,c2的值分別為10,20,A,B,當從第一列開始輸入數據時,正確的數據輸入方式是 ? ? ?D ? ?(注:<CR>表示回車)。
int ?a1,a2; ?char ?c1,c2;
scanf("%d%d",&a1,&a2); ? scanf("%c%c",&c1,&c2);
? ?A) 1020AB<CR> ? ?B)10 ?20<CR>AB<CR>
? ?C)10 ?20 ? AB<CR> ? D)10 ?20AB<CR>
7.請閱讀以下程序:
void main()
{int a=5,b=0,c=0;
if(a=b+c) printf("***\n");
e1se ?printf("$$$\n");
以上程序 ? ? D ? ? ?:
A)有語法錯不能通過編譯 B)可以通過編譯但不能通過連接
C)輸出*** D)輸出$$$
8.下面程序段的運行結果是 ? C ? ? 。
x=y=0;
while(x<15) {y++;x+=++y;}
printf("%d,%d",x,y);
A)20,7 B)6,12 ? ? ?C)20,8 D)8,20
9.若有說明:int a[3]={0};則下面正確的敘述是 D 。
A) 只有元素a[0]可得到初值0
B) 此說明語句不正確
C) 數組a中各元素都可得到初值,但其值不一定為0
D) 數組a中每個元素均可得到初值0
10.在c語言中,引用數組元素時,其數組下標的數據類型允許是_ ? C ? _。
A)整型常量 ? B)整型表達式
C)整型常量或整型表達式 D)任何類型的表達式
11.下面程序段的運行結果是 _ ? B ? _。
? char ?c[5]={'a','b','\0','c','\0'};
? printf("%s",c);}
A)’a’’b’ ? ? ? ?B)ab ? ? ? ? C)ab c ? ? ? D)a ?b ?
12.以下敘述正確的是 ?C 。
A) 在C程序中,main函數必須位于程序的最前面
B) C程序的每行中只能寫一條語句
C) C語言本身沒有輸入輸出語句
D) 在對一個C程序進行編譯的過程中,可發(fā)現注釋中的拼寫錯誤
13.簡單變量做實參時,實參與其對應的形參之間的數據傳遞方式是 ?C 。
A)雙向值傳遞方式 B)地址傳遞方式
C)單向值傳遞方式 D)用戶指定傳遞方式
14.編輯程序的功能是 ?A 。
A)修改并建立源程序 ? ? ? ? ? B)將源程序翻譯成目標程序
C)調試程序 ? ? ? ? ? ? ? ? ? D)命令計算機執(zhí)行指定的程序
15.在C語言中,5種基本數據類型的存儲空間長度排列順序為 C 。
A)char<int<1ong int<=float<double B)char=int<1ong int<=float<double
C)char<int<=1ong int<=float<double D)char=int=1ong int<=float<double
二、計算表達式(每小題1.5分,共計15分):
設 int x=25,y=-20;float a=102.56,b=50.87;(注意:各式結果不影響后續(xù)的題目?。?/p>
1.(++y)+(x--) ? ?( ? ? 6 ? ? ?)
2.y*=y+=25 ? ? ? ( ? ? 25 ? ? )
3.x+y>=0?(x-2*y):(x+2*y) ? ? ? ( ? ? 65 ? ? )
4.(x+y)/2+(int)(a-b)%(int)b ? ? ? ? ? ? ? ? ? ( ? ? 3 ? ? ?)
5.x/2+(a-b)/2 ? ? ? ? ? ? ? ? ? ?( ? 37.845 ? )
6.!(x=a)&&(y=b)&&1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ( ? ? 0 ? ? ?)
7.!(a+b-1)||y+x/2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( ? ? 1 ? ? ?)
8.計算(y>=0)&&(++y)后y的值為: ? ( ? ?-20 ? ? )
9.printf(“%d”,’\102’);結果為 ?( ? ? 66 ? ? )
10.已知’a’的ASCII碼為97,則:printf(“%c”,’\x64’);結果為( ? ? d ? ? ?)
三、寫出下列程序的的執(zhí)行結果(每小題5分,共計20分,注意輸出格式)
1.#include<stdio.h>
Int main()
{ int a=23389,b=45;float x=647.3586,y=13643.5538;
?char c1=’A’,c2[]="Hello";
?printf("a=%4d,b=%4d\n",a,b);
?printf("%-9.2f,%9.2f\n",x,y);
?printf("%o,%x,%u\n",b,b,b);
?printf("%d,%c\n",c1,c1);
?printf("%s,%6.4s\n",c2,c2);
return 0;
}
a
=
2
3
3
8
9
,
b
=
4
5
6
4
7
.
3
6
,
1
3
6
4
3
.
5
5
5
5
,
2
d
,
4
5
6
5
,
A
H
e
l
l
o
,
H
e
l
l
2.#include<stdio.h>
#define N 10
?int main( )
?{ ?int a=1,b=0, i;
for (i=0; i<N/2; i++)
?{ printf("%6d%6d",a,b);
? ?printf("\n");
? ?a=b+a;
b=a+b;}
return 0;}
1
0
1
1
2
3
5
8
1
3
2
1
3.#include<stdio.h>
?int main()
{ ?int i,j,k=0;
for(i=1;i<31;i++)
? { for(j=2;j<=i-1;j++)
? ? ? ?if(i%j==0) break;
? ? ? ?if(j==i)
? ? ? ?{ printf("%7d",i) ;
? ? ? ? ?k++;
? ? ? ? ?if(k%2==0) printf("\n"); ?
? ? ? ?}
? ? } ?
Return 0;
}
2
3
5
7
1
1
1
3
1
7
1
9
2
3
2
9
4.#include<stdio.h>
int main()
{ int i=16,j,x=6,y,z;static char c[]=”I am a student”;
j=i+++1; ?printf(“%5d\n”,j);
x*=i=j; ?printf(“%5d\n”,x);
x=1,y=2,z=3;
x+=y+=z;
printf(“%5d\n”,(z+=x)>y? z++:y++);
x=y=z=-1;
++x||++y||z++;
printf(“%5d,%5d,%5d\n”,x,y,z);
printf(“%s,%5.4s\n”,c,c);
return 0;
}
1
7
1
0
2
9
0
,
0
,
0
I
a
m
a
s
t
u
d
e
n
t
,
I
a
m
四、程序填空(每空1.5分,共計15分)
1.下面程序的功能是:將字符數組s2中的全部字符拷貝到字符數組s1中,不用strcpy函數。
#include <stdio.h>
main()
{ char s1[80], s2[80];
int i;
printf("input s2:");
gets(s2);
for(i=0;s2[i]!=’\0’; i++ )
?s1[i]=s2[i] ? ;
?s1[i]=’\0’;
? ? ?printf("s1: %s \n",s1);
?return 0;
}
2.輸入20個整數,找出其中的最大數及最小數,并求其和值。
#include <stdio.h>
int main()
{ int a[20],i,max,min,sum;
? printf("input a[0]-a[19]:");
for(i=0;i<20;i++)
scanf(“%d”, &a[i] ?);
max=a[0]; ?min=a[0]; ?sum= a[0] ;
for(i=1; i<20 ;i++)
{ ?if(a[i]>max) max=a[i];
if(a[i]<min) ? min=a[i] ;
sum+=a[i];
}
? ? printf(%d,%d,%d\n",max,min,sum);
return 0;
}
3.輸入一行字符到字符數組中,將其中的小寫字母轉化成大寫字母,大寫字母轉化成小寫字母,然后輸出。
#include <stdio.h>
#include <string.h>
main()
{ char c,str[80];
int i;
gets(str);
for(i=0;(c=str[i])!= ’\0’ ;i++)
{ ?if( c>=’A’&&c<=’Z’ ?) c=c+32;
? ?else if(c>=’a’&&c<=’z’) c=c-32;
? ?str[i]=c; ?}
puts( ? str ? );
return 0; ?
?}
五、編寫程序(每小題10分,共計20分)
(注意:可做在試卷反面)
1.輸出100到300之間能被5整除卻不能被3整除的所有數之和。
#include ?<stdio.h>
int main()
{ int n,sum=0;
?for(n=100; n<=300; n++)
? ?if(n%5==0 && n%3!=0) sum += n;
printf(“%d\n”, sum);
return 0;
}
2.編寫main函數及一個求x階乘(x!)的用戶自定義函數fun( ),并在主函數中調用該函數求組合數c的值

。
#include ?<stdio.h>
int main()
{ ?long int fun(long int x);
long res, res1, res2, res3,m, n;
? scanf(“%ld,%ld”,&m,&n);
? res1=fun(m); ?res2=fun(n); ?res3=fun(m-n);
? res=res1/(res2*res3);
? printf(“%ld\n”,res);
return 0;
}
?long int fun(long int x);
{ ?long int i, res=1;
? for(i=2; i<=x; i++)
? res *= i;
return(res);
}