第一篇:[新]C語言期末復(fù)習(xí),經(jīng)典練習(xí)題+知識點總結(jié)+模擬考題。三位一體,完勝c語言!!!!{考期必備神器}
C語言期末復(fù)習(xí)(平時練習(xí)答案)
[特別適用于千千萬北航學(xué)子] 考試重點:(編程題)排序,選擇與冒泡排序,各種進制轉(zhuǎn)換。。]
第二次大作業(yè)— 前驅(qū)、后繼字符
1.【問題描述】 從鍵盤輸入一個字符,求出它的前驅(qū)和后繼字符(按照ASCII碼值排序),并按照從小到大的順序輸出這三個字符和對應(yīng)的ASCII值。【輸入形式】 從鍵盤輸入一個字符 【輸出形式】 按兩行輸出: 第一行按照從小到大的順序輸出這三個字符,并以一個空格隔開; 第二行按照從小到大的順序輸出三個字符對應(yīng)的ASCII值,并以一個空格隔開?!据斎霕永?b 【輸出樣例】 a b c 97 98 99 【樣例說明】 輸入字符b,b的前驅(qū)字符是a,后繼字符是c,第一行按照從小到大的順序輸出a b c;第二行輸出對應(yīng)的ASCII值97 98 99 【評分標(biāo)準(zhǔn)】結(jié)果完全正確得20分,每個測試點4分。提交程序名為:c0103.c。
//*從鍵盤輸入一個字符,求出它的前驅(qū)和后繼字符(按照ASCII碼值排序),并按照從小到大的順序輸出這三個字符和對應(yīng)的ASCII值。*// #include
printf(“Input a number:”);scanf(“%c”,&c);
//*從鍵盤輸入一個字符*// printf(“ %c %c %cn”,c-1,c,c+1);//*第一行按照從小到大的順序輸出這三個字符,并以一個空格隔開*// printf(“ %d %d %d”, c-1,c,c+1);//*第二行按照從小到大的順序輸出三個字符對應(yīng)的ASCII值,并以一個空格隔開。*// return 0;}
當(dāng)前編程題:第二次大作業(yè)---數(shù)值變換
2.【問題描述】編寫一程序,從鍵盤輸入輸入一個三位正整數(shù),然后反向輸出對應(yīng)的數(shù),如果輸入的數(shù)不是三位正整數(shù),則輸出-1。【輸入形式】從鍵盤輸入三位的正整數(shù)。【輸出形式】輸出交換后的正整數(shù)值。【輸入樣例】 356 【輸出樣例】 653 【樣例說明】從鍵盤輸入的正整數(shù)值為356,將該數(shù)的個位與百位互換,所得結(jié)果為653.如果輸入的正整數(shù)為300,則輸出為3?!驹u分標(biāo)準(zhǔn)】結(jié)果完全正確得20分,每個測試點4分。提交程序名為:c0102.c。
//*編寫一程序,從鍵盤輸入輸入一個三位正整數(shù),然后反向輸出對應(yīng)的數(shù),如果輸入的數(shù)不是三位正整數(shù),則輸出-1。*// #include
int a,d,e,f,sum;//*定義變量*// printf(“請輸入一個三位正整數(shù),n”);scanf(“%d”,&a);
//* 輸入一個數(shù)*//
if(a>0)//*對輸入的值的正負做判斷*// {
d=a/100;
e=(a-d*100)/10;
f=a%10;
sum=100*f+10*e+d;
printf(“%dn”,sum);
//*輸出交換后的正整數(shù)值。*//
} 當(dāng)前編程題:第二次大作業(yè)---正整數(shù)的打印
else 4.【問題描述】給出一個不多于5位的正
printf(“-1n”);
整數(shù),要求:
1.求出它是幾位數(shù)。
//*如果輸入的數(shù)不是三位正整數(shù),則輸出2.分別打印出每一位數(shù)字。
3.按照逆序-1*// 打印出每一位數(shù)字?!据斎胄问健靠刂婆_輸}
入該正整數(shù)。【輸出形式】控制臺分行輸出 輸出結(jié)果。【樣例輸入】1234 【樣例輸出】 當(dāng)前編程題:第二次大作業(yè)---計算平均值
1234 4321 【樣例說明】1234位數(shù)為4,3.【問題描述】從鍵盤輸入三個整數(shù),分別存入x,y,z三個整型變量中,計算并輸出三個數(shù)的和以及平均值。【輸入形式】從鍵盤輸入三個整數(shù),整數(shù)之間以空格隔開?!据敵鲂问健吭谄聊簧戏謨尚酗@示結(jié)果:第一行為三個數(shù)的和,整數(shù)形式輸出;第二行為三個數(shù)的平均值,浮點數(shù)形式輸出,小數(shù)點后保留兩位小數(shù)?!据斎霕永?3 2 3 【輸出樣例】 8 2.67 【樣例說明】 3、2、3的和為8,所以第一行輸出8;第二行輸出3、2、3的平均值2.67(保留兩位小數(shù))?!驹u分標(biāo)準(zhǔn)】結(jié)果完全正確得20分,每個測試點4分。提交程序名為:c0101.c。
//*從鍵盤輸入三個整數(shù),分別存入x,y,z三個整型變量中,計算并輸出三個數(shù)的和以及平均值*// #include
int x,y,z,sum;//*定義變量*// float average;scanf(“%d%d%d”,&x,&y,&z);
//*從鍵盤輸入三個整數(shù),整數(shù)之間以空格隔開*// sum=x+y+z;
average =(float)sum/3;//*第一行為三個數(shù)的和,整數(shù)形式輸出;*// printf(“%dn”,sum);
printf(“%.2fn”,average);
//* 第二行為三個數(shù)的平均值,浮點數(shù)形式輸出,小數(shù)點后保留兩位小數(shù)*// return 0;}
/ 30
分別為1,2,3,4,逆序為4321 【評分標(biāo)準(zhǔn)】該題共有三個輸出整數(shù),完全正確得10分,每答錯一個扣掉4分,直至得分為0。本題要求上傳程序的源文件。所采用語言可以是C(.c)。主文件名設(shè)定為intprint.c
//*給出一個不多于5位的正整數(shù),要求:
1.求出它是幾位數(shù)。
2.分別打印出每一位數(shù)字。
3.按照逆序打印出每一位數(shù)字。
*// #include
long int a;int n,b,c,d,e,f;printf(“n請輸入一個整數(shù)(0~99999):”);scanf(“%d”,&a);if(a>9999)
n=5;
else
if(a>999)
n=4;
else
if(a>99)
n=3;
else
if(a>9)
n=2;
else
n=1;
printf(“n這個數(shù)的位數(shù)
=%dn”,n);
f=a/10000;
e=a%10000/1000;
d=a%10000%1000/100;
c=a%10000%1000%100/10;
b=a%10000%1000%100%10;
switch(n)
{
case 5:
printf(“%d%d%d%d%dn”,f,e,d,c,b);
printf(“%d%d%d%d%dn”,b,c,d,e,f);break;
case 4:
printf(“%d%d%d%dn”,e,d,c,b);
printf(“%d%d%d%dn”,b,c,d,e);break;
case 3:
printf(“%d%d%dn”,d,c,b);
printf(“%d%d%dn”,b,c,d);break;
case 2:
printf(“%d%dn”,c,b);
printf(“%d%dn”,b,c);
case 1:
printf(“%dn”,b);
printf(“%dn”,b);
} }
當(dāng)前編程題:第二次大作業(yè)---簡易計算器5.【問題描述】編程實現(xiàn)簡易的計算器:讀入兩個整數(shù)運算數(shù)(data1和data2)及一個運算符(op),計算表達式data1 op data2的值,其中op可以是+,-,*,/。【輸入形式】控制臺輸入運算數(shù)和運算符: 1.首先輸入以空格分隔的兩個整數(shù),分別是data1和data2;2.3 / 30
輸入一個字符作為運算符op,op可以是’+’,’-’,’*’,’/’。輸入時,data1、data2、op之間各留有一個空格。具體格式見樣例輸入?!据敵鲂问健靠刂婆_輸出運算結(jié)果。作除法運算時,若能夠整除,則輸出為整數(shù),否則輸出結(jié)果小數(shù)點后應(yīng)保留兩位有效數(shù)字?!緲永斎搿? * 【樣例輸出】
【樣例說明】輸入中先后輸入第一個運算數(shù)23,第二個運算數(shù)5,運算符’*’,要求對23和5進行乘法運算。計算結(jié)果為115?!驹u分標(biāo)準(zhǔn)】該題共20分,每個測試點4分。本題要求上傳程序的源文件。所采用語言可以是C(.c).即所上傳的文件名為calculator.c
//*編程實現(xiàn)簡易的計算器:讀入兩個整數(shù)運算數(shù)(data1和data2)及一個運算符(op),計算表達式data1 op data2的值,其中op可以是+,-,*,/。*// #include
int data1,data2,c;//定義變量// double d;char op;scanf(“%d%d %c”,&data1,&data2,&op);//輸入運算數(shù)和運算符// if(op=='+')
//進行判斷// {
c=data1+data2;
printf(“%d”,c);}
else
if(op=='-')
{
c=data1-data2;
printf(“%d”,c);
} else
if(op=='*')
{
c=data1*data2;
printf(“%d”,c);
}
else if(op=='/'){
d=(double)data1/data2;printf(“%.2f”,d);} return 0;}
找最大最小整數(shù)
1.【問題描述】編寫一個程序,用戶輸入若干整數(shù),試找出其中的最大數(shù)和最小數(shù)?!据斎胄问健坑脩粼诘谝恍写斎霐?shù)據(jù)個數(shù),在第二行輸入數(shù)據(jù)。
【輸出形式】程序在下一行輸出數(shù)據(jù)的最大值和最小值 【樣例輸入】 89 62 96 74 52
【樣例輸出】96 52 【樣例說明】用戶第一次輸入的為數(shù)據(jù)個數(shù),在下一行依次輸入數(shù)據(jù)。輸出為5個數(shù)中的最大值和最小值,輸出時候兩個數(shù)之間用空格分隔。
【評分標(biāo)準(zhǔn)】結(jié)果完全正確得20分,每個測試點4分。提交程序名為:getmaxandmin.c 矩形相交 2.【問題描述】 / 30
平面上有兩個矩形A和B,其位置是任意的。
編程求出其相交部分(如圖中陰影部分)的面積。(0≤a,b≤1000)
【輸
入形式】
從標(biāo)準(zhǔn)輸入讀取兩行以空格分隔的整數(shù),格式如下: Ax1 Ay1 Ax2 Ay2 Bx1 By1 Bx2 By2
其中(x1,y1)和(x2,y2)為矩形對角線上端點的坐標(biāo)。各坐標(biāo)值均為整數(shù),取值在0至1000之間。
【輸出形式】
向標(biāo)準(zhǔn)輸出打印一個整數(shù),是兩矩形相交部分的面積(可能為0)。在輸出末尾要有一個回車符?!据斎霕永?0 0 2 2 1 1 3 4
【輸出樣例】 1
【評分標(biāo)準(zhǔn)】
結(jié)果完全正確得20分,每個測試點4分,提交程序文件名為area.c。[紅色為采用答案
#include
struct point { int x;int y;}A1,A2,B1,B2;
struct rect { struct point p1;struct point p2;}R1,R2;
struct point makepoint(int x,int y);struct rect makerect(struct point p1,struct point p2);struct rect guifanrect(struct rect R);
#define max(A,B)((A)>(B)?(A):(B))#define min(A,B)((A)>(B)?(B):(A))main(){ 5 / 30
int i,num1[4],num2[4],area;
for(i=0;i<4;i++)
scanf(“%d”,&num1[i]);for(i=0;i<4;i++)
scanf(“%d”,&num2[i]);
R1 = makerect(A1 =
makepoint(num1[0],num1[1]),A2 = makepoint(num1[2],num1[3]));
R2 = makerect(B1 =
makepoint(num2[0],num2[1]),B2 = makepoint(num2[2],num2[3]));
R1 = guifanrect(R1);R2 = guifanrect(R2);
if(R1.p2.x <= R2.p1.x || R1.p2.y <= R2.p1.y ||
R1.p1.x >= R2.p2.x || R1.p1.y >= R2.p2.y)
area = 0;else
area = abs(max(R1.p1.x, R2.p1.x)min(R1.p2.y, R2.p2.y));
printf(“%dn”,area);}
struct point makepoint(int x,int y){ struct point temp;temp.x = x;temp.y = y;return temp;} struct rect makerect(struct point p1,struct point p2){ struct rect temp;temp.p1 = p1;temp.p2 = p2;return temp;}
struct rect guifanrect(struct rect r){ struct rect temp;temp.p1.x = min(r.p1.x, r.p2.x);temp.p1.y = min(r.p1.y, r.p2.y);temp.p2.x = max(r.p1.x, r.p2.x);temp.p2.y = max(r.p1.y, r.p2.y);return temp;} 6 / 30
3.【問題描述】編寫一個程序,當(dāng)在一個字符串中出現(xiàn)子串時就刪除它。
【輸入形式】用戶在第一行輸入一個字符串,用戶在第二行輸入一個子串。
【輸出形式】程序在下一行輸出刪除其中所有子串后的字符串。如果字符串不包含子串則輸出原字符串本身。【樣例輸入】
I am a boy!a
【樣例輸出】
I m boy!
【樣例說明】用戶首先輸入字符串I am a boy!,然后輸出子串a(chǎn),程序會尋找字符串中的子串刪除它,最后將刪除后的結(jié)果輸出:I#m##boy!
#表示空格。
【評分標(biāo)準(zhǔn)】結(jié)果完全正確得20分,每個測試點4分。提交程序名為:delsubstring.c。#include
int main(void){
char *pdest;
int result;
fgets(source_str, 1024, stdin);
fgets(del_str, 1024, stdin);
source_str[strlen(source_str)-1] = '