一、選擇題(每小題1分,共40分)
(1)下列敘述中正確的是
A)對長度為n的有序鏈表進行查找,最壞情況下需要的比較次數為n
B)對長度為n的有序鏈表進行對分查找,最壞情況下需要的比較次數為(n/2)
C)對長度為n的有序鏈表進行對分查找,最壞情況下需要的比較次數為(log2n)
D)對長度為n的有序鏈表進行對分查找,最壞情況下需要的比較次數為(nlog2n)
(2)演算法的時問復雜度是指
A)演算法的執行時間
B)演算法所處理的資料量
C)演算法程式中的陳述句或指令條數
D)演算法在執行程序中所需要的基本運算次數
(3)軟體按功能可以分為:應用軟體、系統軟體和支撐軟體(或工具軟體),下面屬于系統軟體的是
A)編輯軟體 B)作業系統 C)教務管理系統 D)瀏覽器
(4)軟體(程式)除錯的任務是
A)診斷和改正程式中的錯誤 B)盡可能多地發現程式中的錯誤
C)發現并改正程式中的所有錯誤 D)確定程式中錯誤的性質
(5)資料流程圖(DFD圖)是
A)軟體概要設計的工具 B)軟體詳細設計的工具
C)結構化方法的需求分析工具 D)面向物件方法的需求分析工具
(6)軟體生命周期可分為定義階段,開發階段和維護階段,詳細設計屬于
A)定義階段 B)開發階段 C)維護階段 D)上述三個階段
(7)資料庫管理系統中負責資料模式定義的語言是
A)資料定義語言 B)資料管理語言 C)資料操縱語言 D)資料控制語言
(8)在學生管理的關系資料庫中,存取一個學生資訊的資料單位是
A)檔案 B)資料庫 C)欄位 D)記錄
(9)資料庫設計中,用E-R圖來描述資訊結構但不涉及資訊在計算機中的表示,它屬于資料庫設計的
A)需求分析階段 B)邏輯設計階段 C)概念設計階段 D)物理設計階段
(10)有兩個關系R和T如下:
則由關系K得到關系T的操作是
A)選擇 B)投影 C)交 D)并
(11)以下敘述正確的是
A)C語言程式是由程序和函陣列成的
B)C語言函式可以嵌套呼叫,例如:fun(fun(x))
C)C語言函式不可以單獨編譯
D)C語言中除了main函式,其他函式不可作為單獨檔案形式存在
(12)以下關于C語言的敘述中正確的是
A)C語言中的注釋不可以夾在變數名或關鍵字的中間
B)C語言中的變數可以在使用之前的任何位置進行定義
C)在C語言算術運算式的書寫中,運算子兩側的運算元型別必須一致
D)C語言的數值常量中夾帶空格不影響常量值的正確表示
(13)以下C語言用戶識別符號中,不合法的是
A)_1 B)AaBc C)a_b D)a--b
(14)若有定義:double a=22;int i=0,k=18;,則不符合C語言規定的賦值陳述句是
A)a= i++; B)i=(a+k)<=(i+k); C)i=a%11; D)i=!a;
(15)有以下程式
#include <stdio.h>
int main()
{ char a,b,c,d;
scanf(“%c%c”,&a,&b);
c=getchar(); d=getchar();
printf(“%c%c%c%c\n”,a,b,c,d);
return 0;
}
當執行程式時,按下列方式輸入資料(從第1列開始,<CR>代表回車,注意:回車也是一個字符)
12<CR>
34<CR>
則輸出結果是
A) 12 B) 1234 C)12 D)12
3 34
(16)以下關于C語言資料型別使用的敘述中錯誤的是
A)若要準確無誤差的表示自然數,應使用整數型別
B)若要保存帶有多位小數的資料,應使用雙精度型別
C)若要處理如“人員資訊”等含有不同型別的相關資料,應自定義結構體型別
D)若只處理“真”和“假”兩種邏輯值,應使用邏輯型別
(17)若a是數值型別,則邏輯運算式(a==1)||(a!=1)的值是
A) 0 B) 1
C)2 D)不知道a的值,不能確定
(18)以下選項中與if (a==1)a=b; else a++;陳述句功能不同的switch陳述句是
A)switch(a) B)switch(a==1)
{ case 1:a=b;break; { case 0:a=b;break;
default:a++; case 1:a++;
} }
C)switch(a) D)switch(a==1)
{ default:a++;break; { case 1:a=b;break;
case 1:a=b; case 0:a++;
} }
(19)有如下嵌套的if陳述句
if (a<b)
if (a<c) k=a;
else k=c;
else
if (b<c) k=b;
else k=c;
以下選項中與上述if陳述句等價的陳述句是
A)k=(a<b)?a:b; k=(b<c)?b:c; B)k=(a<b)?a:b; k=(a<c)?a:c;
C)k=(a<b)?((a<c)?a:c):((b<c)?b:c); D) k=(a<b)?((b<c)?a:b):((b>c)?b:c);
(20)有以下程式
#include <stdio.h>
int main()
{
int i,j,m=1;
for (i=1;i<3;i++)
{
for(j=3;j>0;j--)
{
if(i*j>3)break;
m*=i*j;
}
}
printf("m=%d\n",m);
return 0;
}
程式運行后的輸出結果是
A)m=2 B)m=4 C)m=5 D)m=6
(21)有以下程式
#include <stdio.h>
int main()
{ int a=1;b=2;
for (;a<8;a++) { b+=a; a+=2;}
printf(“%d,%d\n”,a,b);
return 0;
}
程式運行后的輸出結果是
A) 7,11 B)8,11 C) 9,18 D)10,14
(22)有以下程式
#include <stdio.h>
int main()
{ int k=011;
printf(“%d\n”,k++);
return 0;
}
程式運行后的輸出結果是
A) 9 B) 10 C) 11 D) 12
(23)下列陳述句組中,正確的是
A)char *s; s=“Olympic”; B)char s[7]; s=“Olympic”;
C)char *s; s={“Olympic”}; D)char s[7]; s={“Olympic”};
(24)以下關于return陳述句的敘述中正確的是
A)一個自定義函式中必須有一條return陳述句
B)一個自定義函式中可以根據不同情況設定多條return陳述句
C)定義成void型別的函式中可以有帶回傳值的return陳述句
D)沒有return陳述句的自定義函式在執行結束時不能回傳到呼叫處
(25)下列選項中,能正確定義陣列的陳述句是
A)int num[0..2008]; B)int num[]; C)int N=2008; D)#define N 2008
int num[N]; int num[N];
(26)有以下程式
#include <stdio.h>
void fun(char *c,int d)
{ *c=*c+1;d=d+1;
printf(“%c,%c,”,*c,d);
}
int main()
{ char b='a',a='A';
fun(&b,a);
printf(“%c,%c\n”,b,a);
return 0;
}
程式運行后的輸出結果是
A)b,B,b,A B)b,B,B,A C)a,B,B,a D)a,B,a,B
(27)若有定義int (*Pt)[3];,則下列說法正確的是
A)定義了基型別為int的三個指標變數
B)定義了基型別為int的具有三個元素的指標陣列pt
C)定義了一個名為*pt、具有三個元素的整型陣列
D)定義了一個名為pt的指標變數,它可以指向每行有三個整數元素的二維陣列
(28)設有定義double a[10],*s=a;,以下能夠代表陣列元素a[3]的是
A)(*s)[3] B)*(s+3) C)*s[3] D)*s+3
(29)有以下程式
#include <stdio.h>
int main()
{ int a[5]={1,2,3,4,5},b[5]={0,2,1,3,0},i,s=0;
for (i=0; i<5; i++) s=s+a[b[i]];
printf("%d\n",s);
return 0;
}
程式運行后的輸出結果是
A)6 B)10 C)11 D)15
(30)有以下程式
#include <stdio.h>
int main()
{
int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;
for (i=0; i<3; i++)
for (j=0; j<=i; j++)
t+=b[i][b[j][i]];
printf("%d\n",t);
return 0;
}
程式運行后的輸出結果是
A)1 B)3 C)4 D)9
(31)若有以下定義和陳述句
char s1[10]=“abcd!”,*s2=“\n123\\”;
printf(“%d %d\n”, strlen(s1),strlen(s2));
則輸出結果是
A)5 5 B) 5 7 C) 10 5 D) 10 7
(32)有以下程式
#include <stdio.h>
#define N 8
void fun(int *x,int i)
{*x=*(x+i);}
int main()
{ int a[N]={1,2,3,4,5,6,7,8},i;
fun(a,2);
for(i=0;i<N/2;i++)
{ printf(“%d”,a[i]);}
printf(“\n”);
return 0;
}
程式運行后的輸出結果是
A)1234 B)1313 C)2234 D)3234
(33)有以下程式
#include <stdio.h>
int f(int t[],int n)
{
if (n>0) return t[n-1]+f(t,n-1);
else return 0;
}
int main()
{
int a[4]={1,2,3,4},s;
s=f(a,4);
printf("%d\n",s);
return 0;
}
程式運行后的輸出結果是
A)4 B)10 C)14 D)16
(34)有以下程式
#include <stdio.h>
int fun()
{
static int x=1;
x*=2;
return x;
}
int main()
{
int i,s=0;
for (i=1; i<=2;i++)
s=fun();
printf("%d\n",s);
return 0;
}
程式運行后的輸出結果是
A)0 B)1 C)4 D)8
(35)有以下程式
#include <stdio.h>
#define SUB(a) (a)-(a)
int main()
{
int a=2,b=3,c=5,d;
d=SUB(a+b)*c;
printf("%d\n",d);
return 0;
}
程式運行后的輸出結果是
A) -20 B)-12 C) 0 D)10
(36)設有定義:
struct complex
{ int real,unreal;} data1={1,8},data2;
則以下賦值陳述句中錯誤的是
A)data2=data1; B)data2={2,6};
C)data2.real=data1.real; D)data2.real=data1.unreal;
(37)有以下程式
#include <stdio.h>
#include <string.h>
struct A
{
int a;
char b[10];
double c;
};
void f(struct A t)
{
t.a=1002;
strcpy(t.b,"ChangRong");
t.c=1202.0;
}
int main()
{
struct A a={1001,"ZhangDa",1098.0};
f(a);
printf("%d,%s,%6.1f\n",a.a,a.b,a.c);
return 0;
}
程式運行后的輸出結果是
A)1001,zhangDa,1098.0 B)1002,changRong,1202.0
C)1001,ehangRong,1098.0 D)1002,ZhangDa,1202.0
(38)有以下定義和陳述句
struct workers
{
int num;
char name[20];
struct
{ int day,month,year;} S;
};
struct workers w,*pw;
pw=&w;
能給w中year成員賦1980的陳述句是
A)*pw.year=1980; B)w.year=1980;
C)pw->year=1980; D)w.s.year=1980;
(39)有以下程式
#include <stdio.h>
int main()
{ int a=2,b=2,c=2;
printf(“%d\n”,a/b&c);
return 0;
}
程式運行后的輸出結果是
A)0 B)1 C)2 D)3
(40)有以下程式
#include <stdio.h>
int main()
{ FILE *fp;char str[10];
fp=fopen(“myfile.dat”,”w”);
fputs(“abc”,fp); fclose(fp);
fpfopen(“myfile.data”,”a++”);
fprintf(fp,”%d”,28);
rewind(fp);
fscanf(fp,”%s”,str); puts(str);
fclose(fp);
return 0;
}
程式運行后的輸出結果是
A)abc B) 28c
C) abc28 D)因型別不一致而出錯
二、程式填空題(18分)
給定程式中,函式fun的功能是建立一個N×N的矩陣,矩陣元素的構成規律是:最外層元素的值全部為1;從外向內第2層元素的值全部為2;第3層元素的值全部為3,……依此類推,例如,若N=5,生成的矩陣為:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
請在程式的下畫線處填入正確的內容并把下畫線洗掉,使程式得出正確的結果,注意:部分源程式在檔案BLANK1.C中,不得增行或刪行,也不得更改程式的結構!
試題程式:
#include <stdio.h> #define N 7 /**********found**********/ void fun(int (*a)__1__) { int i,j,k,m; if(N%2==0) m=N/2 ; else m=N/2+1; for(i=0; i<m; i++) { /**********found**********/ for(j=__2__; j<N-i; j++) a[i][j]=a[N-i-1][j]=i+1; for(k=i+1; k<N-i; k++) /**********found**********/ a[k][i]=a[k][N-i-1]=__3__; } } int main() { int x[N][N]={0},i,j; fun(x); printf("The result is:\n"); for(i=0; i<N; i++) {
for(j=0; j<N; j++) printf("%3d",x[i][j]); printf("\n"); } return 0; }
三、程式修改題(18分)
下列給定程式中,函式fun的功能是:求k!(k<13),所求階乘的值作為函式值回傳,例如,若k=10,則應輸出3628800,
請改正程式中的錯誤,使它能得出正確的結果,
注意:部分源程式在檔案MODI1.C中,不要改動main函式,不得增行或刪行,也不得更改程式的結構!
試題程式:
#include <conio.h> #include <stdio.h> long fun(int k) { /*************found**************/ if k>1 return(k*fun(k-1)); /*************found**************/ return 0; } void main() { int k=10; printf("%d!=%ld\n ",k,fun(k)); }
四、程式設計題(24分)
撰寫一個函式,該函式可以統計一個長度為2的字串在另一個字串中出現的次數,例如,假定輸入的字串為"asd asasdfg asd as zx67 asd mklo",子字串為"as",則應當輸出6,
注意:部分源程式在檔案PROG1.C中,
請勿改動主函式main和其他函式中的任何內容,僅在函式fun的花括號中填入你撰寫的若干陳述句,
試題程式:
#include <conio.h> #include <stdio.h> #include <string.h> #include <stdlib.h> int fun(char *str, char *substr) { } void main() { FILE *wf; char str[81],substr[3]; int n; system("CLS"); printf("輸入主字串: "); gets(str); printf("輸入子字串: "); gets(substr); puts(str); puts(substr); n=fun(str,substr); printf("n=%d\n ",n); /******************************/ wf=fopen("out.dat","w"); n=fun("asd asasdfg asd as zx67 asd mklo","as"); fprintf(wf,"%d",n); fclose(wf); /*****************************/ }
一、選擇題 ( 1)~(10) : A D B A C B A D A A (11)~(20) : B B D C C D B B C D (21)~(30) : D A A B D A D B C D (31)~(40) : A D B C A B A D A C 二、程式填空題 (1) [N] (2) i (3) i+1 三、程式改錯題 (1) if (k>1) (2) return 1; 四、程式設計題 int i,j=0; for (i=0; str[i+1]!='\0'; i++) if (str[i]==substr[0] && str[i+1]==substr[1]) j++; return j;參考答案:
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/530504.html
標籤:C
下一篇:c陣列與結構體
