一、選擇題(每小題1分,共40分)
(1)資料的存盤結構是指
A)存盤在外存中的資料
B)資料所占的存盤空間量
C)資料在計算機中的順序存盤方式
D)資料的邏輯結構在計算機中的表示
(2)下列關于堆疊的描述中,錯誤的是
A)堆疊是先進后出的線性表
B)堆疊只能順序存盤
C)堆疊具有記憶作用
D)對堆疊的插入與洗掉操作中,不需要改變堆疊底指標
(3)對于長度為n的線性表,在最壞情況下,下列各排序法所對應的比較次數中正確的是
A)冒泡排序為n/2 B)冒泡排序為n
C)快速排序為n D)快速排序為n(n-1)/2
(4)對長度為n的線性表進行順序查找,在最壞情況下所需要的比較次數為
A)log2n B) n/2 C) n D) n+1
(5)下列對于線性鏈表的描述中正確的是
A)存盤空間不一定是連續,且各元素的存盤順序是任意的
B)存盤空間不一定是連續,且前件元素一定存盤在后件元素的前面
C)存盤空間必須連續,且前件元素一定存盤在后件元素的前面
D)存盤空間必須連續,且各元素的存盤順序是任意的
(6)下列對于軟體的描述中正確的是
A)軟體測驗的目的是證明程式是否正確
B)軟體測驗的目的是使程式運行結果正確
C)軟體測驗的目的是盡可能多地發現程式中的錯誤
D)軟體測驗的目的是使程式符合結構化原則
(7)為了使模塊盡可能獨立,要求
A)模塊的內聚程式要盡量高,且各模塊間的耦合程式要盡量強
B)模塊的內聚程式要盡量高,且各模塊間的耦合程式要盡量弱
C)模塊的內聚程式要盡量低,且各模塊間的耦合程式要盡量弱
D)模塊的內聚程式要盡量低,且各模塊間的耦合程式要盡量強
(8)下列描述中正確的是
A)程式就是軟體
B)軟體開發不受計算機系統的限制
C)軟體既是邏輯物體,又是物理物體
D)軟體是程式、資料與相關檔案的集合
(9)資料獨立性是資料庫技術的重要特點之一,所謂資料獨立性是指
A)資料與程式獨立存放
B)不同的資料被存放在不同的檔案中
C)不同的資料只能被對應的應用程式所使用
D)資料與程式間的互不依賴性,包括資料的物理獨立性和資料的邏輯獨立性
(10)用樹形結構表示物體之間聯系的模型是
A)關系模型 B)網狀模型 C)層次模型 D)面向物件模型
(11)以下選項中可作為C語言合法常量的是
A)-80 B)-080 C)-8e1.0 D)-80.0e
(12)以下敘述中,正確的是
A)用C程式實作的演算法必須要有輸入和輸出操作
B)用C程式實作的演算法可以沒有輸出但必須要有輸入
C)用C程式實作的演算法可以沒有輸入但必須要有輸出
D)用C程式實作的演算法可以既沒有輸入也沒有輸出
(13)以下不能定義為用戶識別符號的是
A)Main B)_0 C)_int D)sizeof
(14)以下選項中,不能作為合法常量的是
A)1.234e04 B)1.234e0.4 C)1.234e+4 D)1.234e0
(15)數字字符0的A SCII值為48,若有以下程式
main()
{ char a='1',b='2';
printf("%c,",b++);
printf("%d\n",b-a);
}
程式運行后的輸出結果是
A)2,2 B)3,2 C)2,50 D)50,2
(16)有以下程式
main()
{ int m=12,n=34;
printf("%d%d",m++,++n);
printf("%d%d\n",n++,++m);
}
程式運行后的輸出結果是
A)12353514 B)12353513 C)12343514 D)12343513
(17)有定義陳述句:int b; char c[10]; ,則正確的輸入陳述句是
A)scanf("%d%s",&b,&c); B)scanf("%d%s",&b,c);
C)scanf("%d%s",b,c); D)scanf("%d%s",b,&c);
(18)有以下程式
main()
{ int m,n,p;
scanf("m=%dn=%dp=%d",&m,&n,&p);
printf("%d%d%d\n",m,n,p);
}
若想從鍵盤上輸入資料,使變數m中的值為123,n中的值為456,p中的值為789,則正確的輸入是
A)m=123n=456p=789 B)m=123 n=456 p=789
C)m=123,n=456,p=789 D)123 456 789
(19)有以下程式
main()
{
int a,b,d=25;
a=d/10%9;
b=a&&(-1);
printf("%d,%d\n",a,b);
}
程式運行后的輸出結果是
A)2,0 B)2,1 C)6,0 D)6,1
(20)有以下程式
main()
{ int i=1,j=2,k=3;
if (i++==1&&(++j==3||k++==3))
printf("%d %d %d\n",i,j,k);
}
程式運行后的輸出結果是
A)1 2 3 B)2 3 4 C)2 2 3 D)2 3 3
(21)若整型變數a、b、c、d中的值依次為:1、4、3、2,則條件運算式a<b?a:c<d?c:d的值
A)1 B)2 c)3 D)4
(22)有以下程式
main()
{ char a[7]="a0\0a0\0";int i,j;
i=sizeof(a); j=strlen(a);
printf("%d %d\n",i,j);
}
程式運行后的輸出結果是
A)2 2 B)6 2 C)7 2 D)7 6
(23)有以下程式
main()
{
int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;
while(i++<7) if(p[i]%2) j+=p[i];
printf("%d\n",j);
}
程式運行后的輸出結果是
A)42 B)45 C)56 D)60
(24)以下能正確定義一維陣列的選項是
A)int a[5]={0,1,2,3,4,5}; B)char a[]={0,1,2,3,4,5};
C)char a={'A','B','C'}; D)int a[5]="0123";
(25)有以下程式
int f1(int x,int y) {return x>y?x:y;}
int f2(int x,int y) {return x>y?y:x;}
main()
{ int a=4,b=3,c=5,d=2,e,f;
e=f2(f1(a,b),f1(c,d));
f=f1(f2(a,b),f2(c,d));
printf("%d,%d\n",e,f);
}
程式運行后的輸出結果是
A)2,5 B)3,4 C)4,3 D)5,2
(26)有以下程式
void f(int *x,int *y)
{ int t;
t=*x;*x=*y;*y=t;
}
main()
{ int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;
p=a;q=&a[7];
while(p<q)
{
f(p,q);
p++;
q--;
}
for(i=0;i<8;i++)
printf("%d,",a[i]);
}
程式運行后的輸出結果是
A)8,2,3,4,5,6,7,1, B)5,6,7,8,1,2,3,4,
C)1,2,3,4,5,6,7,8, D)8,7,6,5,4,3,2,1,
(27)有以下程式
main()
{
int a[3][3],*p,i;
p=&a[0][0];
for(i=0;i<9;i++)
p[i]=i;
for(i=0;i<3;i++)
printf("%d ",a[1][i]);
}
程式運行后的輸出結果是
A)0 1 2 B)1 2 3 C)2 3 4 D)3 4 5
(28)以下敘述中錯誤的是
A)對于double型別陣列,不可以直接用陣列名對陣列進行整體輸入或輸出
B)陣列名代表的是陣列所占存盤區的首地址,其值不可改變
C)當程式執行中,陣列元素的下標超出所定義的下標范圍時,系統將給出“下標越界”的出錯資訊
D)可以通過賦初值的方式確定陣列元素的個數
(29)有以下程式
#define N 20
fun(int a[],int n,int m)
{ int i,j;
for(i=m;i>=n;i--)
a[i+1]=a[i];
}
main()
{
int i,a[N]={1,2,3,4,5,6,7,8,9,10};
fun(a,2,9);
for(i=0;i<5;i++)
printf("%d",a[i]);
}
程式運行后的輸出結果是
A)10234 B)12234 C)12334 D)12344
(30)有以下程式
main()
{
int c=35; printf("%d\n",c&c);
}
程式運行后的輸出結果是
A) 0 B) 1 C) 35 D) 70
(31)程式中若有如下的說明和定義陳述句
char fun(char *);
main()
{
char *s="one",a[5]={0},(*f1)()=fun,ch;
……
}
以下選項中,對函式fun的正確呼叫陳述句是
A)(*f1)(a); B)*f1(*s); C)fun(&a); D)ch=*f1(s)
(32)以下敘述中,正確的是
A)預處理命令列必須位于源檔案的開頭
B)在源檔案的一行上可以有多條預處理命令
C)宏名必須用大寫字母表示
D)宏替換不占用程式的運行時間
(33)若有以下說明和定義
union dt
{
int a; char b; double c;
}data;
以下敘述中錯誤的是
A)data的每個成員起始地址都相同
B)變數data所占記憶體位元組數與成員c所占位元組數相等
C)程式段:data.a=5; printf("%f\n",data.c);輸出結果為5.000000
D)data可以作為函式的實參
(34)以下陳述句或陳述句組中,能正確進行字串賦值的是
A)char *sp; *sp="right!"; B)char s[10]; s="right!";
C)char s[10]; *s="right!"; D)char *sp="right!";
(35)有以下程式
main()
{
int a=1,b;
for(b=1;b<=10;b++)
{
if(a>=8) break;
if(a%2==1) { a+=5; continue;}
a-=3;
}
printf("%d\n",b);
}
程式運行后的輸出結果是
A)3 B)4 C)5 D)6
(36)有以下程式
main()
{
char s[]="159",*p;
p=s;
printf("%c",*p++);
printf("%c",*p++);
}
程式運行后的輸出結果是
A)12 B)15 C)16 D)59
(37)有以下函式
fun(char *a,char *b)
{
while((*a!='\0')&&(*b!='\0')&&(*a==*b))
{ a++; b++;}
return (*a-*b);
}
該函式的功能是
A)計算a和b所指字串的長度之差
B)將b所指字串復制到a所指字串中
C)將b所指字串連接到a所指字串后面
D)比較a和b所指字串的大小
(38)有以下結構體說明和變數定義,如圖所示,指標pqr分別指向此鏈表中三個連續結點,
struct node
{
int data;
struct node *next;
} *p,*q,*r;

