安徽大學20 -20 學年第 學期
《C語言程序設計》期末考試試卷(A卷120分鐘)
年級 院系專業 姓名 學號 座位號
一. 單項選擇題:(每題2分,共40分)
1.下面程序段執行後,a的值是______。
int a;
printf("%d \n", (a=3*5, a*4, a+5) );
A)60 B)20 C)15 D)10
2.下列程序段的輸出是______。
int x=023;
printf("%d \n", --x );
A)19 B)18 C)23 D)22
3.執行下列語句後,a的值是______。
int a=8;
a+=a-=a*a;
A)-240 B)64 C)112 D)-112
4.執行下列語句後,輸出的值是______。
int x=6;
printf("%d,%d,%d\n",x,x++,--x);
A)5,5,5 B)6,5,5 C)7,6,5 D)5,6,5
5.指出下列程序段所表示的邏輯關係是______。
if(a<b)
{
if(c==d)
x=1;
}
else
x=2;
A)若a<b且c=d,則x=1;若a>=b且c!=d,則x=2。
B)若a<b且c=d,則x=1;若a>=b,則x=2。
C)若a<b且c=d,則x=1;若a<b且c!=d,則x=2。
D)若a<b且c=d,則x=1;若c!=d,則x=2。
6.下列程序段的執行結果是______。
int i,x;
for(i=1,x=1;i<=20;i++)
{
if(x>=10) break;
if(x%2==1)
{
x+=5;
continue;
}
x-=3;
}
printf("%d,%d\n",x,i);
A)6,4 B)7,5 C)10,6 D)14,7
7.下列程序的執行結果是______。
#include "stdio.h"
#include "string.h"
main()
{
static char s[10]={'C','h','i','n','a'};
printf("%d\n",strlen(s));
}
A)6 B)5 C)11 D)10
8.函數的數據類型是______決定的。
A)調用該函數時臨時 B)調用函數的實參
C)return語句的表達式類型 D)函數的形參
9.執行下列程序段後,*(p+5)的值是______。
static char s[]="Hello";
char *p;
p=s;
A)'o' B)'\0' C)'o'的地址 D)不確定的值
10.以下程序的輸出結果是______。
#include "stdio.h"
main()
{
static int a[]={1,2,3,4,5,6},*p;
p=a; *(p+3)+=2;
printf("%d,%d\n",*p,*(p+3));
}
A)0,5 B)1,5 C)0,6 D)1,6
11.在以下定義中,標識符P______。
int (*p)[3];
A)定義不合法。
B)是一個指針數組名,每個元素是一個指向整型變量的指針。
C)是一個指針,它指向一個具有三個元素的一維數組。
D)是一個指向整型變量的指針。
12.sizeof(int)是______。
A)一個整型表達式 B)一個不合法的表達式
C)一種函數調用 D)一條語句
13.有宏定義:#define MULT1(a,b) a*b
#define MULT2(a,b) (a)*(b)
在後面的程序中有宏引用:y=MULT1(3+2,5+8);
z=MULT2(3+2,5+8);
則y和z的值是______。
A)y=65,z=65 B)y=21,z=65 C)y=65,z=21 D)y=21,z=21
14.設有程序段:
union MYTYPE { long x; int y[4]; char z[6];}them;
main(){ printf(「%d\n」,sizeof(them)); }
則程序的輸出結果是______。
A)18B)6C)8D)4
15.以讀寫方式打開一個已有的文本文件file1,下面fopen函數正確的調用方式
是______。
A)FILE *fp; B)FILE *fp;
fp=fopen("file1","r");fp=fopen("file1","r+");
C)FILE *fp; D)FILE *fp;
fp=fopen("file1","rb");fp=fopen("file1","rb+");
16. 設有如下定義:
struct sk {int a; float b;} data,*p;
且 p=&data; 則對data中a域的正確引用是 ( ).
A) (*p).data.a B) (*p).a
C) p->data.a D) p.data.a
17.若fun( int x) { printf(「%d\n」,x);}, 則fun_______。
A)返回值為 void 類型 B)返回值無法確定
C)返回值為 int 類型 D)沒有返回值
18.實參和和形參之間的數據傳送是_______。
A)地址傳送 B)實參傳給形參,再由形參傳給實參
C)值傳送 D)由用戶指定傳送方式
19.以下程序的輸出結果是______。
char *s=」ABCD」, *p;
for( p=s; *p ; p++)
printf("%s\n", p);
A)ABCD B)A C)D D)ABCD
BCDBCABC
CDCBAB
DDAA
20.下列程序段的輸出是______。
int fun( int x)
{
static int a=3;
a+=x;
return a;
}
void main( void )
{
int k=2, m=1, n;
n=fun(k);
n=fun(m);
printf( 「%d\n」, n);
}
A)3 B)4 C)6 D)9
二. 填空題:(每空1分,共20分)
C語言有 、 、 、 和 五種常量。
C程序的變量不僅要事先 ,而且還必須 後才能使用。
C語言在給出邏輯運算結果時,以 代表「真」,以 代表「假」;在判斷一個量是否為「真」時,以 代表「假」,以 代表「真」。
C語言規定只有 數組和 數組才能初始化;這種數組不賦初值,系統會對所有數組元素自動賦以 值。
對兩個指針變量進行關係運算的條件是 ,其結果表示 。
一個C文件是一個 或 ,它把數據看成是 ,對文件的存取是以 為單位。
三. 程序設計題(每空2分,共40分)
1.下列程序是求Fibonacci數列:1,1,2,3,5,8……的前40個數,要求每行輸出4個數。
main()
{
long int f1,f2;
int i;
f1=1 ; f2=1;
for(i=1;i<= ;i++)
{
printf("%12ld %12ld ",f1,f2);
if( ) printf("\n");
f1= ;
f2= ;
}
}
2.下列程序是求一個3×4矩陣中值最小元素。
min_value( )
{ int i,j,k,min;
=array[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if( ) min= ;
;
}
main()
{ static int a[3][4]={ 1,2,3,4,5,6,7,8,9 };
printf("min value is %d\n",min_value( ));
}
3.下列程序的功能是:將字符串a複製到字符串b中。
void copy_string(char *from, ⑾ )
{
for(;*from; )
;
*to= ;
}
main()
{ char *a="I am a boy!";
char *b="This is a test!";
;
printf("a=%s\a=%s\n",a,b);
}
4.有一個班,3個學生,各學四門棵。下列程序的功能是:查找有一門以上課程不及格的學生,列印出他們的全部課程的成績。
main()
{ ;
static float score[3][4]=
{1,2,3,4,5,6,7,8,9,10,11,12};
search(score,3);
}
void search( float (*p)[4], int n)
{ int i,j,flag;
for(j=0;j<n;j++)
{ flag=0;
for(i=0;i<4;i++)
if( ) flag=1;
if( )
{ printf("No.%d is fail\n",j+i);
for(i=0; ;i++)
printf("%5.1f ", );
printf("\n");
}
}
}
安徽大學20 -20 學年第 學期
《C語言程序設計》期末考試試卷(B卷120分鐘)
一. 單項選擇題:(每題2分,共20分)
1.執行程序: int a; printf("%d \n", (a=3*5, a*4, a+5) );後,a的值是______。
A)60B)20C)15D)10
2.程序段:int x=023; printf("%d \n", --x );的輸出是______。
A)19B)18C)23D)22
3.程序段:static char s[10]={'C','h','i','n','a'}; printf("%d\n",strlen(s));的輸出是______。
A)6 B)5C)11D)10
4.若fun( int x) { printf(「%d\n」,x);}, 則fun_______。
A)返回值為 void 類型B)返回值類型無法確定
C)返回值為 int 類型D)沒有返回值
5. 有宏定義:#define MULT1(a,b) a*b
#define MULT2(a,b) (a)*(b)
且引用宏:y=MULT1(3+2,5+8); z=MULT2(3+2,5+8); 則y和z的值是______。
A)y=65,z=65 B)y=21,z=65 C)y=65,z=21 D)y=21,z=21
6.程序段char s[]="Hello", *p; p=s;執行後,*(p+5)的值是______。
A)'o'B)'\0'C)'o'的地址D)不確定的值
7. 程序段:char *s=」ABCD」, *p; for( p=s; *p ; p++) printf("%s\n", p);的輸出是______。
A)ABCDB)A C)DD)ABCD
BCDBCABC
CDCBAB
DDAA
8. 若定義:int (*p)[3]; 則標識符p______。
A)定義不合法。
B)是一個指針數組名,每個元素是一個指向整型變量的指針。
C)是一個指針,它指向一個具有三個元素的一維數組。
D)是一個指向整型變量的指針。
9. 定義: struct sk {int a; float b;} data,*p; 且 p=&data; 則正確引用成員a的方式是 ______。
A) p.data.aB) (*p).aC) p->data.aD) (*p).data.a
10. 以二進位只讀方式打開一個已有的文本文件file1,正確調用fopen函數的方式是______。
A)FILE *fp;B)FILE *fp;
fp=fopen("file1","rb");fp=fopen("file1","r+");
C)FILE *fp;D)FILE *fp;
fp=fopen("file1","r");fp=fopen("file1","rb+");
二. 填空題:(每空1分,共20分)
C程序一個函數的定義由_________和_________兩部分組成。
C語言的整型變量可分為基本型、短整型、________和________。
C語言在判斷一個量是否為「真」時,以____代表「假」,以____代表「真」。
C語言中的break語句只能用於______和______語句。
對________和________型數組不賦初值,系統會對所有元素自動賦以0值。
C語言中「文件包含」是通過____________命令完成的,而符號常量是通過____________命令定義的。
對於數組x[5][5],*(x+2)+3表示_________ _,*(x[3]+2)表示__________。
若定義:struct {int y, m, d;} today, *pdata; 則為today分配內存 __ __ 字節,為pdata分配內存 __ __ 字節。
C語言文件按數據的存放形式可分為________文件和_________文件。
C語言文件是一個________序列,這類文件稱為_______文件。
三. 程序歸納題(每題2分,共10分)
閱讀下列函數,總結其主要功能填在答題卡相應的橫線上。答在試卷上不得分。
1. int fun1 (char *str){ char *ptr=str;
while(*ptr++); return ptr-str-1; }
2. double fun2(double x, double y, double z){
return x>(y>z?y:z)?x:(y>z?y:z); }
3. void funs3( int num[], int size ){ int i=0, tmp;
while(i<size/2) {tmp=num[i],num[i]=num[size-i-1],num[size-i-1]=tmp,i++;}}
4. void fun4(char *f, char *t)
{ for(;*f!='\0';f++,t++) *t=*f; *t='\0'; }
5.void fun5(char *ps) { int a1=0, a2=0;
while (*ps!= '\0')
{ if (*ps>='a'&&*ps<='z') a1++;
else if (*ps>='0'&&*ps<='9') a2++;
p++; }
printf("%d,%d \n",a1, a2); }
四. 程序分析題(每題2分,共10分)
閱讀程序,將其運行結果填在答題卡相應題目的橫線上。
1. #include "stdio.h"
void main() {
static int a[]={1,2,3,4,5,6},*p;
p=a; *(p+3)+=2;
printf("%d,%d\n",*p,*(p+3)); }
2. #include "stdio.h"
void main() { int x=1;
{ int x=2;
{ int x=3; printf("%2d",x); }
printf("%2d",x); }
printf("%2d",x); }
3. #include <stdio.h>
#include <string.h>
void sort( char **str, int n){
char *tmp; int i,j;
for( i=0; i<n-1; i++ )
for( j=0; j<n-i-1; j++ )
if(strcmp(str[j],str[j+1])>0)
tmp=str[j], str[j]=str[j+1], str[j+1]=tmp; }
void main() {
char **ps,*str[3]={ "BOOK","COMPUTER","CHINA"};
int i;
ps=str; sort(ps,3);
for(i=0; i<3; i++) printf("%d %s ",i+1, str[i]); }
4. #include <stdio.h>
int leap_year(int year){
return year%4==0 && year%100!=0 || year%400==0; }
void main(){
int month_day[]={31,28,31,30,31,30,31,31,30,31,30,31 }, days,i;
struct date {
int year;
int month;
int day;
}mdate={2008,5,1};
if(leap_year(mdate.year))
month_day[1]++;
for(i=1,days=mdate.day;i<mdate.month;i++)
days+=month_day[i-1];
printf("%d-%d is the %dth day in %d",
mdate.month,mdate.day,days,mdate.year); }
5. #include <stdio.h>
void add( int *x, int *y, int n){
while(n--) *x++ += *y++; }
void main(){
int i=5; static int s1[]={2, 1, 0, 3, 2}, s2[5];
add(s2, s1, 5);
while(i--) printf("%2d", s2[i]); }
五. 程序設計題(每題10分,共40分)
1.函數insert將一個指定的單精度數按遞減規律插入數組num中,註:數組num中已有12個按照遞減順序排好序的單精度數。
void insert( float num[13], float new )
{ int i=11;
/***answer begin***/
/***answer end***/ }
2.編寫函數mycmp實現庫函數strcmp的功能:兩個字符串的比較。
int mycmp(char *p1,char *p2)
{ /***answer begin***/
/***answer end***/ }
3.設有三個候選人,每次輸入一個得票的候選人的名字,要求最後輸出各人得票結果。
#include <string.h>
struct person
{ char name[20];
int count;
}leader[3]={「Li」,0,「Zhang」,0,」Wang「,0};
main()
{ int i,j; char leader_name[20];
for(i=1;i<=10;i++)
{/***answer begin***/
/***answer end***/}
for(i=0; i<3;i++)
printf("%5s:%d\n",leader[i].name,leader[i].count);
}
4. 從鍵盤上輸入一個字符串,將其中的小寫字母轉換成大寫字母,然後輸出到名為「test」的文本文件中保存。輸入字符串以「!」結束。
#include <stdio.h>
void main()
{
int i; char str[80]; FILE *fp;
if( (fp=fopen("test","w"))==NULL)
{ printf("cannot open file\n");
exit(0); }
printf("Input a string(end with !):");
gets(str);
/***answer begin***/
/***answer end***/
}
試卷二
一、單項選擇題(30分,每題2分)
每小題的四個選項中只有一個符合題目要求,請將正確選項前字母填在括號中。
1. 若int a[][3]={1,2,3,4,5,6};則a[1][0]的值是【______】。
A. 4B. 2C. 1D. 5
2. 執行下列程序段後,變量k的值是【______】。
int k=3, s[2];
s[0]=k;
k = s[1]*10;
A)不確定 B)0
C)10D)30
3. 執行下列程序段後,變量k的值是【______】。
int k=3, s[2]={1};
s[0]=k;
k = s[1]+10;
A)不確定 B)0
C)10D)30
4. 下面程序的輸出結果是【______】。
#include <stdio.h>
void main(void)
{
int i, a[10];
for(i=9;i>=0; i--)
a[i]=10-i;
printf("%d%d%d\n",a[2],a[5],a[8]);
}
A)258B)741
C)852D)369
5. 下面程序的輸出結果是【______】。
#include <stdio.h>
void main(void)
{
int a[3][3]={1,2,3,4,5,6,7,8,9},i;
for(i=0;i<3; i++)
printf("%d ",a[i][2-i]);
}
A)1 5 9B)3 5 7
C)1 4 7D)3 6 9
6. 下面程序的輸出結果是【______】。
#include "stdio.h"
void fun(int a[])
{
int i;
for(j=0;j<5; j++)
a[j]=j;
}
void main(void)
{
int num[]={5,6,7,8,9}, i;
fun(num);
for(i=0;i<5; i++)
printf("%d ", num[i]);
}
A. 56789B. 98765C. 01234D. 43210
7. 下面程序的輸出結果是【______】。
#include "stdio.h"
void main(void)
{
char c1[]="ABCD",c2[5];
int i;
for(i=0;i<4;i++)
c2[i]=(c1[i]- 'A'-3+26)%26+'a';
c2[4]= '\0';
puts(c2);
}
A. abcdB. ABCDC. XYZAD. xyza
8. 下面程序的輸出結果是【______】。
#include <stdio.h>
void main(void)
{
int n=6, *p=&n;
*p=8;
printf("%d\n",n);
}
A. 8B. 6C. 7D. 不確定
9. 下面程序的輸出結果是【______】。
#include <stdio.h>
void main(void)
{
int a=3, b=6, c=9;
int *pa=&a, *pa=&b, *p;
*(p=&c)=*pa*(*pb);
printf("%d\n",c);
}
A. 8B. 18C. 27D. 9
10. 下面程序的輸出結果是【______】。
#include <stdio.h>
void main( void )
{
char a[]={0,1,2,3,4,5,6,7,8,9}, *p=a;
printf("%d, %d\n", *p+3, *(p+6));
}
A. 2,2B. 3,5C. 3,6D. 3,7
11. 下面程序的輸出結果是【______】。
#include <stdio.h>
void main( void )
{
short a[]={1,3,5,7,9}, *p, **k;
p=a;k=&p;
printf("%d, ", *(p++));
printf("%d, ", * *k);
}
A. 2,2,B. 3,5,C. 1,3,D. 1,3
12. 下面程序的輸出結果是【______】。
#include <stdio.h>
void main( void )
{
int a[]={2,4,6,8,10};
int *p=&a[4];
printf("%d, \n", *--p);
}
A. 10B. 9C. 7D. 8
13. 「strlen("\\141\141abc\t")」的返回值是【______】。
A. 9B. 12C. 13D. 14
14. 若char s[10]; s="abcd";printf("%s",s);程序的輸出結果是【______】。
A. abcdB. aC. dcbaD. 編譯錯誤
15. 下面函數中能正確交換x和y中的值,且返回交換結果的是【______】。
A. fun(int *x,int *y) {int *p; *p=*x;*x=*y;*y=*p}
B. fun(int x,int y) {int t;t=x;x=y;y=t; }
C.fun(int *x,int *y) {*x=*y;*y=*x; }
D.fun(int *x,int *y) { int p; p=*x;*x=*y;*y=p;}
二、填充題(30分,每空2分)
1. C程序可以分為三種基本結構, 即_______。
2. C語言中的_______語句提前結束本次循環,跳過循環體中位於該語句後的所有語句,進入下一輪循環。
3. 數組中的元素類型_______,並由數組名和下標唯一地確定。
4. 定義int a[2][4];,數組a中可以容納______個整數。
5. 設整型變量m和n的值均為6,則執行語句do m++;while (--n>0)後,變量m的值是_______。
6. 若char s[]="123456",*p=s+1;則表達式「*p+1」值對應的字符是_______。
7. 設字符型變量m的值為'm',執行語句if (m>='a'&&m<='z') m-=32;後,變量m中的字符是____________。
8. 設整型變量k的值為0,則循環語句「while (k++<9) k++;」的循環體一共執行_______次。
9. 若char s[10]="ABCD\0\t",則字符型數組s中存放的字符串長度是________。
10. 若int a[][3]={{1,2,3},{4,5,6}},(*p)[3]=a;則表達式*(*p+1)的值是______。
11. C語言在判斷一個量是否為「真」時,以_______代表「真」,以0代表「假」。
12. C語言中只能用於循環和switch~case結構的語句是______。
13. C語言中通過#______命令可以定義符號常量。
14. 對於數組x[5][5],*(x+2)+3表示__________。
15. 對於數組x[5][5],*(x[3]+2)表示__________。
三、程序設計題(40分,每空2分)
1.用C語言編程求百元買百雞問題:用一百元錢買一百隻雞。已知公雞5元/只,母雞3元/只,小雞1元/3隻。問公雞、母雞、小雞各買多少只?
#include <stdio.h>
void main( void )
{
int x, y, z;
for (x=_______;x<=100;x++)
for (y=0; _______<=100;y++)
{
z=_______-x-y;
if (5*x+_______*y+z/_______==100 )
printf(「cocks=%d,hens=%d,chickens=%d\n",x,y,z);
}
}
2.用C語言編寫一個函數,將指定的自然數分解成質因子的連乘積,例如:88=2*2*2*11。
void fun( int n )
{
int i;
printf("%d=",n);
for(i=_______; i<=n; i++)
while(n!= _______)
{
if(n%i==_______)
{
printf("%d*",i);
n=n/_______;
}
else
_______;
}
printf("%d",n);
}
3.用C語言編寫一個函數atoi,將一個整數字符串轉換成一個整數
,"512"==>512。
_______ atoi( char str[] )
{
int value=_______, i=0;
while(str[i]!= '_______')
{
value = value *_______+str[i]- '0';
i_______;
}
}
4.用C語言編寫一個函數對指定的4×4矩陣查找最大值所在的行列號。
#include <stdio.h>
void maxval(double num[4][4])
{
int i,j,max,row=0, _______;
max=_______;
for(i=0;i<4;i++)
for(j=1;j<4;j++)
if(max<num[i][j])
{
max =_______;
row =_______;
col =_______;
}
printf("The max one is num[%d][%d]=%lf:\n",row,col,max);