試卷

一. 選擇題
1.已知變量說明如下:
int k,a,b;
unsigned long w=5;
double x=1.42;
則以下不符合c語言語法的是( A )
(A) x%(-3)          (B)w+=-3
(C) k=(a=2,b=3,a+b)    (D) a+=a-=(b=1)*(a=2)
2.若int x=0,y=2,z=5; 則下列表達式值爲假的是( D )
(A) ‘x’&&’yy’  (B) x<y  (C) x||y+z&&y+z  (D)  !((x<y)&&!Z||1)
3.若定義float a; 則表達式 a=1 , a+1,a+=a;的值是( B )
(A)2   (B)2.0  (C)4    (D) 4.0
4.以下是正確的字符型常量的是(B   )
(A) ‘\’   (B) ‘\\’  (C) “\\”    (D) “\”
5.若int 類型佔用兩個字符,則以下程序段的輸出結果是( C )
  int a=-2;
  printf(“%d,%u\n”,a,a);
(A)-2,-2  (B)-2,32766 (C)-2,32768 (D)-2,65534
6.下列運算符中優先級最低的是(  D )
(A)>=   (B) <=   (C)!=    (D)+=
7.下列運算符中優先級最高的是( D )
(A)<<         (B) <=   (C)&&    (D)%
8.執行程序段
  int a,b,c;
  a=b=c=0;
  ++a||++b&&++c;
 後,變量a,b,c的值分別是( D )
(A) 0 0 0     (B)1 0 0  (C)1 1 0   (D)1 1 1
9.以下程序段中循環體執行了(  D)次
 int n=1000;
 while(---n>=0)
  printf(“%d”,n);
(A)988    (B)999    (C)1000   (D)1001
10.下面程序段的執行結果是(C  )
#define prt(a,b) if(!a) b=a
main()
{
int x=1,y=0;
if(x>y) prt(x,y);
else prt (y,x);
printf(“%d,%d”,x,y);
}
(A) 1;0   (B)  0,1    (C) 0,0   (D) 編譯出錯
11.表達式”c=*p++”的執行過程是( A )
(A)賦值*p的值給c後在執行p++
(B)賦值*p的值給c後在執行*p++
(C)賦值p的值給c後在執行p++
(D)賦值p的值給c後在執行*p++
12.若main函數前省略返回值類型,以下說法正確的是( B )
(A)main 是特殊的函數,沒有返回值
(B)main是特殊的函數,系統根據實際程序給定返回值類型
(C)省略返回值類型,默認爲void
(D)省略返回值類型,默認爲 int
13.下面程序的輸出結果(  B )
 int a=1,b=2;