現要將q所指結點從鏈表中洗掉,同時保持鏈表的連續,以下不能完成指定操作的陳述句是
A)p->next=q->next; B)p->next=p->next->next;
C)p->next=r; D)p=q->next;
(39)以下與函式fseek(fp,0L,SEEK_SET)有相同作用的是
A)feof(fp) B)ftell(fp) C)fgetc(fp) D)rewind(fp)
(40)有以下程式
#include "stdio.h"
void WriteStr(char *fn,char *str)
{
FILE *fp;
fp=fopen(fn,"W");
fputs(str,fp);
fclose(fp);
}
main()
{
WriteStr("t1.dat","start");
WriteStr("t1.dat","end");
}
程式運行后,檔案t1.dat中的內容是
A)start B)end C)startend D)endrt
二、程式填空題(18分)
函式fun的功能是:計算
的前n項,若x=2.5,函式值為12.182340,
請在程式的下畫線處填入正確的內容并把下畫線洗掉,使程式得出正確的結果,
注意:部分源程式在檔案BLANK1.C中,不得增行或刪行,也不得更改程式的結構,
試題程式:
#include <stdio.h> double fun(double x, int n) { double f, t; int i; f = 1.0; /**********found**********/ t=___1___; /**********found**********/ for(i=___2___;i<n;i++) { /**********found**********/ t*=x/___3___; f += t; } return f; } int main() { double x, y; x=2.5; y = fun(x, 12); printf("The result is :\n"); printf("x=%-12.6f,y=%-12.6f\n", x, y); return 0; }
三、程式修改題(18分)
下列給定程式中fun函式功能是:將n個無序整數從小到大排序,請改正程式中的錯誤,使它能得出正確的結果,注意:部分源程式在檔案MODI1.C中,不得增行或刪行,也不得更改程式的結構!
試題程式:
#include <stdio.h> #include <stdlib.h> fun ( int n, int *a ) { int i, j, p, t; for ( j = 0; j<n-1 ; j++ ) { p = j; /************found************/ for (i=j+1; i<n-1 ; i++ ) if ( a[p]>a[i] ) /************found************/ t=i; if ( p!=j ) { t = a[j]; a[j] = a[p]; a[p] = t; } } } void putarr( int n, int *z ) { int i; for ( i = 1; i <= n; i++, z++ ) { printf( "%4d", *z ); if ( !( i%10 ) ) printf( "\n" ); } printf("\n"); } int main() { int aa[20]={9,3,0,4,1,2,5,6,8,10,7}, n=11; printf( "Before sorting %d numbers:\n", n ); putarr( n, aa ); fun( n, aa ); printf( "After sorting %d numbers:\n", n ); putarr( n, aa ); return 0; }
四、程式設計題(24分)
撰寫函式int fun(int lim, int aa[MAX]),其功能是求出小于或等于lim的所有素數并放在aa陣列中,并回傳所求出的素數的個數,
注意:部分源程式在檔案PROG1.C中,請勿改動主函式main和其他函式中的任何內容,僅在函式fun的花括號中填入你撰寫的若干陳述句,
試題程式:
#include<conio.h> #include<stdio.h> #include<stdlib.h> #define MAX 100 int fun(int lim, int aa[MAX]) { } void main() { FILE *wf; int limit,i,sum; int aa[MAX]; system("CLS"); printf("輸入一個整數:"); scanf("%d",&limit); sum=fun(limit,aa); for(i=0;i<sum;i++) { if(i%10==0&&i!=0) /*每行輸出10個數*/ printf("\n "); printf("%5d ",aa[i]); } wf=fopen("out.dat","w"); sum=fun(15,aa); for(i=0;i<sum;i++) { if(i%10==0&&i!=0) /*每行輸出10個數*/ fprintf(wf,"\n"); fprintf(wf,"%5d ",aa[i]); } fclose(wf); }
一、選擇題 ( 1)~(10):D B D C A C B D D C (11)~(15):A C D B A A B A B D (21)~(30):A C B B C D D C C C (31)~(40):A D C D B B D D D B 二、程式填空題 (1) 1.0 (2) 1 (3)i 三、程式改錯題 (1)錯誤: for (i=j+1; i<n-1 ; i++ ) 正確: for (i=j+1; i<n ; i++ ) (2)錯誤: t=i; 正確: p=i; 四、程式設計題 int i,j,k=0; for (i=2;i<=lim;i++) { for (j=2;j<i;j++) if (i%j==0) break; if (j>=i) aa[k++]=i; } return k;參考答案:
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/528875.html
標籤:C
