函數可以單獨編譯嗎成結構化
1. 2010二級c語言筆試真題
一、選擇題((1)—(10)、(21)—(40)每題2分,(11)—(20)每題1分。共70分)
下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的,請將正確選項塗寫
在答題卡上,答在試卷上不得分。
(1) 下列敘述中正確的是
A)對長度為n的有序鏈表進行查找,最壞情況下需要的比較次數為n
B)對長度為n的有序鏈表進行對分查找,最壞情況下需要的比較次數為(n/2)
C)對長度為n的有序鏈表進行對分查找,最壞情況下需要的比較次數為(log2n)
D) 對長度為n的有序鏈表進行對分查找,最壞情況下需要的比較次數為(n log2n)
(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如下:
R T
A B C
a 1 2
b 2 2
c 3 2
A B C
c 3 2
d 3 2
則由關系R得到關系T的操作是
選擇 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=a++,i++ B)i=(a+k)<=(i+k) C)i=a%11 D)i=!a
(15)
#include <stdio.h>
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);
}
當執行程序時,按下列方式輸入數據(從第一列開始,<CR>代表回車,注意:回車是一個字元)
12<CR>
34<CR>
則輸出結果是:
A、1234 B、12 C、12 D、12
3 34
16、以下關於C語言數據類型使用的敘述中錯誤的是:
A、若要准確無誤的表示自然數,應使用整數類型。
B、若要保存帶有多位小數的數據,應使用雙精度類型。
C、若要處理如」人員信息」等含有不同類型的相關數據,應自定義結構體類型。
D、若只處理」真」和」假」兩種邏輯值,應使用邏輯類型。
17、若a是數值類型,則邏輯表達式(a==1)||(a!=1)的值是:
A、1 B、0 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)?((b<c)?a:b):((b<c)?b:c);
C、k=(a<b)?((a<c)?a:c):((b<c)?b:c);
D、k=(a<b)?a:b;k=(a<c)?a;c
(20)有以下程序
#include <stdio.h>
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)
}
程序運行後的輸出結果是
(A) m=6 (B)m=2 (C)m=4 (D)m=5
(21)有以下程序
#includes <stdio.h>
main()
{ int a=1,b=2;
for(;a<8;a++) {b+=a; a+=2;}
printf (」%d,%d\n」,a,b);
}
程序運行後的輸出結果是
(A)9,18 (B)8,11 (C)7,11 (D)10,14
(22)有以下程序,其中k的初值為八進制數
#include <stdio.h>
main()
{int k=011;
printf(」%d\n」,k++);
}
程序運行後的輸出結果是
(A)12 (B)11 (C)10 (D)9
(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)定義成viod類型的函數中可以有帶返回值的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);
}
main()
{char b=』a』,a=』A』;
fun(&b,a); printf(」%c,%c\n」,b,a);
}
程序運行後的輸出結果是
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>
main()
{ int a[5]={1,2,3,4,5}, b[5]={0,2,1,3,0},is=0
for(i=0;i<5;i++) s=s+a[b[i]];
printf("%d\n",s);
}
程序運行後的輸出結果是
A) 6 B) 10 C) 11 D)15
30)有以下程序
#include<stdio.h>
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=i;j<=i;j++) t+=b[i][b[j][i]];
Printf("%d\n",t);
}
程序運行後的輸出結果是
A)1 B)3 C)4 D)9
(31)若有以下定義和語句
char sl[10]= "abcd!", *s2="n123\\";
printf("%d %d\n", strlen(s1),strlen(s2));
則輸出結果是
A) 5 5 B)10 5 C)10 7 D)5 8
(32)有以下程序
#include<stdio.h>
#define N 8
void fun(int *x,int i)
{*x=*(x+i);}
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");
}
程序運行後的輸出結果是
A)1 3 1 3 B) 2 2 3 4 C) 3 2 3 4 D)1 2 3 4
(33)有以下程序
#include<studio.h>
int f(int t [ ],int n);
main()
{int a[4]={1,2,3,4},s;
s=f{a,4}; printf(」%d\n」,s);
}
int f(int t[], int n)
{ if (n>0) return t[n-1]+f(t,n-1);
else return 0;
}
程序運行後的輸出結果是
A)4 B)10 C)14 D)6
(34)有以下程序
#include<studio.h>
int fun()
{static int x=1;
x*=2; return x;
}
main()
{int I,s=1;
for (i=1;i<=2;i++) s=fun();
printf(」%d\n」,s);
}
程序運行後的輸出結果是
A)0 B)1 C) 4 D)8
(35)以下程序
#include <stdio.h>
#define SUB(a) (a)-(a)
main()
{int a=2,b=3,c=5,d;
d=SUB(a+b)*c;
printf(」%d\n」,d);
}
程序運行後的結果是
A)0 B)-12 C)-20 D)10
(36)沒有定義
struct complex
{ int real, unreal ;} datal={1,8},data2;
則以下賦值語句中的錯誤的是
A)data2=data1; B)data2=(2,6);
C)data2.real1=data1.real; D)data2.real=data1.unreal;
(37)有以下程序
#include <studio.h>
#include <string.h>
struct A
{int a; char b[10];double c;};
void f(struct A t);
main()
{struct A a={1001,」ZhangDa」,1098.0};
f(a); pringt(」%d,%s,%6.1f\n」,a.a,a.b,a.c);
}
void f(struct A t)
{t.a=1002;strcpy(t.b,」ChangRong」);t.c=1202.0;}
程序運行後的輸出結果是
A)1001,ZhangDa,1098.0 B)1002,ChangRong,1202.0
C)1001,ChangRong,1098.0 D)1002,ZhangDa,1202.0
(38)有以下定義和語句
struct workers
{int num; char name[20];char c;
srruct
{int day;int month;intyear;} 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>
main()
{int a=2,b=2,c=2;
printf(」%d\n」,a/b&c);
}
程序運行後的結果是
A)0 B)1 C)2 D)3
(40)以下程序
#include<stdio.h>
main( )
{ FILE *fp;char str[10];
fp=fopen(」myfile.dat」,」w」);
fputs(」abc」,fp); fclose(fp);
fp=fopen(」myfile.dat」,」a+」);
rewind(fp,」gd」,28);
rewind(fp);
fscanf(fp,」gs」,str); puts(str);
fclose(fp);
}
程序運行後的輸出結果是
A)abc B)28c C)abc28 D)因類型不一致而出錯
二、填空題(每空2分,共30分)
請將每空的正確答案寫在答題卡【1】至【15】序號的橫線上,答在試卷上不得分。
(1)一個隊列的初始狀態為空,先將元素A,CB,C,D,E,F,5,4,3,2,1依次入隊,然後再依次退隊,則元素退隊的順序為___【1】__。
(2)設某循環列隊的容量為50,如果頭指針front=45(指向隊頭元素的前一位置),尾指針rear=10(指向隊尾元素),則該循環隊列中共有___【2】__個元素。
(3)設二叉數如下:
對該二叉樹進行後序遍歷的結果為【3】
(4)軟體是 【4】 、數據和文檔的集合。
(5)有一個學生選課的關系,其中學生的關系模式為:學生(學號,姓名,班級,年齡),課程的關系模式為:課程(課號,課程名,學時),其中兩個關系模式的鍵分別是學好和課號,則關系模式選課可以定義為:選課(學號, 【5】 ,成績)。
(6)設x為int型變數,請寫出一個關系表達式 【6】 ,用以判斷x同時為3和7的倍數時,關系表達式的值為真。
(7)有以下程序
#include < stdio.h >
main()
{ int a=1,b=2,c=3,d=0;
if (a==1)
if (b!=2)
if(c!=3) d=1;
else d=2;
else if(c!=3) d=3;
else d=4;
else d=5;
printf(」%d\n」,d);
}
程序運行後的輸出結果是: 【7】 。
(8)有以下程序
#include < stdio.h >
main()
{ int m,n;
scanf(」%d%d」,&m,&n);
while (m!=n)
{ while(m>n) m=m-n;
while(m<n)n=n-m;
}
printf(」%d\n」,m);
}
程序運行後,當輸入14 63<回車>時,輸出結果是 【8】
(9)有以下程序
#include <stdio.h>
main ()
{ int I,j,a[][3]={1,2,3,4,5,6,7,8,9};
for (i=1;i<3;i++)
for(j=I;j<3;j++) printtf(」%d」,a[i][j]);
printf(」\n」);
}
程序運行後的輸出結果是 【9】
(10) 有以下程序
#include <stdio.h>
main()
{
int []={1,2,3,4,5,6},*k[3],i=0;
while(i<3)
{
k[i]=&a[2*i];
printf(」%d」,*k[i]);
i++;
}
}
程序運行後的輸出結果是__________
(11) 有以下程序
#include <stdio.h>
main()
{
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int b[3]={0},i;
for(i=0;i<3;i++) b[i]=a[i][2]+a[2][i];
for(i=0;i<3;i++) printf(」%d」,b[i]);
printf(」\n」);
}
程序運行後的結果是____________
(12) 有以下程序
#include <stdio.h>
#include <string.h>
void fun(char*str)
{
char temp; int n,i;
n=strlen(str);
temp=str[n-1];
for(i=n-1;i>0;i--) str[i]=str[i-1];
str[0]=temp;
}
main()
{
char s[50];
scanf(」%s」,s); fun(s); printf(」%s\n」,s);
}
程序運行後輸入:abcdef<回車>,則輸出結果是____________
13、以下程序的功能是:將值為三位正整數的變數x中的數值按照個位、十位、百位的順序拆分並輸出。請填空。
#include<stdio.h>
main()
{
int x=256;
printf(」%d-%d-%d\n」, ,x/10%10,x/100);
}
14、以下程序用以刪除字元串中的所有的空格,請填空。
#include<stdio.h>
main()
{
char s[100]={」our .tercher teach c language!」};int i,j;
for( i=j=0;s[i]!=『\0』;i++)
if(s[i]!=『 』) { s[j]=s[i];j++; }
s[j]= ;
printf(」%s\n」,s);
}
(15)以下程序功能是:藉助指針變數找出數組元素中的最大值及其元素的下標值。請填空。
#include <stdio.h>
main()
{
int a[10],*p,*s;
for(p=a;p-a<10;p++) scanf(」%d」,p);
for(p=a,s=a;p-a<10;p++) if(*p>*s) s=_______________;
printf(」index=%d\n」,s-a);
2. C語言的編程格式是怎麼樣的
C語言源程序的編程格式歸納如下:
1,強制性規則
1,一個C語言源程序必須有且只有一個MAIN函數.
2,函數名後必須緊跟圓括弧對,函數體放在右圓括弧")"後的花括弧對"{}"中.
3,每個程序體(包括函數的函數體,含有多條語句的選擇結構和循環結構中的語句序列)必須用一對花括弧括起來.
4,文件包含預處理命令,#INCLUDE<*.H>應置於源程序的開始位置.
5,語句未尾必須有分號,而預處理命令和函數首部的未尾及右花括弧之後不要分號.
6,同一字母大,小寫意義不同,關鍵字和標准庫函數名必須用小寫.
7,變數必須先定義,後使用
8,除已有明顯間隔符外,標識符,關鍵字之間必須有至少一個空格
9,註解必須包含在"/* */符號之間
3. 沒有主函數的c語言程序能編譯嗎
有函數都可以單獨編譯..而且必須有主函數才能編譯成exe的。
4. c語言是完全模塊化和結構化的語言,怎麼理解,什麼是模塊化和結構化
所謂模塊化,簡單的理解,就是說你的程序是由相互之間相對獨立的模塊組成。那麼具體的說,一個稍微大一點的程序,不可能用一個.c源文件寫上幾十萬行來完成它吧?這個程序會由許多分離的.c源文件來完成代碼編寫對吧。因此在組織源代碼的時候,程序員把在概念上和功能上相對獨立的模塊分離成單獨的.c源文件,這些.c源文件經過編譯器編譯之後成為獨立的.o目標文件,然後鏈接器將這些獨立的.o目標文件鏈接起來成為最終的程序。這就是模塊化的簡單理解,模塊化側重於「形成最終程序的源代碼可以分離編寫在各個.c源文件中」這個涵義。
而結構化則相對來說是一種程序邏輯上的概念。也就是說,你怎麼將你的程序最終要達成的功能以一種邏輯的方式將其分離為相對獨立的功能,而這些單獨的功能最終達成程序的整體功能。而一門語言要支持這種邏輯的分離,就必須提供一種相應的手段和方法來達成這種邏輯的分離對吧。簡單的說,如果C語言不允許你自己定義函數,要求你將所有的功能實現都必須寫在一個main函數裡面的話,你想想也知道那簡直太糟糕了對吧。所以C語言提供了一個函數的概念,你可以在函數里定義相對獨立的邏輯,函數與函數之間通過函數調用和參數傳遞來相互溝通。這樣就使得一個整體的邏輯可以被分離成相對獨立的邏輯,這些相對獨立的邏輯通過相互的溝通來達成整體的邏輯。所以簡單的說,支持函數就是支持結構化。結構化側重於「你可以將程序邏輯相互分離」這個涵義。
我想我說的夠清楚了。你知道語言的表達能力是有限的,我已經發揮了我語言表達能力的極致。剩下的意會即可。給分吧。
5. 每個函數都可以被單獨編譯對嗎
A、main函數是不能被任何函數調用的,所以a錯了
B、函數可以單獨編譯,每個函數都能單獨寫成一個文件,所以B對的
C、函數都要通過main函數的調用才能正確的運行,main函數是一個程序的唯一入口
D、函數是不可以嵌套使用的
6. c語言中的函數可不可以單獨進行編譯
是可以的。
庫函數是把函數放到庫里,供別人使用的一種方式。函數庫是由系統建立的具有一定功能的函數的集合。庫中存放函數的名稱和對應的目標代碼,以及連接過程中所需的重定位信息。用戶也可以根據自己的需要建立自己的用戶函數庫。
使用C語言的語句直接計算sin或cos函數,就需要編寫頗為復雜的程序。因為C語言的語句中沒有提供直接計算sin或cos函數的語句。又如為了顯示一段文字,我們在C語言中也找不到顯示語句,只能使用庫函數printf。
(6)函數可以單獨編譯嗎成結構化擴展閱讀
函數庫的分類
1、字元串、內存和字元函數
需要的包含文件:string.h、mem.h、ctype.h或string.h;
2、數學函數
需要的包含文件:math.h;
3、動態存儲分配
需要的包含文件:alloc.h或stdlib.h ;
7. c語言中的函數可不可以單獨進行編譯為什麼
因為C語言中你編寫的函數中用到了基本的比如輸出,定義這些,這些都是頭文件裡面寫好的,如果你要單獨編譯,可以自己把這些東西定義在一個文件中,自己重新寫一遍,另外還得編譯器支持。
8. c語言中除了後main函數外,其他函數能作為單獨文件形式存在嗎
可以,放在同一個項目裡面,在頭文件裡面include這個函數所在文件就可以了