printf(“%d\n”,a=a+1,a+6,b+2);
(A) 1   (B) 2    (C) 4     (D) 8
14.下面程序輸出結果是(  C )
int a=1,b=2;
printf(“%d\n”,(a=a+1,a+6,b+2));
(A) 1   (B) 2    (C) 4     (D) 8
15.設int類型佔用2字節,這下面程序結果是( D )
int a=-1;
printf(“%d,%o,%u\n”,a,a,a);
(A) -1,-1,-1  (B) -1,-77777,-32768  (C) -1,177777,-32768 (D) -1,177777,65535
16.下面程序段的輸出結果是( C )
int x=‘y’;
printf(“%c”,(x=x-’a’+3+’A’)-’Z’>0?x-’Z’+’A’-1:x);
(A) Y  (B) Z    (C) B    (D) C
17.若x爲int類型,則與邏輯表達式!X等價的表達式是( A )
(A)x==0   (B)x==1  (C) x!=0   (D) x!=1
18.下面程序段的運行結果是( B )
int x=2,y=3,z=4;
z=x<y?++x:++y;
printf(“%d,%d,%d\n”,x,y,z);
(A) 2,3,4   (B) 3,3,3   (C) 3,4,3   (D)  3,4,2
19.下面程序段的運行結果是( C )  //注意:c++執行了3次
int a=1,b=3,c=0;
switch(a%3)
{
case 0 :c++;break;
case 1:c++;
Switch(b%2){
default:c++;                           //沒有break
case 0:c++;break;}}
Printf(“%d”,c);
(A) 1    (B) 2     (C) 3   (D) 4
20.下面說法中正確的是( D  )
(A)在switch語句中一定要用break語句
(B)break語句是switch語句的一部分
(C)break語句只能用於switch語句
(D)在switch語句中不一定要使用break語句
21.以下數組初始化錯誤的是(C  )
(A)int a[5]={1,2,3,4,5};
(B)  int a[5]={1,2,3,4,5,};
(C)  int a[5]={1,2,3,4,5,6};  
(D)  int a[5]={1,2,3,4};
22.對於下面程序段,說法正確的是( C )
int a=5;
for(;a=0;) a--;
(A) 循環體語句執行了一次
(B) 循環體語句一次也不執行
(C) 循環體語句執行了5次
(D) 編譯出錯
23.下面程序段的運行結果是( A )
int a=5,b=3,c=1;
while(a>b>c) a+=1,b+=2,c+=3;
printf(“%d,%d,%d\n”,a,b,c);
(A)5,3,1    (B) 6,5,4   (C) 7,7,7   (D) 8,9,10
24.語句int x=100;while(x--);執行後變量x的值是( C )
(A)0  (B)1        (C)-1   (D)-2
25.若有以下語句,則能表示數組元素的表達式是(  D )
int a[3][5],(*p)[5];p=a;
(A) p+1  (B) *(p+2)  (C) *(p+1)+2  (D) *(*p+2)
26.若有定義char c[5],*p=c;以下正確的語句是(  C )
(A)c=“1234”;  (B) *c=“1234”;   (C) p=“1234”;  (D)*p=“1234”;
27.若有以下定義,則使數組元素a[2]值爲4的表達式爲( D )
int a[]={1,2,3,4,5,6,7,8,9,10},*p=a;
(A)p+=2,*(p++)  (B) p+=2,*++p   (C) p+=3,*p++  (D) p+=2,++*p
28.若有以下定義,則值爲3的表達式是(   )   ???????
(A)a[1]+1   (B) *(p+1)+1  (C) p++,p[0][1]  (D) (*a+1)+1
29.下面程序段的輸出結果是( C )
int a=1,b=2,*p,**pp;
p=&a;pp=&p;p=&b;             //把b的地址賦給指針變量p,此時指針變量間接指向b
printf(“%d,%d,\n”,*p,**pp);
(A) 1,1   (B) 1,2    (C) 2,2    (D) 2,1  
30.以下所列出的函數原型申明中,錯誤的是(C )
(A)int (*f)(int);     (B)int  f(int*);    
(C) struct aa{ int a; int b; } f(struct aa);  (D) struct aa{int a; int b;}; struct aa f(struct aa);
31.以下描述中,不正確的是( B )
(A)調用函數時,實參可以是常量.表達式
(B)調用函數時,形參可以是常量.表達式
(C)調用函數時,實參與形參的類型必須匹配
(D)調用函數時,要爲形參分配存儲單元
32.在函數調用語句 fun(a+b,(x+y),fun(n,m,(a,b)));中,實參的個數是( A  )
(A)3   (B)4    (C)5    (D) 語句有錯誤
33.設有以下宏定義;
#define N 5
#define f(M)  ((N+1)*M)
則語句x=2*(N+1)+2*f(N+1);執行後,整型變量x的值是( C  )
(A)84  (B)73    (C)74   (D)語句有錯誤
34.以下說明中,標識符AA代表變量的是( C )
(A)typedef struct { int a; double b; } AA;
(B) #define AA struct aa  
 AA{ int a;double b; };
 (C)struct {int a ;double b;}AA;
(D) struct aa{ int a;double b; }
  typedef struct aa AA;
35.對於文件操作,以下錯誤的說法是( A )
(A)若用”r+”方式打開文件,則可以進行輸入和輸出,但輸入後不能直接進行輸出
(B)若用”r”方式打開一個不存在的文件,則會返回NULL指針
(C)若用”w”方式打開不存在的文件,則會創建該文件
(D)若用”a”方式打開一個不存在的文件,則會返回NULL指針
36.若要打開C盤work目錄下file1.txt文件進行讀操作,正確的語句是(C )
(A)fopen(“c:\work\file1.txt”,”r”);
(B)open(“c:\work\file1.txt”,’r’);
(C)fopen(“c:\\work\\file1.txt”,”r”);
(D)fopen(“c:\\work\\file1.txt”,’r’);
二.程序填空題
1.下面函數可以檢查給定的字符串中括號是否匹配對,若配對返回0,否則返回1
int fun(char *p )
{
 int n; char  *q;
 for(q=p;*q;q++)
 if(*q=='(')
  n=1;
  else if(*q==')')
          {
   n--;
   if(*q=='\n') return 1;
          }
if(n>0) return 1;
else return 0;
} 
2. 下面的函數實現將一個單向鏈表裏的結點倒置排列,請填寫完整
struct node* fun(struct node*head){
    Struct node *p,*q;
    If(head==NULL||head->next == NULL)  //只有鏈表爲空或只有一個結點
        return head;
    P=head;                //p從第1個結點起
    q=p->next;             //q從第2個結點起,並且q幾乎總在p的下一個結點位置
    while(q != NULL) {
        p->next = q->next; //第1個結點直接指向第3個結點
        q->next=head;      //q作爲新的首結點
        head=q;            //head重新定位
        q = p->next;       //p總是出現在p的下一個位置
    }
    return head;
} 
 3. 下面程序實現統計當前目錄下文件file.txt中子串”read”出現的次數,請填寫完整
