⑴ c語言期末考試編程題
1輸入兩個整數a和b,若a和b的平方和大於100,則輸出平方和的百位以上的數字,否則輸出a和 b的和。
要求: 1)輸出結果時說明平方和是大於100還是小於100( >100或<100 )
#include<stdio.h>
int main(){
int a, b, c;
scanf("%d%d", &a, &b);
c = a * a + b * b;
if(c > 100) printf("平方和大於100\n%d\n", c%100);
else printf("平方和小於等於100\n%d\n", a + b);
return 0;
}
2輸入一個整數,判斷是否是5和7的公倍數,若是則輸出:5and7yes,否則再判斷是否是3的倍數,若是3的倍數輸出:3yes,若都不是則輸出:no
#include<stdio.h>
int main(){
int input;
scanf("%d", &input);
if(input % 5 == 0 && input % 7 == 0)printf("5and7yes\n");
else if(input % 3 == 0) printf("3yes\n");
else printf("no\n");
return 0;
}
第三,四題和第二題差不多
5計算公式: [ 2*x x=2
y= [ x*x+1 x<2
[ 2*x*x+3*x+1 x>2
要求: 1)從鍵盤輸入x的值,根據x的值求y的值
2)輸出y的值
#include<stdio.h>
int main(){
int x, y;
scanf("%d", &x);
if(x == 2) y = 2*x;
else if(x < 2) y = x*x+1;
else y = 2 * x * x + 3 * x + 1;
printf("%d\n", y);
return 0;
}
8 和7差不多
下面原理都差不多 用if基本都能搞定 判斷條件就行了 應該LZ能搞定了 東西有點多 -。- 就寫這些吧 其他的就不一一寫了^ ^
⑵ 大一C語言題目。 快期末了,麻煩幫幫看看。謝謝
答案C是對的,答案B是錯的。
getchar 由宏實現:#define getchar() getc(stdin)。getchar有一個int型的返回值.當程序調用getchar時.程序就等著用戶按鍵.用戶輸入的字元被存放在鍵盤緩沖區中.直到用戶按回車為止(回車字元也放在緩沖區中).當用戶鍵入回車之後,getchar才開始從stdio流中每次讀入一個字元.getchar函數的返回值是用戶輸入的字元的ASCII碼,如出錯返回-1,且將用戶輸入的字元回顯到屏幕.如用戶在按回車之前輸入了不止一個字元,其他字元會保留在鍵盤緩存區中,等待後續getchar調用讀取.也就是說,後續的getchar調用不會等待用戶按鍵,而直接讀取緩沖區中的字元,直到緩沖區中的字元讀完為後,才等待用戶按鍵.
getch與getchar基本功能相同,差別是getch直接從鍵盤獲取鍵值,不等待用戶按回車,只要用戶按一個鍵,getch就立刻返回,getch返回值是用戶輸入的ASCⅡ碼,出錯返回-1.輸入的字元不會回顯在屏幕上.getch函數常用於程序調試中,在調試時,在關鍵位置顯示有關的結果以待查看,然後用getch函數暫停程序運行,當按任意鍵後程序繼續運行.
⑶ 大一期末考試復習題,求教C語言編程高手
1、10 逗號(皮純,)分隔開的連續表達式,取最後一個表達式的值為整個表達鋒宏式的值。
2、A吧。這個不太確定。c語言中不允許出現A=B=C形式的賦值。C中沒有**這個東西,D中,強制轉換為y=(float)i;
3、B 所謂保留字,一燃基咐般是指C語言留作關鍵字了,比如int,我們不能定義一個變數名叫int的。
4、8 參照題目一,依次計算各個表達式,取最後一個表達式的值,結果為8。
⑷ 急需數據結構C語言版(清華大學出版社)的期末考試試題及答案
《數據結構》期末考試試卷( A )
一、 選擇題(每小題2分,共24分)
1.計算機識別、存儲和加工處理的對象被統稱為( A )
A.數據 B.數據元素
C.數據結構 D.數據類型
2.棧和隊列都是( A )
A.限制存取位置的線性結構 B.順序存儲的線性結構
C.鏈式存儲的線性結構 D.限制存取位置的非線性結構
3.鏈棧與順序棧相比,比較明顯的優點是( D )
A.插入操作更加方便 B.刪除操作更加方便
C.不會出現下溢的情況 D.不會出現上溢的情況
4.採用兩類不同存儲結構的字元串可分別簡稱為( B )
A.主串和子串 B.順序串和鏈串
C.目標串和模式串 D.變數串和常量串
5. 一個向量第一個元素的存儲地址是100,每個元素的長度為2,則第5個元素的地址是:B
A. 110 B .108
C. 100 D. 120
6.串是一種特殊的線性表,其特殊性體現在:B
A.可以順序存儲 B .數據元素是一個字元
C. 可以鏈接存儲 D. 數據元素可以是多個字元
7.設高度為h的二叉樹上只有度為0和度為2的結點,則此類二叉樹中所包含的結點數至少為: C
A. 2h B .2h-1
C. 2h+1 D. h+1
軟體開發網
8.樹的基本遍歷策略可分為先根遍歷和後根遍歷;二叉樹的基本遍歷策略可分為先序遍歷、中序遍歷和後序遍歷。這里,我們把 由樹轉化得到的二叉樹叫做這棵樹對應的二叉樹。下列結論哪個正確? A
A. 樹的先根遍歷序列與其對應的二叉樹的先序遍歷序列相同
B .樹的後根遍歷序列與其對應的二叉樹的後序遍歷序列相同
C. 樹的先根遍歷序列與其對應的二叉樹的中序遍歷序列相同
D. 以上都不對
9.一個有n個頂點的無向圖最多有多少邊?C
A. n B .n(n-1)
C. n(n-1)/2 D. 2n
10.在一個圖中,所有頂點的度數之和等於所有邊數的多少倍?C
A. 1/2 B .1
C. 2 D. 4
11.當在二叉排序樹中插入一個新結點時,若樹中不存在與待插入結點的關鍵字相同的結點,且新結點的關鍵字小於根結點的關鍵字,則新結點將成為( A )
A.左子樹的葉子結點 B.左子樹的分支結點
C.右子樹的葉子結點 D.右子樹的分支結點
軟體開發網
12.對於哈希函數H(key)=key%13,被稱為同義詞的關鍵字是( D )
A.35和41 B.23和39
C.15和44 D.25和51
二、已知某棵二叉樹的前序遍歷結果為A,B,D,E,G,C,F,H,I,J,其中中序遍歷的結果為D,B,G,E,A,H,F,I,J,C。請畫出二叉的具體結構。(注意要寫出具體步驟)(10分)
原理見課本128頁
三、有圖如下,請寫出從頂點c0出發的深度優先及寬度優先遍歷的結果。(10分)
深度優先;C0-C1-C3-C4-C5-C2
寬度優先:C0-C1-C2-C3-C4-C5
四、有圖如下,按Kruskal演算法求出其最小生成樹。要求寫出完整的步驟。(10分)
原理見課本250頁
五、給定線性表(12,23,45,66,76,88,93,103,166),試寫出在其上進行二分查找關鍵字值12,93,166的過程。並寫出二分查找的演算法。(20分)
0 1 2 3 4 5 6 7 8
12 23 45 66 76 88 93 103 166
過程:
mid=(0+8)/2=4
high=3,low=0 mid=1
high=0,low=0 mid=0(找到12)
high=8,low=5,mid=6(找到93)
high=8,low=7,mid=7
high=8 low=8 mid=8
演算法:見課本84頁上
六、知單鏈表的結點結構為
Data next
下列演算法對帶頭結點的單鏈表L進行簡單選擇排序,使得L中的元素按值從小到大排列。
請在空缺處填入合適的內容,使其成為完整的演算法。 (可用文字說明該演算法的基本思想及執行的過程,10分)
void SelectSort(LinkedList L)
{
LinkedList p,q,min;
DataType rcd;
p= (1) ;
while(p!=NULL) {
min=p;
q=p->next;
while(q!=NULL){
if( (2) )min=q;
q=q->next;
}
if( (3) ){
rcd=p->data;
p->data=min->data;
min->data=rcd;
}
(4) ;
}
}
本題不會。嘿嘿。。。。
七、一個完整的演算法應該具有哪幾個基本性質?分別簡要說明每一性質的含意。(5分)
輸入:
四個基本性質:1.輸入:有零個或多個有外部提供的量作為演算法的輸入
2:輸出:演算法產生至少一個量作為輸出
3.:確定性:組成演算法的每條指令是清晰的,無歧異的。
4.:有限性:演算法中每條指令的執行次數是有限的,執行每條指令的時間也是有限的
八、何謂隊列的"假溢"現象?如何解決?(5分)
隊列的假溢現象是指數組實現的順序隊列中,隊尾指針已到達數組的下表上界產生上溢而隊頭指針之前還有若干 空間閑置的現象。解決的辦法之一是利用循環隊列技術使數組空間的首尾相連。
九、說明並比較文件的各種物理結構。(6分)
⑸ 求一份C語言程序設計的期末考試試題!!!謝謝了
一.
選擇題
(共15題,
每題2分,共30分)
1.
定義結構體的關鍵字是(
)
A.
union
B.
enum
C.struct
D.typedef
2.
設整型變數a為5,使b不為2的表達式是(
)
A.
b=a/2
B.
b=6-(--a)
C.
b=a%2
D.
b=a>3?2:1
3.
下面哪一項是不正確的字元串賦值或賦初值的方法(
)
A.
char
*str;
str=
「china」;
B.
char
str[7]=
{『c』,
『h』,
『i』,
『n』,
『a』};
C.
char
str1[]=
「china」,str2[]=「123」;
D.
char
str1[10];
str1=
「china」;
4.
以下對二維數組a進行正確初始化的是(
)
A.
int
a[2][3]={{1,2},{3,4},{5,6}};
B.
int
a[
][3]={1,2,3,4,5,6};
C.
int
a[2][
]={1,2,3,4,5,6};
D.
int
a[2][
]={{1,2},{3,4}};
5.
選出下列標識符中不是合法的標識符的是(
)
A.
hot_do
B.
cat1
C.
_pri
D.
2ab
6.
以下說法中正確的是(
)
A.
C語言程序總是從第一個的函數開始執行
B.
在C語言程序中,要調用的函數必須在main()函數中定義
C.
C語言程序總是從main()函數開始執行
D.
C語言程序中的main()函數必須放在程序的開始部分
7.
若已定義:int
a[9],
*p=a;並在以後的語句中未改變p的值,不能表示a[1]地址的表達式為(
)
A.
p+1
B.
a+1
C.
a++
D.
++p
8.
若有說明:
int
i,j=7,
*p=&i;,
則與i=j;
等價的語句是(
)
A.
i=
*p;
B.
*p=*&j;
C.
i=&j;
D.
i=*
*p;
9.
若變數c為char類型,能正確判斷出c為小寫字母的表達式是(
)
A.
『a』<=c<=
『z』
B.
(c>=
『a』)
||
(c<=
『z』)
C.
(『a』<=c)
and
(『z』>=c)
D.
(c>=
『a』)
&&
(c<=
『z』)
10.
以下程序的輸出結果是(
)
main()
{
int
a[]={1,2,3,4,5,6,7,8,9},
*p;
p=a;
*(p+3)+=2;
printf(
「%d,%d\n」,*p,*(p+3)
);
}
A.
0,
5
B.
1,
6
C.
1,
5
D.
0,
6
11.
以下程序的輸出結果是(
)
main()
{
int
a=5;
float
x=3.14;
a*=x*(『E』-
『A』);
printf(「%f\n」,(float)a);
}
A.
62.000000
B.
62.800000
C.
63.000000
D.
62
12.
以下程序的輸出結果是(
)
#define
f(x)
x*x
main()
{
int
a=6,b=2,c;
c=f(a)/f(b);
printf(「%d\n」,c);
}
A.
9
B.
6
C.
36
D.
18
13.
定義如下變數和數組:int
i;
int
x[3][3]={1,2,3,4,5,6,7,8,9};
則語句for(i=0;i<3;i++)
printf("%d
",x[i][2-i]);
的輸出結果是(
)
A.
1
5
9
B.
1
4
7
C.
3
5
7
D.
3
6
9
14.
下列程序段的輸出結果是
(
)
void
main(
)
{
int
k;
for
(k=1;k<5;k++)
{
if(k%2!=0)
printf(
「#」
);
else
printf(「*」)
;
}
}
A.
#*#*
B
.
*#*#
C.
##
D.
**
15.
下列程序執行後輸出的結果是(
)
int
d=1;
fun
(int
p)
{
int
d=5;
d
+
=p
+
+;
printf("%d,",d);
}
main(
)
{
int
a=3;
fun(a);
d
+
=
a
+
+;
printf("%d\n",d);
}
A.
8,
4
B.
9,
6
C.
9,
4
D.
8,
5
二.
填空題(共7題,每空2分,共30分)
1.
數組
int
a[3][5];
共定義了_______________個元素。
2.
有float
f=3.1415927;
則
printf(「%5.4f」,
f
);輸出的結果是_______________。
3.
下面程序的功能是:輸出
100以內(不包含100)能被
3整除且個位數為
6的所有整數,請填空。
main(
)
{
int
i;
for(i=1;
_______________;
i++)
if
(_______________)
printf("%d",
i);
}
4.
設有「int
x=2,
y」說明,則逗號表達式「y=x+5,x+y」的值是
_______________
5.
以下是使用指針,進行字元串復制的程序,請填空。
main()
{
char
a[]=
「Tsinghua
University」,
b[30],
*p1,*p2;
p1=a;
p2=b;
for(;
*p1!=
『_______________』;
p1++,
p2++)
_______________=_______________;
*p2=
『_______________』;
printf(「string
a
is:%s\n」,a);
printf(「string
b
is:%s\n」,b);
}
6.
下面程序用冒泡法對數組a進行降序排序,請填空。
main()
{
int
a[5]={4,7,2,5,1};
int
i,j,m;
for(i=0;i<4;i++)
for(j=0;j<_______________;j++)
if(
_______________<
_______________
)
{
m=a[
j];
a[
j]=a[
j+1];
a[
j+1]=
m;
}
for(i=0;i<5;i++)
printf("%d
",a[i]);
}
7.
函數fun的功能是:使一個字元串按逆序存放,請填空。
void
fun
(char
str[])
{
char
m;
int
i,j;
for(i=0,j=strlen(str);i<_______________;i++,j--)
{
m=str[i];
str[i]=
_______________;
str[j-1]=m;
}
printf("the
rotated
string
is
%s\n",_______________);
}
⑹ 大一C語言期末考試求題庫
一、單項選擇題(共10題,每題2分,共20分。在備選答案中選擇一個最佳答案。多選、錯選、不選不得分)
1、不是C語言基本數據類型的是( )。
A、指針類型 B、整型
C、字元型 D、實型
2、設有:int a=3, b= 4, c= 5,x , y; 表達式0 && (x=a)&&(y=b)的值為( )。
A、1 B、0 C、3 D、4
3、設有語句 int a=3 ; 則執行了語句 a+=6;後,變數a 的值為( )。
A、18 B、-3 C、9 D、12
4、執行以下程序段後,輸出的y值為( )
void main()
{ int a[]={2,4,6,8,10};
int y, *p;
p=&a[0];
y=*p; printf(「%d」,y);
}
A、2 B、4 C、6 D、8
5、有定義語句:float a[4];則分配給數組a的內存空間為( )位元組。
A、 20 B、 12 C、 16 C、10
6、以下描述錯誤的是( )。
A、break語句可用於while語句。
B、break語句和continue語句的作用是一樣的。
C、在循環語句中使用break語句是為了跳出循環,提前結束循環。
D、在循環語句中使用continue語句是為了結束本次循環,而不終止整個循環。
7、C語言中規定,if語句的嵌套結構中,else總是( )。
A、與最近的if 配對 B、與第一個if 配對
C、按縮進位置相同的if配對 D、與最近的且尚未配對的if 配對
8、說明語句「int (*p)( ); 」的含義是( ) 。
A、p是一個指向一維數組的指針變數。
B、p是指針變數,指向一個整型數據。
C、p是一個指向函數的指針,該函數返回一個int型數據。
D、以上都不對。
9、以下對二維數組c的正確聲明是 ( ) 。
A、int c[3][ ]; B、int c(3,4);
C、int c(2)(2); D、int c[3][2];
10、下述程序段執行後輸出結果為( )。
int x=100, y=200;
printf ("% d", (x, y));
A、100 B、200 C、100,200 D、編譯出錯
二、填空題(共7題,共10空,每空1分,共10分。將答案填在題中橫線上)
1、C語言提供的三種邏輯運算符是 && 、 || 和!;
2、函數的返回值是通過函數中的 return 語句獲得的。
3、在"int a[ ][3]={{1},{3,2},{4,5,6},{0}};"定義後,a[2][2]的值為_6__ _;
4、對於"int *pa[5];" pa是一個具有5個元素的_數組指針_,每個元素是一個指向int型變數的__指針__;
5、單向鏈表的尾節點next指針應賦值__ NULL___;
6、在語句for(x=1,y=3;x>y;y++)中循環體執行的次數為 0 。
7、int a[5];數組a的首地址為2000,則元素a[1]的地址為 2002 ,元素a[2]的地址為 2004 。
三、程序填空題(共2題,共5空,每空4分,共20分)
1、以下程序完成計算1-1/2+1/3-1/4+1/5+……前n 項和,請填空。
#include <stdio.h>
int main( )
{ int i, n, flag;
float sum;
scanf("%d", &n);
flag= 1 ;
sum=0;
for(i=1;i<=n; i++ )
{ sum+=(float)flag/i;
flag=-flag ;
}
printf("%.3f\n", sum);
}
2、以下程序的功能是從鍵盤輸入n個整數,統計其中正數、0、負數的個數,請填空。
#include <stdio.h>
void main( )
{int a, i, count1,count2,count3;
count1=count2=count3=0 ;
for(i=1;i<=n;i++)
{ scanf(「%d」, &a);
if(a>0) count1++;
else if(a==0) count2++ ;
else count3++;
}
printf(「正數:&d個,零:%d個,負數:%d個\n」, count1,count2,count3 );
}
四、運行程序結果題(共4題,每題6分,共24分)
1、寫出程序運行結果。
void main( )
{ int x=1,y=2,t;
int *p1,*p2;
p1=&x; p2=&y;
t=*p1;*p1=*p2;*p2=t;
printf("x=%d,y=%d\n",x,y);
}
運行結果為:
程序有錯,不能運行!或寫:
x=2,y=1
2、寫出程序運行結果。
#include<stdio.h>
int max(int a,int b)
{ int c;
c=a>b?a:b;
return(c);
}
int min(int a,int b)
{int c;
c=a<b?a:b;
return(c);
}
void main()
{ int a=2,b=6;
printf("max=%d\n",max(a,b));
printf(「min=%d\n」,min(a,b));
}
運行結果為:
程序有錯,不能運行!或寫:
max=6
min=2
3、寫出程序運行結果。
#include <stdio.h>
void main()
{ int a[3][3]={1,2,3,4,5,6,7,8,9};
int i,j,sum=0;
for (i=0;i<3;i++)
for(j=0;j<3;j++)
if(i==j) sum=sum+a[i][j];
printf(「sum=%d\n」,sum);
}
運行結果為:
程序有錯,不能運行!或寫:
sum=15
4、寫出程序運行結果。
void main( )
{ int n,f;
n=1;
while(n<=10)
{ f=f*n;
n+=2;
}
printf(「f=%d\n」,&f);
}
運行結果為:
程序有錯,不能運行!或寫:
f=不確定
五、程序設計題(共2題,每題13分,共26分)
1、將一個數組按逆序存放,如元素1、2、3、4、5,按逆序存放後為5、4、3、2、1。
⑺ 徐師大c語言期末考試11機
1、函數fun的功能是計算x^n。
double fun(double x,int n)
{int i; double y=1;
for(i=1;i<=n;i++) y=y*x;
return y;
}
主函數中已經正確定義m、a、b變數並賦值,並調用fun函數計算:m=a^4+b^4-(a+b)^3。實現這一計算的函數調用語句為______。
答案: 1:fun(a,4)+fun(b,4)-fun((a+b),3)
評析:
函數fun的功能是計算x的n次方,所以a的4次方的調用函數應當為fun(a,4),b的4次方的調用函數應當為fun(b,4),(a+b)的3次方的調用函數應當為fun((a+b),3),所以,實現m=a^4+b^4-(a+b)^3這一計算的函數調用語句為:fun(a,4)+fun(b,4)-fun((a+b),3);。
知識點:知識點/函數/函數的正確調用,嵌套調用,遞歸調用
2、以下sstrcpy()函數實現字元串復制,即將t所指字元串復制到s所指內存空間中,形成一個新字元串s。請填空。
void sstrcpy(char *s,char *t)
{ while(*s++=______);}
main()
{ char str1[100],str2[]="abcdefgh";
sstrcpy(str1,str2);
printf("%s\n",str1);
}
答案: 1:*t++
評析:
要使sstrcpy()函數實現字元串復制,必須將t字元串中的每個字元逐個拷到s字元串中,所以可以使用*s=*t;s++;t++。或者可以寫成*s++=*t++,本題只有一個空,可以填入*t++。
知識點:知識點/指針/用指針作函數參數
3、以下程序給指櫻源神針p分配三個double型動態內存單元,請填空。
#include <stdlib.h>
main()
{ double *p;
p=(double*)malloc(______);
p[0]=1.5; p[1]=2.5;p[2]=3.5;
printf("%f%f%f\n",p[0],p[1],p[2]);
}
答案: 1:3*sizeof(double)
評析:
malloc(size)在內存的動態存儲區中分配一個長度為size的連續空間。此函數的值(即"返回值")是一個指針,它的值是該分配域的起始地址。如果此函數未能成功地執行,則返回值為0。
本題中要求分配三個double型動態內存單元,所以size處應當為3*sizeof(double)。
知識點:知識點/指針/各類型的指針及指針變數,通過指針引用各類型數據
4、以下程序運行後的輸出結果是______。
main()
{ int a,b,c;
a=25;
b=025;
c=0x25;
printf("%d %d %d\n",a,b,c);
}
答案: 25 21 37
評析:
本題考查的是格式字元的輸出。
變數a、b、c分別為十進制、八進制、十六進制的25,格式字元d所代表的含義是,以帶符號的十進制形式輸出整數(正數不輸出符號),所以本題a=25則輸出值為25;脊虧b=025轉換為10進制:b=2*8+5=16+5=21,則輸出的值為21;c=0x25轉換為10進制:c=2*16+5=32+5=37,則輸出的值為37,而且printf中三個%d之用的是空格,所以輸出的幾個數字之間也必須是空格。
知識點:知識點/函數/變數的存儲類別,變數的作用域和裂腔生存期
5、以下程序運行後的輸出結果是______。
main ()
{ char a[]="Language",b[]="Programe";
char *p1,*p2; int k;
p1=a; p2=b;
for(k=0;k<=7;k++)
if(*(p1+k)==*(p2+k)) printf("%c",*(p1+k));
}
答案: gae
評析:
本題考查的是字元指針變數與字元數組。
解題過程:
(1)當k=0時,*(p1+0)='L',*(p2+0)='P',L!=P,所以沒有輸出
(2)當k=1時,*(p1+1)='a',*(p2+1)='r',a!=r,所以沒有輸出
(3)當k=2時,*(p1+2)='n',*(p2+2)='o',n!=o,所以沒有輸出
(4)當k=3時,*(p1+3)='g',*(p2+3)='g',g==g,所以輸出g
(5)當k=4時,*(p1+4)='u',*(p2+4)='r',u!=r,所以沒有輸出
(6)當k=5時,*(p1+5)='a',*(p2+5)='a',a==a,所以輸出a
(7)當k=6時,*(p1+6)='g',*(p2+6)='m',g!=m,所以沒有輸出
(8)當k=7時,*(p1+7)='e',*(p2+7)='e',e==e,所以輸出e
(9)當k=8時結束循環
(10)輸出結果為:gae。
知識點:知識點/數組的定義和引用/字元串與字元數組
6、以下程序通過函數SunFun和f(x),x=0到10,這里f(x)=x^2+1,由F函數實現,請填空。
main()
{ printf("The sun=%d\n",SunFun(10));}
SunFun(int n)
{ int x,s=0;
for(x=0;x<=n;x++)s+F(______);
return s;
}
F(int x)
{ return (______);}
答案: 1:x
2:x*x+1
評析:
本題考查的是函數的調用。
解題過程:
(1)f(x)的含義為x的平方加上1
(2)所以F(int x)的返回值應該為 x*x+1
(3)SunFun(10)的作用是將0到10之間所有的整數相加求和
(4)所以F()的形式參數為x。
知識點:知識點/函數/函數的正確調用,嵌套調用,遞歸調用
7、以下程序中,函數SumColumMin的功能是:求出M行N列二維數組每列元素中的最小值,並計算它們的和值。和值通過形參傳回主函數輸出。請填空。
#define M2
#defineN4
void SumColumMin(int a[M][N],int *sum)
{ int i,j,k,s=0;
for(i=0;i<N;i++)
{ k=0;
for(j=1;j<M;j++)
if(a[k][i]>a[j][i])k=j;
s+=______ ;
}
______ =s;
}
main()
{ int x[M][N]={3,2,5,1,4,1,8,3},s;
SumColumMin(______);
printf("%d\n",s);
}
答案: 1:a[k][i]
2:*sum
3:x,&s
評析:
本題考查的是函數參數的傳送。
解題過程:
(1) 執行以i為變數的for語句
1)k=0
2)執行以j為變數的for語句
①當j=1
②比較a[0][0]和a[1][0]的大小,如果a[0][0]大於a[1][0]則k=1;如果a[0][0]大於a[1][0]則k=0
③j=2所以結束循環
3)此時a[k][i]就代表第一列中最小的值,要累計所有列中的最小值的和,應該在第一空內填寫 a[k][i],用變數s累加。
(2) SumColumMin是一個無返回值的函數,其中形式參數*sum是一個指針類型,所以第二空應該填寫 *sum,用來將該指針變數指向s
(3) 當主函數main調用SumColumMin時,需要兩個實際參數,一個代表被操作的數組,一個為指向累計和的指針變數,所以第三個空應該為 x,&s,分別代表已經被定義的數組x,和整型變數s的地址。
知識點:知識點/函數/函數的正確調用,嵌套調用,遞歸調用
8、以下程序的輸出結果是 。
main()
{
int a=0;
a+=(a=8);
printf("%d\n",a);
}
答案: 16
評析:
本題的考查點是表達式。
表達式a+=8相當於a=a+8,對表達式逐步求解過程如下:
a+=(a+8)此時,a的值賦值為8,而不再是0;
a+=8
a=a+8
a=16
故本題答案為16。
知識點:知識點/函數/形式參數與實在參數,參數值的傳遞
9、以下程序的輸出結果是______。
#define MAX(x,y)(x)>(y)?(x):(y)
main()
{
int a = 5, b = 2,c = 3, d = 3, t;
t = MAX(a + b, c + d)*10;
printf("%d\n", t);
}
答案: 7
評析:
本題的考查點是宏定義。
宏替換後,表達式t = MAX(a + b, c + d)*10即變為:t = (a+b)>(c+d) ? (a+b) : (c + d)*10;
由於(a+b)>(c+d)為真, 所以t = (a+b),即為7。
故本題答案為:7。
知識點:知識點/編譯預處理/宏定義:不帶參數的宏定義;帶參數的宏定義
10、函數mycmp(char *s,char *t)的功能是比較字元串s和t的大小,當s等於t時返回0,當s>t返回正值,當s<t時返回負值。請填空。
mycmp( char *s,char *t)
{ while (*s==*t)
{ if (*s=='\0')return 0;
++s;++t;
}
return(______);
}
答案: *s-*t
評析:
本題的考查點是比較字元串的大小。
函數的兩個形參是兩個字元指針變數,字元串的首地址是指針變數的值,*s和*t表示字元串數組s和t的第一個字元,在while循環中,是通過s和t值的不斷變化改變兩個串的第一個字元,要返回s和t的第一個不同字元的ASCII碼的差值,必須使用"*s-*t"得出。
故本題答案為:*s-*t。
知識點:知識點/函數/庫函數的正確調用
11、若給fun函數的形參s傳送字元串:" 6354abc",則函數的返回值是______。(字元串中包括空格)
long fun(char s[ ])
{ long n; int sign;
for (; isspace(*s);s++);
sign=(*s=='-')?-1:1;
if (*s=='+' || *s=='-') s++;
for (n=0;isdigit(*s);s++)
n=10*n+(*s-'0');
return sign*n;
}
答案: 6354
評析:
本題的考查點是函數的返回值。
這個函數的目的是提取出由函數的形參傳送來的字元串中的數字字元,並通過相應各個字元位置計算出它們數值形式的冪,最後返回字元串中的數字字元的數值形式,所以函數的返回值應當是"6354"。
故本題答案為:6354。
知識點:知識點/函數/函數的正確調用,嵌套調用,遞歸調用
12、以下程序段的輸出結果為______。
char *p;int i,d;
p="PDP1-0";
for(i=0;i<7;i++)
{
d=isdigit(*(p+i) );
if(d!=0)
printf("%c\n",*(p+i) );
}
答案: 1
評析:
本題的考查點是函數isdigit()。
這段程序的目的是按從左至右的順序從字元串p中找出阿拉伯數字字元,如果找到,將其列印出來。最後的輸出應當是:
1
0
知識點:知識點/函數/庫函數的正確調用
13、下列程序中字元串中各單詞之間有一個空格,則程序的輸出結果是______。
# include<string.h>
main( )
{ char str1[ ]="How do you do", *p1=str1;
strcpy(str1+strlen(str1)/2,"es she");
printf("%s\n",p1);
}
答案: How does she
評析:
本題的考查點是字元串拷貝函數strcpy()。
strlen(str1)是求str1字元串的長度,為13,然後,進行除2運算,結果為6。strcpy()函數是把字元串"es she"拷貝到str1後的第6個字元後面,也就是說,拷貝後的結果是"How does she"。
故本題答案為:How does she。
知識點:知識點/函數/庫函數的正確調用
14、下面的函數strcat(str1,str2)實現將字元串str2拼接到字元串str1後面的功能。請填空使之完整。
char *strcat(str1,str2)
char *str1,*str2;
{ char *t=str1;
while(______)str1++;
while(______);
return(t);}
答案: 1:*str1!='\0'
2:*str1++=*str2++
評析:
本題的考查點是字元串連接函數strcat()。
函數strcat(str1,str2)實現將字元串str2連接到字元串str1後面,所以首先要找到字元串str1的串尾,根據C語言的語法規定,一個串的串尾一定是一個隱含字元"\0",而在程序中,對字元串中字元的訪問是通過兩個指針變數來完成的,因此要找到字元串str1的串尾,要判斷*str1是否為"\0",要找到字元串str2的串尾,要判斷*str2是否為"\0",程序中必須可以使字元串中字元逐一順序體現,所以在題中我們應填寫"*str1"和"*str1++=*str2++ "。
知識點:知識點/函數/庫函數的正確調用
15、以下程序的輸出結果是______。
void fun()
{ static int a=0;
a +=2; printf("%d",a);
}
main()
{ int cc;
for(cc=1;cc<4;cc++) fun();
printf("\n");
}
答案: 246
評析:
循環for(cc=1;cc<4;cc++)被執行了3次。在函數fun中,由於a是static型變數,所以函數第1次調用後,a= 2;第2次調用後,a = 4;第3次調用後,a = 6。
知識點:知識點/函數/函數的正確調用,嵌套調用,遞歸調用
16、若要使指針p指向一個double類型的動態存儲單元,請填空。
p=______malloc(sizeof (double));
答案: (double*)
評析:
函數malloc返回的是void*而不是double類型指針。所以要使指針p指向一個double類型的存儲單元就必須進行強制類型轉換。
知識點:知識點/函數/函數的類型和返回值
17、下列程序段的輸出結果是______。
main()
{ char b[]="Hello,you";
b[5]=0;
printf("%s\n",b);
}
答案: Hello
評析:
字元串中,數值0或符號'\0'表示字元串的結束。本題中,b[5]被賦了0值,表明字元串b的第六個字元就是結束標志。因此,只輸出前五個字元,即Hello。
知識點:知識點/數組的定義和引用/一維數組和多維數組的定義、初始化和引用
18、下列程序的輸出結果是______。
void fun(int *n)
{ while((*n)--);
printf("%d",++(*n));
}
main()
{ int a=100;
fun(&a);
}
答案: 0
評析:
在函數fun()中,while((*n)--)是先引用*n的值,再做(*n)-- 運算,所以循環結束時*n的值為0,再做(*n)-- 運算後,*n的值為-1;執行++(*n)後,*n的值是0。
知識點:知識點/函數/函數的正確調用,嵌套調用,遞歸調用
19、以下程序中,主函數調用了LineMax函數,實現在N行M列的二維數組中,找出每一行上的最大值。請填空:
#define N 3
#define M 4
void LineMax(int x[N][M])
{ int i,j,p;
for(i=0;i<N;i++)
{ p=0;
for(j=1;j<M;j++)
if(x[i][p]<x[i][j])______;
printf("The max value in line %d is %d\n",i,______);
}
}
main()
{ int x[N][M]={1,.5,7,4,2,6,4,3,8,2, 3,1};
______;
}
答案: 1:p=j
2:a[i][p]
3:LineMax(x)
評析:
LineMax函數中運用了兩個循環,外循環來控制數組的行,內循環控制列,在尋找每行最大的元素時,先把每行的第一個元素列下標即0賦給p,然後把後面的數逐一與之比較,如果大於它,則把大的數的列下標重新賦給p。
所以(1)處應該填p=j;
內循環結束後,便獲得了本行中最大的數,即a[i][p],這也就是(2)處應該填寫的答案;
而(3)處,很顯然是要調用函數,關鍵就在於參數怎麼寫,函數中需要的是整個數組,所以應該把數組名做為實參,傳遞過去,(3)處的答案應該是LineMax(x)。注意大小寫,C語言中大小寫是不等價的。
知識點:知識點/函數/函數的正確調用,嵌套調用,遞歸調用
20、若有如下結構體說明:
struct STRU
{ int a,b;char c: double d;
struct STRU *p1,*p2;
};
請填空,以完成對t數組的定義,t數組的每個元素為該結構體類型。
______t[20]
答案: struct STRU
評析:
本題主要考查考生對C語言中結構體的掌握。
結構體類型是構造數據類型,是用戶自已定義的一種類型。
結構體類型的定義:
struct 結構體類型名
{
成員項表;
};
定義結構體變數的的形式為:
struct 結構體類型名變數1,變數2,...
其中變數包括:一般變數、指針變數、數組變數等。
知識點:知識點/數組的定義和引用/一維數組和多維數組的定義、初始化和引用
21、以下程序運行後的輸出結果是______。
void fun(int x,int y)
{x=x+y;y=x-y;x=x-y;
printf("%d,%d,",x,y);}
main()
{int x=2,y=3;
fun(x,y);
printf("%d,%d\n",x,y);
}
答案: 3,2,2,3
評析:
本題的考查點是交換變數的值。
被調函數fun()實現的功能是交換變數x和y的值並列印,由於該函數無返回值,所以在主函數中列印出的x和y的值仍然為2,3。
故本題答案為:3,2,2,3。
知識點:知識點/函數/形式參數與實在參數,參數值的傳遞
22、下面程序的運行結果是:______。
#define N 10
#define s(x) x*x
#define f(x) (x*x)
main()
{int i1,i2;
i1=1000/s(N);i2=1000/f(N);
printf("%d %d\n",i1,i2);
}
答案: 1000 10
評析:
本題的考查點是宏定義。
根據宏定義,變數i1的值為1000/10*10=1000,變數i2的值為1000/(10*10)=10。
故本題答案為:1000和10。
知識點:知識點/編譯預處理/宏定義:不帶參數的宏定義;帶參數的宏定義
23、下面程序的運行結果是:______。
void swap(int *a,int *b)
{int *t;
t=a;a=b;b=t;
}
main()
{int x=3,y=5,*p=&x,*q=&y;
swap(p,q);
printf("%d%d\n",*p,*q);
}
答案: 35
評析:
本題的考查點是函數調用。
觀察本題的程序可以看出,被調函數swap()實現的功能是交換變數的值,但由於函數不返回任何值,所以在main()函數中列印出的變數的值並沒有發生交換,即仍為3和5。
故本題答案為:3和5。
知識點:知識點/函數/函數的類型和返回值
24、fun函數的功能是:首先對a所指的N行N列的矩陣,找出各行中的最大的數,再求這N個最大值中的最小的那個數作為函數值返回。請填空。
#include <stdio.h>
#define N 100
int fun(int(*a)[N])
{int row,col,max,min;
for(row=0;row<N;row++)
{for(max=a[row][0],col=1;col<N;col++)
if(______) max=a[row][col];
if(row==0) min=max;
else if(______) min=max;
}
return min;
}
答案: 1:max<a[row][col]
2:max<min
評析:
本題的考查點是求矩陣最大值的演算法。
本題中的第一空要求判斷出每一行中的最大數,應該填寫條件max<a[row][col],第二空要求從N個最大值中找出最小的數,應填入條件max<min。
故本題答案為:max<a[row][col]和max<min。
知識點:知識點/函數/函數的正確調用,嵌套調用,遞歸調用
25、以下程序的輸出結果是______。
#define MCRA(m) 2*m
#define MCRB(n,m) 2*MCRA(n)+m
main()
{ int i=2,j=3;
printf("%d\n",MCRB(j,MCRA(i)));
}
答案: 16
評析:
本題的考查點是帶參數的宏定義。
帶參數的宏定義是這樣展開置換的:在程序中如果有帶實參的宏,則按#define 命令行中指定的字元串從左到右進行置換。如果串中包含形參,則將程序語句中相應的實參(可以是常量、變數或表達式)代替形參,如果宏定義中的字元串中的字元不是參數字元,則保留。因此對MCRB(j,MCRA(i))進行宏展開就得到了2*MCRA(j)+MCRA(i),即:2*2*j+2*i=2*2*3+2*2=16。
故本題答案為:16。
知識點:知識點/編譯預處理/宏定義:不帶參數的宏定義;帶參數的宏定義
26、以下程序的功能是調用函數fun計算:m=1-2+3-4+…+9-10,並輸出結果。請填空。
int fun ( int n)
{ int m=0,f=1,i;
for(i=1; i<=n; i++)
{ m+=i*f;
f=______;
}
return m;
}
main()
{ printf("m=%d\n",______);}
答案: 1:-f
2:fun(10)
評析:
本題的考查點是C程序設計。根據程序寫出運行結果。
考察的知識點主要是函數的調用。本題利用一個fun函數來完成題目要求的計算。程序中f起的作用是控制i*f的符號,看的出,偶數位都為負值,所以f的值為(-1)^(i+1),最後要求輸出m的值,在輸出中調用fun函數,並把實參10傳給n。
知識點:知識點/函數/函數的正確調用,嵌套調用,遞歸調用
27、以下程序運行後的輸出結果是______。
main()
{ int i,n[]={0,0,0,0,0};
for(i=1;i<=4;i++)
{ n[i]=n[i-1]*2+1;
printf("%d ",n[i]);
}
}
答案: 1 3 7 15
評析:
本題的考查點是C程序設計。根據程序寫出運行結果。
該程序考察的是數組的知識點,n是一個有5個元素,且元素值全為0的數組。程序運行過程時先進行for循環,i=1時,n[1]=n[0]*2+1,此時n[1]=1;執行i++;i=2時,再進行循環,n[2]=n[1]*2+1,此時n[2]=3,再執行i++,此時i=3,繼續循環,n[3]=n[2]*2+1,此時n[3]=7,然後i=4時,n[4]=n[3]*2+1,此時n[4]=15。循環結束。注意輸出函數中%d後有空格。
知識點:知識點/數組的定義和引用/一維數組和多維數組的定義、初始化和引用
28、請在以下程序第一行的下劃線處填寫適當內容,使程序能正常運行。
______( double,double);
main()
{ double x,y;
scanf("%1f%1f",&x,&y);
printf(%1f\n",max(x,y));
}
double max(double a,double b)
{ return(a>b ? a:b);}
答案: double max
評析:
本題的考查點是C程序設計。調試程序,把不完善的程序進行修改和補充,使之能得到正確的結果。
主函數里可以看到調用了一個max函數,函數在被調用之前需要先定義,所以要求填空的內容應該是對函數進行定義的語句。由題目內容也可以看出此函數是double型的。
知識點:知識點/函數/函數的正確調用,嵌套調用,遞歸調用
29、有以下程序
void f(int y,int *x)
{ y=y+*x; *x=*x+y;}
main()
{ int x=2,y=4;
f(y,&x);
printf("%d %d\n",x,y);
}
執行後輸出的結果______。
答案: 8 4
評析:
f函數中變數x傳遞的是變數的地址,可以實現值的變換,而變數y是傳遞的值,執行完f後,y的值是變了,但main函數中的y並未變化。也就是說由於"單向傳送"的"值傳遞"方式,形參值的改變無法傳給實參。
知識點:知識點/函數/形式參數與實在參數,參數值的傳遞
31、C語言程序的基本單位是______
答案:函數
32、設有說明語句:char a= '\72';則變數a包含______個字元、
答案:1
33、c語言是一種______(選擇面向對象或面向過程)高級程序設計語言。
答案:面向過程
34、C語言中唯一的三目運算符是______
答案:條件運算符#? :
35、C語言中結束一次循環的語句是______
答案:continue
36、C語言中結束整個循環的語句是______
答案:break
37、二維數組a中元素a[2][2]的值是______ a[4][5]={{1,2,3},{3,2,1,6},{1}};
答案:0
38、寫出下面個邏輯表達式的值,設a=3,b=4,則c=5 a || b+c && b-c=______
答案:1
39、寫出下面個邏輯表達式的值,設a=3,b=4,則! (a+b)+c –1 && b+ c/2 =______
答案:1
40、在C語言中打開文件的函數名稱是______
答案:fopen#fopen()
41、在C語言中關閉文件的函數名稱是______
答案:fclose#fclose()
42、C語言中基本的數據類型有______
答案:int float char # 整型 實型 字元型
43、設y是int型變數,請寫出判斷y為奇數的關系表達______
答案:y%2!=0 # y%2==1 # y%2
44、以下程序運行後的輸出結果是______
main()
{ int i=10,j=0;
do
{ j=j+i; i-;
while(i>2);
printf("%d\n",j);
}
答案:52
45、設有以下程序:
main()
{ int n1,n2;
scanf("%d",&n2);
while(n2!=0)
{ n1=n2%10;
n2=n2/10;
printf("%d",n1);
}
}
程序運行後,如果從鍵盤上輸入1298;則輸出結果為______
答案:8921
46、以下程序輸出的最後一個值是______
int ff(int n)
{ static int f=1;
f=f*n;
return f;
}
main()
{ int i;
for(i=1;i<=5;i++) printf("%d\n",ff(i));
}
答案:120
47、設有以下程序:
main()
{ int a, b, k=4, m=6, *p1=&k, *p2=&m;
a=pl==&m;
b=(*p1)/(*p2)+7;
printf("a=%d\n",a);
printf("b=%d\n",b);
}
執行該程序後,a的值為______b的值為______
答案:0 @ 7
48、 函數fun的功能是:累加數組元素中的值。n為數組中元素的個數。累加的和值放入x所指的存儲單元中。
fun(int b[], int n ,int *y)
{for(k=0;______;k++) r=r+b[k];
*y=______;
}
答案:k<n @ r
51、以下程序運行後的輸出結果是______
main()
{ char m;
m='B'+32; printf("%c",m);
}
答案:b
52、以下程序運行後的輸出結果是______
main()
{ int a=1,b=3,c=5;
if (c=a+b) printf("yes\n");
else printf("no\n");
}
答案:yes