A. 計算機程序設計師要學什麼
計算機程序設計是一門計算機基礎課。主要學習了以下四部分:
1、計算機程序設計的背景介紹。計算機程序設計這門課,最開始會介紹這門課程的相關背景,了解其發展歷史。介紹一些計算機程序設計的思想。畢竟人的思想和計算機還是有所不同的。因此,了解其背景很重要。
2、程序設計的演算法。計算機程序設計的演算法,演算法代表著用系統的方法描述解決問題的策略機制。我們解決問題需要有思路,演算法能幫助我們解決問題。
3、編程語言的相關知識。一般計算機程序設計,學習的編程語言是C語言。C語言主要有這些內容:「運算符、優先順序與結合性、自增自減的運用、演算法的基本控制結構、函數、指針、結構體」。其中,指針是C語言的難點,必須好好學習,才能靈活運用C語言。
4、如何運用編程語言解決問題。編程語言只是工具,我們要學會運用編程語言解決問題。合理掌握編程語言,具體問題具體分析,這樣這門課才算是學懂了。所以在學會編程語言之後,會學一些方法,來根據所學編程語言解決問題。
B. C語言求二部圖完備匹配
二部圖是一種十分重要的數據結構。在對二部圖及匹配的概念進行了闡述後,給出了求二部圖所有極大匹配的演算法,該演算法也可用於求二部圖的所有最大匹配和完全匹配。用C語言程序驗證了此演算法的有效性。
機構:
德州學院計算機系 山東德州253023;
領域:
計算機軟體及計算機應用;
關鍵詞:
二部圖; 匹配; 極大匹配; 最大匹配; 完全匹配; 演算法;
C. 學C語言的NOIP問題
一.選擇一個正確答案代碼(A/B/C/D/E),填入每題的括弧內 (每題1.5分, 共30分)
1. 美籍匈牙利數學家馮·諾依曼對計算機科學發展所做出的貢獻是( )。
A. 提出理想計算機的數學模型,成為計算機科學的理論基礎。
B. 是世界上第一個編寫計算機程序的人。
C. 提出存儲程序工作原理,並設計出第一台具有存儲程序功能的計算機EDVAC。
D. 採用集成電路作為計算機的主要功能部件。
E. 指出計算機性能將以每兩年翻一番的速度向前發展。
2. 下列哪個不是CPU(中央處理單元)( )。
A. Intel Itanium B. DDR SDRAM C. AMD Athlon64
D. AMD Opteron E. IBM Power 5
3. 下列網路上常用的名字縮寫對應的中文解釋錯誤的是( )。
A. WWW(World Wide Web):萬維網。
B. URL(Uniform Resource Locator):統一資源定位器。
C. HTTP(Hypertext Transfer Protocol):超文本傳輸協議。
D. FTP(File Transfer Protocol):快速傳輸協議。
E. TCP(Transfer Control Protocol):傳輸控制協議。
4. 下面哪個部件對於個人桌面電腦的正常運行不是必需的( )。
A. CPU B. 圖形卡(顯卡) C. 光碟機 D. 主板 E. 內存
5. 下列哪個軟體屬於操作系統軟體( )。
A. Microsoft Word B. 金山詞霸 C. Foxmail D. WinRAR E. Red Hat Linux
6. 下列哪個不是計算機的存儲設備( )。
A. 文件管理器 B. 內存 C. 高速緩存 D. 硬碟 E. U盤
7. 下列說法中錯誤的是( )。
A. CPU的基本功能就是執行指令。
B. CPU訪問內存的速度快於訪問高速緩存的速度。
C. CPU的主頻是指CPU在1秒內完成的指令周期數。
D. 在一台計算機內部,一個內存地址編碼對應唯一的一個內存單元。
E. 數據匯流排的寬度決定了一次傳遞數據量的大小,是影響計算機性能的因素之一。
8. 彩色顯示器所顯示的五彩斑斕的色彩,是由紅色、藍色和( )色混合而成的。
A. 紫 B. 白 C. 黑 D. 綠 E. 橙
9. 用靜電吸附墨粉後轉移到紙張上,是哪種輸出設備的工作方式( )。
A. 針式列印機 B. 噴墨列印機 C. 激光列印機 D. 筆式繪圖儀 E. 噴墨繪圖儀
10. 一台計算機如果要利用電話線上網,就必須配置能夠對數字信號和模擬信號進行相互轉換的設備,這種設備是( )。
A. 數據機 B. 路由器 C. 網卡 D. 網關 E. 網橋
11. 下列哪個不是資料庫軟體的名稱( )。
A. MySQL B. SQL Server C. Oracle D. 金山影霸 E. Foxpro
12. 下列哪個程序設計語言不支持面向對象程序設計方法( )。
A. C++ B. Object Pascal C. C D. Smalltalk E. Java
13. 由3個a,1個b和2個c構成的所有字元串中,包含子串「abc」的共有( )個。
A. 20 B. 8 C. 16 D. 12 E. 24
14. 某個車站呈狹長形,寬度只能容下一台車,並且只有一個出入口。已知某時刻該車站狀態為空,從這一時刻開始的出入記錄為:「進,出,進,進,出,進,進,進,出,出,進,出」。假設車輛入站的順序為1,2,3,……,則車輛出站的順序為( )。
A. 1, 2, 3, 4, 5 B. 1, 2, 4, 5, 7 C. 1, 3, 5, 4, 6 D. 1, 3, 5, 6, 7 E. 1, 3, 6, 5, 7
15. 二叉樹T,已知其前序遍歷序列為1 2 4 3 5 7 6,中序遍歷序列為4 2 1 5 7 3 6,則其後序遍歷序列為( )。
A. 4 2 5 7 6 3 1 B. 4 2 7 5 6 3 1 C. 4 2 7 5 3 6 1 D. 4 7 2 3 5 6 1 E. 4 5 2 6 3 7 1
16. 滿二叉樹的葉結點個數為N,則它的結點總數為( )。
A. N B. 2 * N C. 2 * N – 1 D. 2 * N + 1 E. 2N – 1
17. 十進制數2004等值於八進制數( )。
A. 3077 B. 3724 C. 2766 D. 4002 E. 3755
18. (2004)10 + (32)16的結果是( )。
A. (2036)10 B. (2054)16 C. (4006)10 D. (100000000110)2 E. (2036)16
19. 在下圖中,從頂點( )出發存在一條路徑可以遍歷圖中的每條邊一次,而且僅遍歷一次。
A. A點 B. B點 C. C點 D. D點 E. E點
20. 某大學計算機專業的必修課及其先修課程如下表所示:
課程代號 C0 C1 C2 C3 C4 C5 C6 C7
課程名稱 高等數學 程序設計語言 離散數學 數據結構 編譯技術 操作系統 普通物理 計算機原理
先修課程 C0, C1 C1, C2 C3 C3, C7 C0 C6
請你判斷下列課程安排方案哪個是不合理的( )。
A. C0, C6, C7, C1, C2, C3, C4, C5 B. C0, C1, C2, C3, C4, C6, C7, C5
C. C0, C1, C6, C7, C2, C3, C4, C5 D. C0, C1, C6, C7, C5, C2, C3, C4
E. C0, C1, C2, C3, C6, C7, C5, C4
二.問題求解 (每題5分,共10分)
1. 一個傢具公司生產桌子和椅子。現在有113個單位的木材。每張桌子要使用20個單位的木材,售價是30元;每張椅子要使用16個單位的木材,售價是20元。使用已有的木材生產桌椅(不一定要把木材用光),最多可以賣 元錢。
2. 75名兒童到游樂場去玩。他們可以騎旋轉木馬,坐滑行鐵道,乘宇宙飛船。已知其中20人這三種東西都玩過,55人至少玩過其中的兩種。若每樣乘坐一次的費用是5元,游樂場總共收入700,可知有 名兒童沒有玩過其中任何一種。
三.閱讀程序 (每題8分,共32分)
1.#include <stdio.h>
int main(){
int a = 79, b = 34, c = 57, d = 0, e = -1;
if (a < c || b > c) d = d + e;
else if (d + 10 < e) d = e + 10;
else d = e - a;
printf("%d\n", d);
return 0;
}
輸出: 。
2.#include <stdio.h>
int main(){
int i, j;
char str1[] = "pig-is-stupid";
char str2[] = "clever";
str1[0] = 'd'; str1[1] = 'o';
for (i = 7, j = 0; j < 6; i++, j++)
str1[i] = str2[j];
printf("%s\n", str1);
return 0;
}
輸出: 。
3.#include <stdio.h>
int main(){
int u[4], a, b, c, x, y, z;
scanf("%d %d %d %d",&(u[0]), &(u[1]), &(u[2]), &(u[3]));
a = u[0] + u[1] + u[2] + u[3] - 5;
b = u[0] * (u[1] - u[2] / u[3] + 8);
c = u[0] * u[1] / u[2] * u[3];
x = (a + b + 2) * 3 - u[(c + 3) % 4];
y = (c * 100 - 13) / a / (u[b % 3] * 5);
if ((x + y) % 2 == 0) z = (a + b + c + x + y) / 2;
z = (a + b + c – x - y) * 2;
printf("%d\n", x + y - z);
return 0;
}
輸入:2 5 7 4
輸出: 。
4.#include <stdio.h>
char c[3][200];
int s[10], m, n;
void numara(){
int i, j, cod, nr;
for (j = 0; j < n; j++){
nr = 0; cod = 1;
for (i = 0; i < m; i++){
if (c[i][j] == '1'){
if (!cod){cod = 1; s[nr]++; nr = 0;}
}
else{
if (cod){nr = 1; cod = 0;}
else nr++;
}
}
if (!cod) s[nr]++;
}
}
int main(){
int i;
scanf("%d %d\n", &m, &n);
for (i = 0; i < m; i++) gets(c[i]);
numara();
for (i = 1; i <= m; i++)
if (s[i] != 0) printf("%d %d ", i, s[i]);
return 0;
}
輸入:
3 10
1110000111
1100001111
1000000011
輸出: 。
四、完善程序 (前4空,每空2分,後5空,每空4分,共28分)
1.三角形內切圓的面積
題目描述:
給出三角形三邊的邊長,求此三角形內切圓(如下圖所示,三角形的內切圓是和三角形三邊都相切的圓)的面積。
輸入:
三個正實數a、b、c(滿足a+b>c,b+c>a,c+a>b), 表示三角形三邊的邊長。
輸出:
三角形內切圓的面積,結果四捨五入到小數點後面2位。
輸入樣例:
3 4 5
輸出樣例:
3.14
程序:
#include <stdio.h>
#include <math.h>
int main(){
float a, b, c, r, s, t;
scanf("%f %f %f", &a, &b, &c);
s = ( ① ) / 2;
t = ② (s * (s - a) * (s - b) * (s - c));
r = t / s;
printf(" ③ \n", 3.1415927 * r * ④ );
return 0;
}
2.Joseph
題目描述:
原始的Joseph問題的描述如下:有n個人圍坐在一個圓桌周圍,把這n個人依次編號為1,…,n。從編號是1的人開始報數,數到第m個人出列,然後從出列的下一個人重新開始報數,數到第m個人又出列,…,如此反復直到所有的人全部出列為止。比如當n=6,m=5的時候,出列的順序依次是5,4,6,2,3,1。
現在的問題是:假設有k個好人和k個壞人。好人的編號的1到k,壞人的編號是k+1到2k。我們希望求出m的最小值,使得最先出列的k個人都是壞人。
輸入:
僅有的一個數字是k(0 < k <14)。
輸出:
使得最先出列的k個人都是壞人的m的最小值。
輸入樣例:
4
輸出樣例:
30
程序:
#include <stdio.h>
long k, m, begin;
int check(long remain){
long result = ( ① ) % remain;
if ( ② ){
begin = result; return 1;
}
else return 0;
}
int main(){
long i, find = 0;
scanf("%ld", &k);
m = k;
while( ③ ) {
find = 1; begin = 0;
for (i = 0; i < k; i++)
if (!check( ④ )){
find = 0; break;
}
m++;
}
printf("%ld\n", ⑤ );
return 0;
}
賽區 市 學校 姓名
========================== 密 封 線 =======================
第九屆全國青少年信息學奧林匹克聯賽初賽試題
普及組答卷紙
閱 卷 記 錄
總閱卷人 總 得 分
第 一 大 題 得 分 第二大題得分
題號 1 2 3 4 5 6 7 8 9 10 第三大題得分
得分 1) 2) 3) 4)
題號 11 12 13 14 15 16 17 18 19 20 第四大題得分
得分 (1) (2)
============================ 以下由考生填寫 ==============================
答卷部分
一. 選擇一個正確答案代碼(A/B/C/D),填入每題的括弧內 (每題1.5分,多選無分, 共30 分)
題號 1 2 3 4 5 6 7 8 9 10
選擇
題號 11 12 13 14 15 16 17 18 19 20
選擇
二.問題解答 (每題5分,共10分)
1. 答:
2. 答:
三. 閱讀程序,並寫出程序的正確運行結果:(每題8分,共32分)
(1) 程序的運行結果是:
(2) 程序的運行結果是:
賽區 市 學校 姓名
========================== 密 封 線 =======================
(3) 程序的運行結果是:
(4)程序的運行結果是:
四.根據題意, 將程序補充完整 (前4空,每空2分,後5空,每空4分,共28分)
C 語言
=================
1.
①
②
③
④
2.
①
②
③
④
⑤
第九屆全國青少年信息學奧林匹克聯賽初賽試題
普及組參考答案
一. 選擇一個正確答案代碼(A/B/C/D/E),填入每題的括弧內 (每題1.5分,多選無分, 共30 分)
題號 1 2 3 4 5 6 7 8 9 10
選擇 C B D C E A B D C A
題號 11 12 13 14 15 16 17 18 19 20
選擇 D C D E B C B D E D
二.問題解答 (每題5分,共10分)
1. 答: 160
2. 答: 10
三. 閱讀程序,並寫出程序的正確運行結果:(每題8分,共32分)
(1)程序的運行結果是: -80
(2) 程序的運行結果是: dog-is-clever
(3)程序的運行結果是: 263
(4)程序的運行結果是: 1 4 2 1 3 3
四.根據題意, 將程序補充完整 (前4空,每空2分,後5空,每空4分,共28分)
C 語言
=================
1.
① a+b+c
② sqrt
③ %.2f
④ r
2.
① begin+m-1
② result>=k (或者k<=result)
③ !find (或者 find==0)
④ 2*k-i
⑤ m-1
參考資料:www.noi.cn
D. c語言田忌賽馬問題
把雙方的馬從大到小排序 然後從前往後比較 老田贏了呢 就繼續往下比 老田比不過呢 就拉老田最慢的馬跟這個比 這里好理解
還有比平的情況 比平了還是從後面找一匹馬
找的時候 要是老田後面的馬可以贏對應位置的馬 就接著往前比 然後找到的那匹就跟前面這匹馬比
核心代碼:
for(i=0;i<n;i++)
{
if(t[head]>k[i])
{
head++;
ans+=200;
}
else if(t[head]<k[i])
{
tailt--;
ans-=200;
}
else if(t[head]==k[i])
{
for(j=tailt,m=tailk;j>=head;j--,m--)
{
if(t[j]>k[m])
{
ans+=200;
tailt--;
tailk--;
}
else
{
if(t[j]<k[i]) ans-=200;
tailt=--j;
tailk=m;
break;
}
}
}
if(head>tailt) break;
}
E. 求kM演算法和匈牙利演算法的程序代碼
//二分圖最佳匹配,kuhn munkras演算法,鄰接陣形式,復雜度O(m*m*n)
//返回最佳匹配值,傳入二分圖大小m,n和鄰接陣mat,表示權值
//match1,match2返回一個最佳匹配,未匹配頂點match值為-1
//一定注意m<=n,否則循環無法終止
//最小權匹配可將權值取相反數
#include <string.h>
#define MAXN 310
#define inf 1000000000
#define _clr(x) memset(x,0xff,sizeof(int)*n)
int kuhn_munkras(int m,int n,int mat[][MAXN],int* match1,int* match2){
int s[MAXN],t[MAXN],l1[MAXN],l2[MAXN],p,q,ret=0,i,j,k;
for (i=0;i<m;i++)
for (l1[i]=-inf,j=0;j<n;j++)
l1[i]=mat[i][j]>l1[i]?mat[i][j]:l1[i];
for (i=0;i<n;l2[i++]=0);
for (_clr(match1),_clr(match2),i=0;i<m;i++){
for (_clr(t),s[p=q=0]=i;p<=q&&match1[i]<0;p++)
for (k=s[p],j=0;j<n&&match1[i]<0;j++)
if (l1[k]+l2[j]==mat[k][j]&&t[j]<0){
s[++q]=match2[j],t[j]=k;
if (s[q]<0)
for (p=j;p>=0;j=p)
match2[j]=k=t[j],p=match1[k],match1[k]=j;
}
if (match1[i]<0){
for (i--,p=inf,k=0;k<=q;k++)
for (j=0;j<n;j++)
if (t[j]<0&&l1[s[k]]+l2[j]-mat[s[k]][j]<p)
p=l1[s[k]]+l2[j]-mat[s[k]][j];
for (j=0;j<n;l2[j]+=t[j]<0?0:p,j++);
for (k=0;k<=q;l1[s[k++]]-=p);
}
}
for (i=0;i<m;i++)
ret+=mat[i][match1[i]];
return ret;
}