#include<stdio.h>
#include<string.h>
main()
{
 FILE *fp;
Int t ,ch,num=0;
char str[5]=“read”,buf[5];
if(() {
printf(“cannot open the file\n”); exit(1);
}
for(t=0;t<4;t++) buf[t]=_____________________________________; buf[t]=‘\0’;
if( strcmp( str,buf )==0 ) num++;
while( (ch=fgetc(fp))!=EOF ) {
 for( t=0;t<3;t++ ) _____________________________________;
________________________________________;
if(strcmp(str,buf)==0) num++;
}
fclose(fp);
printf(“the number of read is: %d\n”,num);
} 
4. 下面函數實現將一個N*N的整型矩陣實現轉置並存儲在原矩形中
#define N 5
void fun(int (*a)[N])
{
 int i,j,t;
 for(i=0;i<N;i++)
  for(j=i+1;j<N;j++)
  {
   t=a[i][j];
   a[i][j]=a[j][i];
   a[j][i]=t;
  }
} 

 5. 下面函數都實現字符串的拷貝功能

char *fun1(char *s1,char *s2)
{
    int i;
    for(i=0;(++s1[i]=++s2[i])!='\n';i++);
 return s1;
}
char *fun2(char *s1,char *s2)
{
    char *p;
    p=s2;
    for(p=0;(++*s1=++*s2)!='\n';p++);
    return s1;
}
6. 下面函數實現數組的排序(升序),請填寫完整(選擇排序法)
void inv(int a[],int n)
{
 int i,j,k;
 for(i=0;i<n-1;i++)
 {
  k=i;
  for(j=i+1;j<n ;j++)
   if(a[k]<a[j])  k=j;
  if(k!=i)
  {
   int temp=a[i];
   a[i]=a[k];
   a[k]=temp;
  }
 } 


}7. 下面函數實現將一個表示浮點數的字符串轉換爲double類型的值
double fun(char *s)
{
 double x=0,y=0;t=10;
 int c,f=1;
while(*s)
 {
 if(*s==‘.’) f=0;
else
{
c=*s-’0’;
if(_______) { x=x*10+c; }
else {  y=y+c/1;______________; }
}
 s++;
}
____________________;
}
三.讀程題
 1.從鍵盤輸入4,程序運行結果是:_______//這題沒有scanf,gets,getchar無法輸入
  #include<stdio.h>
  #define N 20
  main()
 {
   int a[N],I,j;
   for(i=2;i<N;i++) a[i]=1;
   for(i=2;i<N;i++)
    if(a[i])  for(j=2*I;j<N;j+=i) a[j]=0;
    for(i=2;i<N;i++) if(a[i]) printf(“%4d”,i);
}
2.下面函數的功能是:將數組中的數據倒序輸出
void fun(int a[],int n)
{
if(n>1) fun(&a[1],n-1);
printf(“%d”,a[0]);  
}
 3.下面程序若輸入12345,則輸出是9303
#include<stdio.h>  
void main()
{
 int n,x=0,t;
 scanf("%d",&n);
 do{
    t=n%16;
    x=x*10+t;
  }
 while(n/=16);
    printf("%d",x);    
}   
4.下面程序,若從鍵盤輸入4,這輸出_________________
#include<stdio.h>
#define N 10
void main()
{
 int a[N][N],k,i,j,n;
 scanf("%d",&n);
 for (k=1;k<=n;k++)  
 {
  for(i=0,j=k-1;j<n;i++,j++)
   a[i][j]=k;
  for(j=0,i=n+1-k;i<n;i++,j++ )  
   a[i][j]=k;
 }
 for(i=0;i<n;i++)
 {
  for(j=0;j<n;j++)  
   printf("%4d",a[i][j]);
  printf("%n");
 }
}
5.設整數在內存佔用4個字節,則以下程序若從鍵盤輸入-375,則輸出是__________
#include<stdio.h>
void main()
{
    int x,i;
 unsigned m=1<<31;
    scanf("%d",&x);
 for(i=1;i<=32;i++)
 {
    putchar(x&m ? '1' :'0');
    x<<=1;
    if(i%4==0)  
     putchar(' ');
  }
}   
6.下面函數的功能是:求數組中比第一個數小的數,
int fun(int a[],int n)
{
 int x;
 if(n==1) return a[0];
 else
  x=fun(&a[1],n-1);
    return x<a[0]?x:a[0];
} 
四.編程題
1.利用一維整型數組可以實現超長整數的加法,編程實現;從鍵盤輸入兩個40位正整數,輸出其和
#include<stdio.h>
#define N 2
void main()
{
	int a[N],b[N],s[N+1],i,t=0;
	for(i=N-1;i>=0;i--)       /*輸入數組a*/
		scanf("%d",&a[i]);

	for(i=N-1;i>=0;i--)       /*輸入數組b*/
		scanf("%d",&b[i]);
	for(i=0;i<N-1;i++)
	{
		s[i]=a[i]+b[i]+t;
		if(s[i]>10)
		{
			t=s[i]/10;
			s[i]=s[i]%10;
		}
		else  t=0;
	}

	if(t==0)
		for(i=N-1;i>=0;i--)
			printf("%d",s[i]);
	else
	{
		s[i]=t;
		for(i=N;i>=0;i--)
			printf("%d",a[i]);
	}
}  
2.編程找出一個M*N矩陣中的鞍點
/*
編程找出一個M*N矩陣中的鞍點
由鍵盤輸入一個3行4列的矩陣,輸出矩陣中的鞍點
(即在矩陣行中最大,列中最小的數)。若沒有鞍點,輸出“NO”字樣。

*/
#include<stdio.h>
#include<stdlib.h>
#define M 3
#define N 4
void main()
{
	int a[M][N],i,j,k;
	int max,t;
	for(i=0;i<M;i++)
		for(j=0;j<N;j++)
			scanf("%d",&a[i][j]);
	for(i=0;i<M;i++)
	{
		max=0;                        //此時假設每一行的最大值是第一個數即a[i][0]
		for(j=i+1;j<N;j++)            //找出列中的最大值
		{
			if(a[i][j]>a[i][max])
				max=j;
		}
		for(t=1,k=0;k<M&&t;k++)      //判斷是否在列中是不是最小值
		{
			if(a[k][max]<a[i][max])  //如果還存在數比a[k][max]的值還小,則置t=0,
				t=0;                 //t是一個標識,t=0  表示不存在,
		}
	}
	if(t) printf("yes,%d\n",a[i][max]);
	else  printf("no");
}


3.編寫函數實現計算任意n*4整型矩陣上的周邊元素之和
int fun( int a[][4],int n)
{
   int s=0;
   int i;
   for(i=0;i<4;i++) s=s+a[0][i]+a[n-1][i];
      for(i=1;i<n-1;i++) s=s+a[i][0]+a[i][3];
      return s;

}

/*
編程計算矩陣5*4整數矩陣周邊各元素之和,矩陣的各元素從鍵盤輸入
*/
#include<stdio.h>
void main()
{
	int a[5][4],i,j,sum=0;
	for(i=0;i<5;i++)
		for(j=0;j<4;j++)
			scanf("%d",a[i][j]);
	sum+=a[i][j];

	for(i=0;i<4;i++)
		for(j=0;j<3;j++)
			sum-=a[i][j];

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

/*
編寫函數實現計算任意N*4整型矩陣上的周邊元素之和
假設輸入的數值
1  2  3  4
5  6  7  8
9  10 11 12
13 14 15 16
*/
#include<stdio.h>
#define N 3
int fun(int a[][4],int n)
{
	int i,sum=0;
	for(i=0;i<4;i++)
		sum+=a[0][i]+a[n-1][i];   //第一行和最後一行的和,此時的i代表的是列數
	for(i=1;i<n-1;i++)
		sum+=a[i][0]+a[i][3];       //第一列的的第二行開始到 n-1行的     和最後一列的的第二行開始到 n-1行的,此時的i代表的是行數
	return sum;
}
void main()
{
	int i,j;
	int a[N][4];
	for(i=0;i<N;i++)
		for(j=0;j<4;j++)
			scanf("%d",&a[i][j]);
	int s=fun(a,N);
	printf("矩陣N*4周邊的元素之和爲:%d",s);
	printf("\n");
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章