比賽的編程環(huán)境是VC++6.0,但不可使用C++語句。
2011 模擬 c語言 高職
注意:
本套模擬題主要模擬命題形式與考核范圍。真實(shí)競賽題的數(shù)量、難度可能與此套模擬題有差異。
說明:
本試卷包含兩種題型:“代碼填空”與“程序設(shè)計(jì)”。
填空題要求參賽選手在弄清給定代碼工作原理的基礎(chǔ)上填寫缺失的部分,使得程序邏輯正確、完整。所填寫的代碼不多于一條語句(即不能出現(xiàn)分號)。
編程題要求選手設(shè)計(jì)的程序?qū)τ诮o定的輸入能給出正確的輸出結(jié)果。注意:在評卷時使用的輸入數(shù)據(jù)與試卷中給出的實(shí)例數(shù)據(jù)可能是不同的。選手的程序必須是通用的,不能只對試卷中給定的數(shù)據(jù)有效。
1.代碼填空(滿2分)
形如:“abccba”,“abcba”的串稱為回文串,下列代碼判斷一個串是否為回文串。請補(bǔ)充空白的部分。
char buf[] = "abcde11edcba";
int x = 1;
for(int i=0; i
if(___________________)
{
x = 0;
break;
}
printf("%sn", x ? "是":"否");
2.代碼填空(滿分3分)
下列代碼把一個二進(jìn)制的串轉(zhuǎn)換為整數(shù)。請?zhí)顚懭鄙俚恼Z句;
char* p = "1010110001100";
int n = 0;
for(int i=0;i
{
n = __________________;
}
printf("%dn", n);
3.代碼填空(滿分3分)
假設(shè)a,b,c是3個互不相等的整數(shù)。下列代碼取出它們中居中的數(shù)值,記錄在m中。其中的swap()函數(shù)可以交換兩個變量的值。請完善代碼。
if(a>b)swap(&a, &b);
if(b>c)swap(&b, &c);
______________________;
int m =b;
4.代碼填空(滿分6分)
下面函數(shù)的目的是求出某個日期是該年度的第幾天。試完善之。
如果傳入:year=1980,month=1, day=1
則返回 1
如果傳入:year=1980,month=2, day=1
則返回 32
int getDayOfYear(int year, int month,int day)
{
int days _____________________;
int flag =(year%4==0 && year0!=0) || year@0 == 0 ? 1 :0;
int sum = day ;
for(int i=0;i
sum += days[flag][i];
}
returnsum;
}
5.代碼填空(滿分7分)
計(jì)算3個A,2個B可以組成多少種排列的問題(如:AAABB,AABBA)是《組合數(shù)學(xué)》的研究領(lǐng)域。但有些情況下,也可以利用計(jì)算機(jī)計(jì)算速度快的特點(diǎn)通過巧妙的推理來解決問題。下列的程序計(jì)算了m個A,n個B可以組合成多少個不同排列的問題。請完善它。
int f(int m, int n)
{
if(m==0 ||n==0) return 1;
returnf(m--,n)*(m+n)/m;
}
6.代碼填空(滿分10分)
(a+b)的n次冪的展開式中各項(xiàng)的系數(shù)很有規(guī)律,對于n=2,3,4時分別是:12 1, 1 3 3 1,1 4 6 4 1。這些系數(shù)構(gòu)成了著名的楊輝三角形:
1
1 1
1 2 1
133 1
1 464 1
1 5 10105 1
下列的程序給出了計(jì)算第m層的第n個系數(shù)的計(jì)算方法,試完善之(m,n都從0算起)。
int f(int m,int n)
{
if(m==0) return 1;
if(n==0 || n==m) return 1;
return f(n--)*(m-n)/n;
}
7.程序設(shè)計(jì)(滿分15分)
從鍵盤輸入一個整數(shù)(1~20)
則以該數(shù)字為矩陣的大小,把1,2,3…n*n的數(shù)字按照順時針螺旋的形式填入其中。例如:
輸入數(shù)字2,則程序輸出:
1 2
4 3
輸入數(shù)字3,則程序輸出:
1 2 3
8 9 4
7 6 5
輸入數(shù)字4, 則程序輸出:
123 4
1213 14 5
1116 15 6
109 8 7
8.程序設(shè)計(jì)(滿分9分)
從鍵盤輸入一個日期,格式為yyyy-M-d
要求計(jì)算該日期與1949年10月1日距離多少天
例如:
用戶輸入了:1949-10-2
程序輸出:1
用戶輸入了:1949-11-1
程序輸出:31
9.程序設(shè)計(jì)(滿分 12 分)
當(dāng)你輸入信用卡號碼的時候,有沒有擔(dān)心輸錯了而造成損失呢?其實(shí)可以不必這么擔(dān)心,因?yàn)椴⒉皇且粋€隨便的信用卡號碼都是合法的,它必須通過Luhn算法來驗(yàn)證通過。
該校驗(yàn)的過程:
1、從卡號最后一位數(shù)字開始,逆向?qū)⑵鏀?shù)位(1、3、5等等)相加。
2、從卡號最后一位數(shù)字開始,逆向?qū)⑴紨?shù)位數(shù)字,先乘以2(如果乘積為兩位數(shù),則將其減去9),再求和。
3、將奇數(shù)位總和加上偶數(shù)位總和,結(jié)果應(yīng)該可以被10整除。
例如,卡號是:5432123456788881
則奇數(shù)、偶數(shù)位(用紅色標(biāo)出)分布:5432123456788881
奇數(shù)位和=35
偶數(shù)位乘以2(有些要減去9)的結(jié)果:1 6 2 6 1 5 77,求和=35。
最后35+35=70 可以被10整除,認(rèn)定校驗(yàn)通過。
請編寫一個程序,從鍵盤輸入卡號,然后判斷是否校驗(yàn)通過。通過顯示:“成功”,否則顯示“失敗”。
比如,用戶輸入:356827027232780
程序輸出:成功
10. 程序設(shè)計(jì)(滿分 20 分)
任意一個5位數(shù),比如:34256,把它的各位數(shù)字打亂,重新排列,可以得到一個最大的數(shù):65432,一個最小的數(shù)23456。求這兩個數(shù)字的差,得:41976,把這個數(shù)字再次重復(fù)上述過程(如果不足5位,則前邊補(bǔ)0)。如此往復(fù),數(shù)字會落入某個循環(huán)圈(稱為數(shù)字黑洞)。
比如,剛才的數(shù)字會落入:[82962, 75933, 63954,61974] 這個循環(huán)圈。
請編寫程序,找到5位數(shù)所有可能的循環(huán)圈,并輸出,每個循環(huán)圈占1行。其中5位數(shù)全都相同則循環(huán)圈為[0],這個可以不考慮。循環(huán)圈的輸出格式仿照:
[82962, 75933, 63954, 61974]
其中數(shù)字的先后順序可以不考慮。
2011 模擬 c語言 本科
注意:
本套模擬題主要模擬命題形式與考核范圍。真實(shí)競賽題的數(shù)量、難度可能與此套模擬題有差異。
說明:
本試卷包含兩種題型:“代碼填空”與“程序設(shè)計(jì)”。
填空題要求參賽選手在弄清給定代碼工作原理的基礎(chǔ)上填寫缺失的部分,使得程序邏輯正確、完整。所填寫的代碼不多于一條語句(即不能出現(xiàn)分號)。
編程題要求選手設(shè)計(jì)的程序?qū)τ诮o定的輸入能給出正確的輸出結(jié)果。注意:在評卷時使用的輸入數(shù)據(jù)與試卷中給出的實(shí)例數(shù)據(jù)可能是不同的。選手的程序必須是通用的,不能只對試卷中給定的數(shù)據(jù)有效。
1.代碼填空(滿分2分)
下列代碼,把一個2位整數(shù)交換十位與個位的位置。請?zhí)顚懭笔У拇a。
例如:當(dāng)x=95時,返回59。
int switch_num(int x)
{
int a = x /10;
int b = x %10;
return__________________;
}
2.代碼填空(滿分3分)
下列代碼把一個二進(jìn)制的串轉(zhuǎn)換為整數(shù)。請?zhí)顚懭鄙俚恼Z句;
char* p = "1010110001100";
int n = 0;
for(int i=0;i
{
n = __________________;
}
printf("%dn", n);
3.代碼填空(滿分3分)
假設(shè)a,b,c是3個互不相等的整數(shù)。下列代碼取出它們中居中的數(shù)值,記錄在m中。其中的swap()函數(shù)可以交換兩個變量的值。請完善代碼。
if(a>b)swap(&a, &b);
if(b>c)swap(&b, &c);
______________________;
int m =b;
4.代碼填空(滿分5分)
計(jì)算3個A,2個B可以組成多少種排列的問題(如:AAABB,AABBA)是《組合數(shù)學(xué)》的研究領(lǐng)域。但有些情況下,也可以利用計(jì)算機(jī)計(jì)算速度快的特點(diǎn)通過巧妙的推理來解決問題。下列的程序計(jì)算了m個A,n個B可以組合成多少個不同排列的問題。請完善它。
int f(int m, int n)
{
if(m==0 ||n==0) return 1;
return_______________________;
}
5.代碼填空(滿分6分)
此段代碼的意圖是把一個緩沖區(qū)中的整數(shù)重新排列,使得所有負(fù)數(shù)都在正數(shù)的左邊。請分析其工作流程,補(bǔ)充缺失的代碼。
void reorder(int *pData, int len)
{
if(pData == NULL || len == 0) return;
int *pBegin = pData;
int *pEnd = __________;
while(pBegin < pEnd)
{
if(*pBegin<0)
{
pBegin ++;
__________;
}
if(*pEnd>=0)
{
pEnd --;
___________;
}
int temp = *pBegin;
*pBegin = *pEnd;
*pEnd = temp;
}
}
int main(int argc, char **argv)
{
int a[] ={1,2,3,-5,-4,5,9,-8,-1};
reorder(a,9);
for(int i=0;i<9; i++) printf("%d ", a[i]);
printf("n");
return0;
}
6.代碼填空(滿分9分)
給定一個字符串,其含有的字符各不相同。程序輸出該字符串的所有排列(全排列)情形。例如:給定字符串“xyz”,則程序輸出:
xyz
xzy
yxz
yzx
zyx
zxy
試完善程序中空缺的部分。
void f(char *str, int len, int n)
{
inti;
chartmp;
char *p =(char *)malloc(__________);
if(n==len-1){
printf("%sn",str);
}else{
for(i=n;i
strcpy(p,str);
tmp = *(str+n);
*(str+n) = *(str+i);
*(str+i) = tmp;
_______________;
strcpy(str,p);
}

}
free(p);
}
int main(int argc, char **argv)
{
char str[] ="xyz";
f(str,3,0);
printf("n");
return0;
}
7.代碼設(shè)計(jì)(滿分5分)
(數(shù)據(jù)類型應(yīng)為long)625這個數(shù)字很特別,625的平方等于390625,剛好其末3位是625本身。除了625,還有其它的3位數(shù)有這個特征嗎?
請編寫程序,尋找所有這樣的3位數(shù):它的平方的末3位是這個數(shù)字本身。
輸出結(jié)果中,從小到大,每個找到的數(shù)字占一行。比如那個625就輸出為:
625
8.代碼設(shè)計(jì)(滿分11分)
(樹)某游戲規(guī)則中,甲乙雙方每個回合的戰(zhàn)斗總是有一方勝利,一方失敗。游戲規(guī)定:失敗的一方要把自己的體力值的1/4加給勝利的一方。例如:如果雙方體力值當(dāng)前都是4,則經(jīng)過一輪戰(zhàn)斗后,雙方的體力值會變?yōu)椋?,3。
現(xiàn)在已知:雙方開始時的體力值甲:1000,乙:2000。
假設(shè)戰(zhàn)斗中,甲乙獲勝的概率都是50%
求解:雙方經(jīng)過4個回合的戰(zhàn)斗,體力值之差小于1000的理論概率。
9.代碼設(shè)計(jì)(滿分18分)
整數(shù)的分劃問題。
如,對于正整數(shù)n=6,可以分劃為:
6
5+1
4+2, 4+1+1
3+3, 3+2+1, 3+1+1+1
2+2+2, 2+2+1+1, 2+1+1+1+1
1+1+1+1+1+1+1
現(xiàn)在的問題是,對于給定的正整數(shù)n,編寫算法打印所有劃分。
用戶從鍵盤輸入 n (范圍1~10)
程序輸出該整數(shù)的所有劃分。
10. 代碼設(shè)計(jì)(滿分20分)
一個N位的十進(jìn)制正整數(shù),如果它的每個位上的數(shù)字的N次方的和等于這個數(shù)本身,則稱其為花朵數(shù)。
例如:
當(dāng)N=3時,153就滿足條件,因?yàn)?1^3 + 5^3 + 3^3 =153,這樣的數(shù)字也被稱為水仙花數(shù)(其中,“^”表示乘方,5^3表示5的3次方,也就是立方)。
當(dāng)N=4時,1634滿足條件,因?yàn)?1^4 + 6^4 + 3^4 + 4^4= 1634。
當(dāng)N=5時,92727滿足條件。
實(shí)際上,對N的每個取值,可能有多個數(shù)字滿足條件。
程序的任務(wù)是:求N=21時,所有滿足條件的花朵數(shù)。注意:這個整數(shù)有21位,它的各個位數(shù)字的21次方之和正好等于這個數(shù)本身。
如果滿足條件的數(shù)字不只有一個,請從小到大輸出所有符合條件的數(shù)字,每個數(shù)字占一行。因?yàn)檫@個數(shù)字很大,請注意解法時間上的可行性。要求程序在3分鐘內(nèi)運(yùn)行完畢。
愛華網(wǎng)



