計算機C語言上機題及答案_第1頁
計算機C語言上機題及答案_第2頁
計算機C語言上機題及答案_第3頁
計算機C語言上機題及答案_第4頁
計算機C語言上機題及答案_第5頁
已閱讀5頁,還剩80頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

期末考試說明

本次考試全部采用筆試形式,分為如下三種題型

一、程序閱讀題(10空X2分/空=20分)

二、程序修改題(10空X2分/空=20分)

三、程序設(shè)計題(6題X10分/題=60分)

程序閱讀和修改題主要涉及知識點如下:

scanf和printf、switch循環(huán)(for、while、do-while)及和break、continue結(jié)合、

二維數(shù)組處理、字符串處理、函數(shù)遞歸調(diào)用、static、宏定義展開、文件定義、打開fopen、

關(guān)閉fclose和讀寫操作(fscanf和fprintf)

程序設(shè)計題主要考核如下內(nèi)容:

1.單純的分支結(jié)構(gòu)

2.單純的一層循環(huán)結(jié)構(gòu)

3.實現(xiàn)完整的函數(shù):函數(shù)的定義、函數(shù)體的編寫、帶返回值的和不帶返回值的函數(shù)、值

傳遞、地址傳遞。涉及到分支、循環(huán)、數(shù)組、字符串、結(jié)構(gòu)體等。

以下內(nèi)容不做考試要求:

指向二維數(shù)組的指針、指針函數(shù)、指針數(shù)組、多級指針、共用體、枚舉、位運算、文件

fseek、ftelkfread和fwrite

計算機C語言上機題、

第四章

4.1溫度轉(zhuǎn)換,第一個數(shù)據(jù)(1或2)確定轉(zhuǎn)換的類型:華氏轉(zhuǎn)攝氏(1);攝氏轉(zhuǎn)華氏(2);

#include<stdio.h>

intmain()

(

intx;

floatC,F,a;

scanf("%d%f',&x,&a);

if(x==l)

(

C=(a-32)*5/9;

printf("TheCentigradeis%.2f\nu,C);

)

else

(

F=(a*9/5)+32;

printf("ThcFahrenheitis%.2f\n'\F);

)

return0;

)

第五章

5.1輸出一行星號

#include<stdio.h>

#include<stdlib.h>

intmain()

(

inta,b=I;

scanf("%d",&a);

while(b<=a)

{

printf("*");

b=b+1;

)

printf("\n");

return0;

}

5.2打印平行四邊形

問題描述

輸入圖形的高n,輸出如下例(n=5)所示的圖形.

*****

*****

*****

*****

*****

輸入

整數(shù)n例如5

輸出

由*組成的高為5的平行四邊形

#include<stdio.h>

#include<stdlib.h>

inimain()

{

inta,b,c,n;

scanf("%d",&n);

a=l;

while(a<=n)

(

b=l;

while(b<=a-l)

(

printfC");

b=b+l;

)

c=l;

while(c<=n)

(

printfC*");

c=c+1;

}printfC\n");

a=a+l;

I

return0;

)

5.3編程計算

問題描述

編寫程序,輸入n的值,求:i-i/2+i/3-i/4+i/5-i/6+i/7????+i/n(保留四位小數(shù))

輸入

n的值

輸出

上述算式的求和結(jié)果(結(jié)果保留四位小數(shù))

輸入樣例

1

輸出樣例

sum=i.oooo

#includc<stdio.h>

#include<stdlib.h>

#include<math.h>

intmain()

{

intn,a=l;

doublesum=0;

scanf("%d”,&n);

while(a<=n)

(

sum=sum+(1.0/a)*pow(-1,a-1);

a=a+1;

)

printf("sum=%.41f\n,,,sum);

return0;

}

5.4分?jǐn)?shù)序列

問題描述

2358_1321_

有一個分?jǐn)?shù)序列:1235813輸入整數(shù)必求出其前n項

的和。

輸入

整數(shù)n

輸出

上述分?jǐn)?shù)序列的前n項之和

提示:輸出語句格式為printf(Hsum=%i6.iof\nH,s);

輸入樣例

1

輸出樣例

sum=2.0000000000

#include<stdio.h>

#include<stdlib.h>

intmain()

(

intn,c,i=l;

doubles=0,a=2,b=1;

scanf("%d",&n);

while(i<=n)

(

s=s+a/b;

c=a;

a=a+b;

b=c;

i++;

}

printf("sum=%16.1OfXn'^s);

return0;

)

5.5求e的值

問題描述

編寫程序,從鍵盤輸入整數(shù)n,求e的值。e=i+i/i!+i/2!+i/3!+..+i/n!注意:用

double型數(shù)據(jù)計算。

輸入

整數(shù)n

輸出

e的值

提示:輸出語句printf(ne=%i6.iof\nM,e);

輸入樣例

2

輸出樣例

e=2.5000000000

#includc<stdio.h>

#include<stdlib.h>

intmain()

{

intn;

doubleb=l,a=1,i=l,e=l;

scanf(,'%d*',&n);

while(i<=n)

(

while(a<=i)

(

b=b/a;

a++;

I

e=e+b;

i++;

)

printf("e=%16.1Of\nn,e);

return0;

)

5.6求最大公約數(shù)

問題描述

輸入兩個正整數(shù)m和n,求它們的最大公約數(shù)和最小公倍數(shù)

輸入

兩個正整數(shù)m和n

輸出

m和n的最大公約數(shù)和最小公倍數(shù)

輸入樣例

28

輸出樣例

thegreatestcommondivisoris2

theleastcommonmultipleis8

#include<stdio.h>

#include<stdlib.h>

inimain()

{

intr=l,m,n,d,a,b;

scanf("%d%d",&m,&n);

a=m;

b=n;

if(m%n==O&&m^>n)

(

r=n;

)

if(m%n==0&&m<n)

(

r=m;

}

while((m%n)!=0)

(

r=m%n;

m=n;

n=r;

I

d=a/r*b;

printf("thegreatestcommondivisoris%d\n",r);

printf("theleastcommonmultipleis%d\n",d);

return0;

I

5.7水仙花數(shù)

問題描述

輸出所有的水仙花數(shù)。所謂的水仙花數(shù)是指一個3位數(shù),其各位數(shù)字立方和等于該數(shù)本

身。例如153是一水仙花數(shù),因為153=13+53+33

輸入

輸出

所有的水仙花數(shù)提示:輸出語句printf(H%d\nH,n);

#include<stdio.h>

#include<stdlib.h>

intmain()

{

inin=IOO,a,b,c,d;

for(n=100;n<=999;n++)

(

a=n%10;

b=n/10%10;

c=n/100%10;

d=a*a*a+b*b*b+c*c*c;

if(n==d)

(

printf("%d\n'\n);

}

}

return0;

}

5.8完數(shù)

問題描述

一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為完數(shù)。例如,6的因子為1,2,3,且

6=1+2+3,因此6是完數(shù)。

輸入

一個正整數(shù)n

輸出

判斷n是否為完數(shù)。如果是,則輸出Yes和它的所有因子;否則,輸出No

輸入樣例

6

輸出樣例

Yes,itsfactorsare123

#include<stdio.h>

#include<stdlib.h>

intmain()

(

intn,a=l,c,b=O;

scanf("%d”,&n);

fbr(a=1;a<n;a++)

(

c=n%a;

if(c==O)

(

b=b+a;

)

}

if(n==b)

1

printf("Yies,itsfactorsare');

fbr(a-1,a<n;a十十)

(

c=n%a;

if(c==O)

(

prinlfC%d",a);

else

{

printf("No");

)

printf("\n");

return0;

)

5.9素數(shù)

問題描述

輸入兩個正整數(shù)m和n,求出[m,n]區(qū)間的所有素數(shù)

輸入

兩個整數(shù)m和n

輸出

[m,n]區(qū)間的所有素數(shù)

輸入樣例

210

輸出樣例

2357

#include<stdio.h>

#include<stdlib.h>

intmain()

{

inti,a,n,m;

scanf("%d%d",&m,&n);

fbr(a=m;a<n;a++)

{

fbr(i=2;i<=a;i++)

{

if(a%i==O)

{

break;

)

}

if(i==a)

(

printf("%d",a);

)

)

printfC'\n");

return0;

I

5.10回文數(shù)

問題描述

輸入一個正整數(shù),判斷是否為回文數(shù)。

輸入

一個正整數(shù)n

輸出

如果是,輸出Yes,否則輸出No

輸入樣例

12321

輸出樣例

Yes

#include<stdio.h>

#include<stdlib.h>

intmain()

{

inta,n,m=0;

scanf(',%d,,,&n);

a=n;

while(n!=O)

(

m=m*10+n%10;

n=n/10;

)

if(m==a)

(

printf("Yes\n");

)

else

(

prinlf("No'n”);

)

return0;

}

5.11貪吃的猴子

問題描述

有一只猴子,第一天摘了若干個桃子,當(dāng)即吃了一半,但還覺得不過癮,就又多吃了

一個。第2天早上乂將剩卜的桃子吃掉一半,還是覺得不過癮,就乂多吃了兩個。以后

每天早上都吃了前一天剩下的一半加天數(shù)個(例如,第5天吃了前一天剩下的一半加5

個)。到第n天早上再想吃的時候,就只剩下一個桃子了。

輸入

天數(shù)n

輸出

第一天的桃子個數(shù)。提示:輸出語句為

printf(HThemonkeygot%dpeachsinfirstday.\nn,sum);

輸入樣例

5

輸出樣例

Themonkeygot114peachsinfirstday.

提示:

問題分析:

總共to

日吃掉剩余

1tO/2+1tO-(tO/2+l)=tO/2-ltl=tO/2-l=>to=(tl+l)*2

2tl/2+2tl-(tl/2+2)=tl/2-2t2=tl/2-2=>tl=(t2+2)*2

n-1tn-2/2+(n-l)tn-2-(tn-2/2+(n-l))=tn-2/2-(Il-l)tn-i=tn-2/2-(n-l)=>tn-2=(tn-i+Il-l)*2

H1Otn-i=l

#include<stdio.h>

#includc<stdlib.h>

intmain()

(

doublen,i,m=l;

scanf("%ir,&n);

for(i=l;i<=n-l;i++)

(

m=(n-i+m)*2;

)

printf(,'Themonkeygot%.01fpeachsinfirstday.\n'\m);

return0;

)

5.12馬戲團人數(shù)

問題描述

一個馬戲團表演,n個座位全滿,全部門票收入是120元,現(xiàn)在知道,男人每人5元,

女人每人2元,小孩每人1角。根據(jù)總?cè)藬?shù),計算出男人、女人和小孩各多少人。

輸入

總?cè)藬?shù)n

輸出

男人、女人和小孩人數(shù),若n人無法滿足條件,則輸出“Nooutput'n

#include<stdio.h>

#include<stdlib.h>

intmain()

(

intx,y,z,n;

scanf("%dn,&n);

fbr(x=0;x>=0&&x<=24;x++)

(

for(y=0;y>=0&&y<=60;y++)

(

z=n-x-y;

if(50*x+20*y+z==1200&&z>=0)

{

printf("%d%d%d\n",x,y,z);

if((n%5)!=0&&(n%2)!=0&&(50*x+20*y+z)!=1200)

(

printf("Nooulput\n");

)

return0;

}

5.13迭代法

問題描述

用迭代法求x=。求平方根的迭代公式為:

要求前后兩次求出的X的差的絕對值小于1O工

輸入

a

輸出

右的值

輸入樣例

4

輸出樣例

Thesquarerootof4.00is2.00000

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

intmain()

(

floata,xi,x2;

scanf(M%f,,&a);

xi=sqrt(a);

x2=i/2*(xi+a/xi);

do

{

xi=sqrt(a);

x2=i/2*(xi+a/xi);

}while(fabs(x2-xi)<o.oooooi);

printf("Thesquarerootof%.2fis%,5f\n",a,xi);

returno;

}

5.14cos(x)-x=o

利用以下所示的簡單迭代方法求方程:cos(x)-x=o的一個實根。

Xn+i=COS(Xn)

迭代步驟如下:

⑴輸入數(shù)據(jù)給XI;

(2)XO=X1,把XI的值賦給X0;

(3)xi=cos(xo),求出一個新的xi;

(4)若X0-X1的絕對值小于0.000001,執(zhí)行步驟(5),否則執(zhí)行步驟(2);

(5)所求XI就是方程cos(x)-x=o的一個實根,輸出XI,輸出語句為printf(ux=%lf',x);o

提示:本題xo和xi定義為doub加類型

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

intmain()

(

doublea,b;

scanf("%lf\n",&a);

b=cos(a);

while(fabs(b-a)>0.000001)

(

a=b;

b=cos(a);

}

printf("x=%f\n'\b);

return0;

}

5.15求一個三位數(shù),其值等于其各位階乘之和

問題描述

編寫程序,求某三位數(shù),該數(shù)值的大小正好是組成這個數(shù)的三個位上的數(shù)字階乘之和。

輸入

輸出

滿足上述條件的三位數(shù)。提示:輸出格式為printf("%d\n”,mim);

#include<stdio.h>

#include<stdlib.h>

intmain()

inta,b,c,ij,k,m,n,s;

fbr(a=l;a<=9;a++)

for(b=l;b<=9;b十十)

for(c=l;c<=9;c++)

m=l;

n=l;

s=l;

for(i=1;i<=a;i++)

m*=i;

for(j=l;j<=b;j++)

n*=j;

for(k=1;k<=c;k++)

s*=k;

if(lOO*a+lO*b+c==m+n+s)

printf("%d\n",m+n+s);

return0;

第六章

6.1誰能出線

背景:

電視臺舉辦“超級學(xué)生”才藝大賽,由于報名人數(shù)狂多,所以要先進行分組預(yù)賽。按規(guī)定,

每10名學(xué)生為一個預(yù)賽小組,評委打出分?jǐn)?shù)(0~100分),各小組第一名可以進入下

一輪;如果有多名學(xué)生得分相同都是第一名,則可同時進入下一輪。

輸入:

按順序給出一個小組1O個人的最后得分(int)。

輸出:

能夠出線的學(xué)生序號(o~9)。

#include<stdio.h>

#include<stdlib.h>

#dcfineN10

intmain()

{

inta[N],i,n,m;

for(i=0;i<10;i++)

scanf("%d",&a[i]);

m=a[O];

for(i=0;i<10;i++)

(

if(m<a[i])

{

m=a[i];

)

)

fdr(i=O;i<10;i++)

(

if(m==a[i])

(

n-i;

printf("%d\n",n);

}

}

return0;

)

6.2統(tǒng)計素數(shù)個數(shù)

求出2到m之間(含m,m<=iooo)所有素數(shù)并放在數(shù)組a中。

輸入:正整數(shù)m

輸出:從小到大的所有素數(shù),及個數(shù)(素數(shù)輸出的時候用%4d來控制)

如:

輸入:1O

輸出:2357

4

#include<stdio.h>

#defineN500

intmain()

{

inta[N],m,ij,x,k=0;

scanf(H%d'\&m);

fbr(i=2;i<=m;i++)

for(j=2;j<=i;j++)

if(i%j==O)

(

break;

if(i==j)

(

a[k]=j;

k++;

)

for(x=O;x<k;x++)

(

printf("%4d",a[x]);

}

printf("\n");

printf("%d\n';k);

return0;

)

6.3冒泡法排序

冒泡排序(BubbleSort)的基本概念是:依次比較相鄰的兩個數(shù),將小數(shù)放在前面,大

數(shù)放在后面。即在第一趟:首先比較第1個和第2個數(shù),將小數(shù)放前,大數(shù)放后。然后

比較第2個數(shù)和第3個數(shù),將小數(shù)放前,大數(shù)放后,如此繼續(xù),直至比較最后兩個數(shù),

將小數(shù)放前,大數(shù)放后。至此第一趟結(jié)束,將最大的數(shù)放到了最后。在第二趟:仍從第

一對數(shù)開始比較(因為可能由于第2個數(shù)和第3個數(shù)的交換,使得第1個數(shù)不再小于第

2個數(shù)),將小數(shù)放前,大數(shù)放后,一直比較到倒數(shù)第二個數(shù)(倒數(shù)第一的位置上已經(jīng)

是最大的),第二趟結(jié)束,在倒數(shù)第二的位置上得到一個新的最大數(shù)(其實在整個數(shù)列

中是第二大的數(shù))。如此下去,重更以上過程,直至最終完成排序。由于在排序

過程中總是小數(shù)往前放,大數(shù)往后放,相當(dāng)于氣泡往上升,所以稱作冒泡排序。

編寫程序,對輸入的十個數(shù)按照從小到大排序

#include<stdio.h>

#includc<stdlib.h>

#defineN10

intmain()

(

inta[N],i,j,t;

fbr(i=O;i<N;i++)

scanff%d”,&a[i]);

for(i=O;i<(N-l);i++)

(

fbr(j=i+l;j<N;j++)

{

if(a[j]<a[i])

{

t=a[j];

a[j]=a[i];

a[i]=t;

printf("%d",a[i]);

)

printfC%d';a[i]);

printf("\n");

return0,

}

6.4插入法排序

如果一個數(shù)組中保存的元素是有序的(由小到大),向這個數(shù)組中插入一個數(shù),使得插

入后的數(shù)組元素依然保持有序。

定義一個數(shù)組,長度為11,初始元素為10個,按照從小到大的方式輸入,然后輸入一

個要插入的元素,使得插入后仍然有序。

#include<stdio.h>

#include<stdlib.h>

#dcfineN10

intmain()

{

inia[N+l],i,x,k;

fbr(i=0;i<N;i++)

{

scanf("%d”,&a[i]);

}

scanf("%d”,&x);

fbr(i=9;i>=0;i-)

if(a[i]<=x)

(

k=i+l;

break;

else

k=0;

}

}

fbr(i=10;i>k;i-)

(

a[i]=a[i-l];

}

a[k]=x;

for(i=O;i<N+l;i++)

1

printf("%d",a[i]);

)

printf("\n");

return0;

1

6.5求各位數(shù)字中組成的最大數(shù)

任意輸入一個自然數(shù),輸出該自然數(shù)的各位數(shù)字組成的最大數(shù)。例如,輸入1593,則

輸出為9531。

輸入:自然數(shù)n

輸出:各位數(shù)字組成的最大數(shù)

#include<stdio.h>

#include<stdlib.h>

#dcfineN100

intmain()

{

inia[N],i,n,pj,k=0;

scanf("%d",&n);

fbr(i=0;i<N;i++)

{

aliJ=n%10;

n=n/I0;

k++;

if(n==0)

(

break;

for(i=0;i<k-l;i++)

for(j=i+l;j<k;j++)

(

if(a[il<a[j])

{

P=a[il;

a[i]=a[j];

a[j]=p;

I

for(i=O;i<k;i++)

{

printf("%d",a[i]);

)

printf("\n");

return0;

}

6.6數(shù)組逆序輸出、

問題描述

從鍵盤上輸入一個數(shù)組(io個元素),將原數(shù)組逆序重新排列后輸出。要求輸出每個

元素時以一個空格隔開。

提示:

用第一個與最后一個交換。

#include<stdio.h>

#include<stdlib.h>

#defineN10

intmain()

{

inta[N],z,i,j;

fbr(i=0;i<N;i++)

(

scanf("%d",&a[i]);

I

for(j=0;j<i/2;j++)

(

z=a[j];

aU]=a[9-j];

a[9-j]=z;

for(i=0;i<N;i++)

printf("%d",a[i]);

printfC'^");

return0;

)

6.7求最大值

問題描述

要求從鍵盤輸入10個整型數(shù)據(jù),找出其中的最大值并顯示出來。

輸入范例

3o54-71027327671015002

輸出范例

3”67

提示

先假定第一個元素時最大值,然后和其他的元素一個一個的進行比較,直到找到最大值。

#include<stdio.h>

#include<stdlib.h>

#dcfineN10

inimain()

{

inta[N],z,ij;

for(i=0;i<N;i++)

(

scanf("%d”,&a[i]);

)

z=a[0];

for(i=0;i<N;i++)

(

if(z<a[i])

(

z=a[i];

}

)

printf("%d\n',,z);

return0;

)

6.8二維數(shù)組

問題描述:

程序定義了4X4的二維數(shù)組,請編寫程序,給二維數(shù)組賦值,并使數(shù)組下半三角元素

中的值乘以no

例如:

數(shù)組中的值為

1234

2234

3234

4234

假設(shè)n為10,則輸出結(jié)果如下:(輸出的數(shù)按照4位寬度來輸出,即%4(1)

10234

202034

3020304

40203040

#includc<stdio.h>

#include<sldlib.h>

intmain()

(

inta[4][4];

intn,i,j;

fbr(i=O;i<4;i++)

(

for(j=0;j<4;j++)

(

scanfC%d",&a[i][j]);

)

}

scanf(,'%d,,,&n);

fbr(i=O;i<4;i++)

{

for(j=0;j<=i;j++)

I

a[i]|jl=n*a[i][j];

)

}

fbr(i=0;i<4;i++)

for(j=0;j<4;j++)

printf("%4d,\a[ij[j]);

prinifCXn");

I

return0;

}

6.9在屏幕上輸出楊輝三角

楊輝三角形,又稱賈憲三角形,帕斯卡三角形,是二項式系數(shù)在三角形中的一種幾何排

列。

其實,中國古代數(shù)學(xué)家在數(shù)學(xué)的許多重要領(lǐng)域中處于遙遙領(lǐng)先的地位。中國古代數(shù)

學(xué)史曾經(jīng)有自己光輝燦爛的篇章,而賈憲三角的發(fā)現(xiàn)就是十分精彩的一頁。

楊輝三角有如下性質(zhì):

1、每行數(shù)字左右對稱,由1開始逐漸變大,然后變小,回到1。

2、第n行的數(shù)字個數(shù)為n個。

3、每個數(shù)字等于上一行的左右兩個數(shù)字之和。

編寫程序,輸入正數(shù)n,將所有數(shù)據(jù)存儲到二維數(shù)組中,并在屏幕上顯示對應(yīng)的楊輝

三角形(注意數(shù)據(jù)之間的空格)。例如:n=5圖形如下:

1

11

121

1331

14641

15101051

#include<stdio.h>

#include<stdlib.h>

#defineN100

intmain()

{

inta[N][N];

inii,j,n;

scanf("%d",&n);

fbr(i=0;i<=n;i++)

for(j=0;j<=i;j++)

if(j==O|U==i)

(

aliJ[j]=U

)

if(j>O&&j<i)

{

a[i]U]=a[(i-l)][(j-l)]+a[(i-l)]U];

)

printf("%3d",a[i][j]);

)

printf("\n");

)

return0;

}

6.10球周邊元素之和

編寫?個程序,求出4^5的二維數(shù)組周邊元素之和。

輸入:二維數(shù)組元素

輸出:周邊元素之和

如:

輸入:

13579

29994

69998

1357。

輸出:61

#includc<stdio.h>

#include<stdlib.h>

#defineN4

#defineM5

intmain()

(

inta[N][M],ij,b=O,c=O,d=O,e=O,sum;

for(i=O;><N;i++)

for(j=0;j<M;j++)

scanf("%d",&a[ij|jj);

for(i=0;i<N;i++)

(

if(i==O)

(

for(j=0;j<M-l;j++)

(

b=b+ali](j];

)

)

if(i==3)

(

for(j=0;j<M-l;j++)

(

d-d+a[i]UJ;

}

}

)

fbr(j=O;j<M;j++)

(

if(j==O)

(

for(i=1;i<N-l;i++)

(

c=c+a[i]U];

)

)

if(j==4)

(

for(i=0;i<N;i++)

(

e=e+a[i][j];

)

)

}

sum=b+c+d+e;

printf("%d\n",sum);

return0;

}

6.11存儲并輸出一個矩陣

編程,輸入n,存儲并輸出如下例(n=5)所示的圖形。

12345

11234

11123

11112

11111

#include<stdio.h>

#include<stdlib.h>

#defineN100

intmain()

(

inta[N][N];

inti,j,n;

scanf("%d",&n);

for(i=0;i<n;i++)

{

for(j=0;j<=i;j++)

(

a[i]Ul=l;

1

for(j=i+l;j<n;j++)

(

a[i][jl=j+l-i;

)

)

fbr(i=O;i<n;i++)

(

for(j=0;j<n;j++)

(

printf(H%2d",a[i][j]);

)

printf(H\n");

}

return0;

6.12給數(shù)組中元素按順序編號

對數(shù)組a[io]中的十個整數(shù)從小到大進行連續(xù)編號,輸出各個元素的編號。要求不能

改變數(shù)組a中元素的順序,且相同的整數(shù)要具有相同的編號。例如數(shù)組是:

A=(5,3,4,7,3,5,6,8,9,1。)則輸出為:(4,1,3,7,1,4,6,8,9,10)

#include<stdio.h>

#include<stdlib.h>

#defineN10

#defineM100

intmain()

{

inta[N],b[M],ij;

fbr(i=0;i<N;i++)

(

scanf("%d",&a[i]);

)

fbr(i=0;i<N;i++)

(

b[i]=l;

for(j=0;j<N;j++)

(

if(a[i]>a[j])

(

b[i]++;

)

)

printf(H%3d';b[i]);

)

printf("\n");

return0;

}

6.13矩陣加法

方陣階數(shù)為n(n<ioo),例如當(dāng)n=3時,矩陣int就3][3],矩陣intb[3][3]。矩陣的數(shù)

據(jù)由用戶輸入。輸出新的矩陣C=a+bo輸出格式:COOCOlC02CIOCllC12C20C21C22

每兩個數(shù)字之間有1個空格

關(guān)于輸入

方陣階數(shù)n

矩陣a:

aooaoia02

aioanai2

a2Oa2ia22

矩陣b:

booboibo2

biobnbi2

b20b21b22

關(guān)于輸出

矩陣C:

COOC01CO2

CIOCllC12

C2OC21C22

#include<stdio.h>

#include<stdlib.h>

#defineN100

intmain()

{

inia[N][N],b[N][N],c[N][N],iJ,n;

scanf("%d”,&n);

for(i=0;i<n;i++)

(

for(j=0;j<n;j++)

{

scanf("%d”,&a[i][jD;

I

)

fbr(i=O;i<n;i++)

(

for(j=0;j<n;j++)

(

scanf("%d",&b[i][j]);

)

}

for(i=0;i<n;i++)

(

for(j=0;j<n;j++)

(

c[i]U]=a[i]U]+b[i]U];

)

)

fbr(i=O;i<n;i++)

(

for(j=0;j<n;j++)

(

|

printf("%d';c[il[j]);

}

else

printf("%d",c[i][j]);

printf("\n");

)

return0;

I

6.14矩陣轉(zhuǎn)置

在數(shù)學(xué)上,矩陣是指縱橫排列的二維數(shù)據(jù)表格,最早來自于方程組的系數(shù)及常數(shù)所構(gòu)成

的方陣。這一概念由19世紀(jì)英國數(shù)學(xué)家凱利首先提出。矩陣概念在生產(chǎn)實踐中也有許

多應(yīng)用,比如矩陣圖法以及保護個人帳號的矩陣卡系統(tǒng)(由深圳網(wǎng)域提出)等等?!熬?/p>

陣”的本意也常被應(yīng)用,比如監(jiān)控系統(tǒng)中負(fù)責(zé)對前端視頻源與控制線切換控制的模擬設(shè)

備也叫矩陣。

設(shè)A為nxn階矩陣(即n行n列),第i行j列的元素是a(i,j),即:A=a(i,j)

定義A的轉(zhuǎn)置為這樣一個nxn階矩陣R,滿足B=aG,i),即b(i,j)=aG,i)(R的第i行

第j列元素是A的第j行第i列元素),記A'=B。(有些書記為AT=B,這里T為A的

上標(biāo))

直觀來看,將A的所有元素繞著一條從第1行第1列元素出發(fā)的右下方45度的

射線作鏡面反轉(zhuǎn),即得到A的轉(zhuǎn)置。

輸入:

有n+i行(2wnwio),第一行是一個整數(shù)n,代表矩陣為n行n列。后面n行表示矩

陣的取值

輸出:

轉(zhuǎn)置后的矩陣

#include<stdio.h>

#include<stdlib.h>

#defineN100

intmain()

(

inta[N][N],ij,n,k;

scanf("%d”,&n);

fbr(i=O;i<n;i++)

(

for(j=O;j<n;j++)

scanf("%dM,&a[i]|j]);

fbr(i=O;i<n;i++)

(

for(j=0;j<i;j++)

(

k=a[ilUl;

a[i]|j]=a[j][i];

aU][i]=k;

)

)

fbr(i=O;i<n;i++)

(

for(j=0;j<n;j++)

(

if(j!=(n-l))

(

piintf("%d

)

else

{

printf("%d';a[i][j]);

)

)

printfCXn1');

}

return0;

)

6.15求一系列整數(shù)中出現(xiàn)最多的數(shù)

給定一系列整數(shù),對每個整數(shù)的每一位數(shù)字統(tǒng)計0~9各個數(shù)字的出現(xiàn)次數(shù),求出現(xiàn)次

數(shù)最多的數(shù)字。

輸入:

有兩行,第一行是整數(shù)n(i<=n<=ioo),表示有n個整數(shù);第二行是n個整數(shù)值

輸出:

出現(xiàn)次數(shù)最多的數(shù)字d(如果d不唯一,要列出全部)及其出現(xiàn)的次數(shù)

輸入樣例:

1

1233

輸出樣例:

出現(xiàn)次數(shù)最多2次的數(shù)字是3

#include<stdio.h>

#include<stdlib.h>

intmain()

{

inta[IO]={O|;

intn,i=0,maxl=0;

charm;

charb[200]={0);

int1=0;

scanf("%d",&n);

getchar();

gets(b);

l=strlen(b);

for(i=0;i<l;i++)

{

if(b[i]>=<0,&&b[i]<='9')a[b[i]-48J+=l;

}

i=0;

while(i<10)

(

if(a[i]>maxl)maxl=a[i];

i++;

}

printf(”出現(xiàn)次數(shù)最多%d次的數(shù)字是二maxi);

for(i=0;i<10;i++)

(

if(max1==a[i])printf("%d",i);

1

printf("\nH);

return0;

)

6.16裝箱問題

假設(shè)有n項物品,大小分別為si,S2,…,sn,其中si是整數(shù)且滿足:i<=si<=ioOo

要把這些物品裝入到容量為100的一批箱子(序號i~n)中。裝箱方法是:對每項物品

si,依次掃描所有這些箱子,把si放入足以能夠容下它的第一個箱子中(frst-fit策略)。

寫一個程序來模擬這個裝箱的過程。

輸入:

有兩行。第一行是整數(shù)n(n<=iooo),表示物品的個數(shù);第二行是n個整數(shù)si(si<=ioo),

分別表示n個物品的大小

輸出:

每個物品所在的箱子序號,并輸出所需的箱子數(shù)目

輸入樣例:

8

6o708o90304。1020

輸出樣例:

6o1

702

803

904

3。1

405

1O1

202

所需的箱子數(shù)目為5

#includc<stdio.h>

#include<sldlib.h>

#defineN100

intmain()

{

inta[N],b[N],n,ij,k;

scanf("%d",&n);

for(i=0;i<n;i++)

(

scanf(M%dM,&a[i]);

b[i]=100;

}

fbr(i=O;i<n;i++)

(

for(j=0;j<n;j++)

(

if(b|j]-a[i]>=0)

(

printf("%d%d\n",a[i],j+l);

bU]=b[j]-a[i];

break;

for(j=0;j<n;j++)

if(b[j]==100)

break;

I

printf("所需的箱子數(shù)目為%氏”力;

return0;

}

第八章

8.1字符轉(zhuǎn)換

描述

提取一個字符串中的所有數(shù)字字符(‘o'…'9')將其轉(zhuǎn)換為一個整數(shù)輸出。

輸入

一個以回車符為結(jié)束標(biāo)志的字符串(少于8。個字符)。

輸出

把字符串中的所有數(shù)字字符('o'...'9')轉(zhuǎn)換為一個整數(shù)并輸出。

#includc<stdio.h>

#include<sldlib.h>

#include<string.h>

#defineN1000

intmain()

(

chara[N];

inti,j=O,lcn,m;

gets(a);

len=strlen(a);

fbr(i=O;i<len;i++)

(

if(aLi]>='0'&&aliJ<='9')

(

m=a[i卜'O';

j=j*10+m;

)

}

printf("%d\n',,j);

return0;

)

8.2合并字符串

輸入兩個已經(jīng)按從小到大順序排列好的字符串,編寫一個合并兩個字符串的函數(shù),使合

并后的字符串,仍然是從小到大排列。

輸入:

兩個己經(jīng)排好順序(升序)的字符串

輸出:

一個合并在一起的有序(升序)的字符串

要求:

設(shè)計一個效率盡量高的算法,對每個字符串只掃描一遍就可以了。

如果采用先進行串連接,然后再進行排序的算法,則效率太低了

#include<stdio.h>

#include<stdlib.h>

#includc<string.h>

#defineN100

intmain()

(

chara[N],b[N],s[N];

inti=0,j=0,k=0;

gets(a);

gets(b);

whiIe((a[i]!='\0')&&(b[j]!=,\0'))

(

if(a[i]<b[j])

(

s[k++]=a[i++];

)

else

(

s[k++]=b[j++];

)

)

while((a[i]==>\0')&&(b[j]!=,\0,))

(

s[k++]=b|j++];

}

while((a[i]!=I\0')&&(b[j]==,\0,))

(

s[k++]=a[i++];

)

puts(s);

return0;

8.3刪除重復(fù)字符

背景:

輸入一個長度不超過100的字符串,刪除串中的重復(fù)字符。

輸入:

輸入要檢查的字符串,長度不超過100個字符。例如:abacaeedabcdcdo

輸出:

刪除重復(fù)字符后的字符串。例如:abcedo

#include<stdio.h>

#include<string.h>

#defineN100

intmain()

{

chara[N],b[N];

intij=l,k;

gets(a);

b[O]=a[O];

for(i=l;(a[i]!='\0');i++)

(

for(k=0;k<j;k++)

(

if(b[k]==a[i])

(

break;

)

)

if(k==j)

(

b[j++]=a[i];

)

bljl^O,;

puts(b);

return0;

8.4刪除字符串中指定字符

輸入兩個字符串S1和S2,在S1中刪除任何S2中有的字符。例如,S1:

“abci23ad”,S2:“ai",則輸出“bc23d"°

輸入:兩個字符串S1和S2

輸出:刪除后的字符串S1

#includc<stdio.h>

#include<string.h>

#defineN100

intmain()

{

chara[N],b[N],c[N];

inti,j,len,k=0;

gets(a);

gets(b);

len=strlen(b);

for(i=0;(a[i]!='\0');i++)

(

for(j=0;b|jj!=,\0,;j++)

(

if(b[j]==a[i])

(

break;

)

)

if(len==j)

(

c[k++]=a[i];

cM^O';

puts(c);

return0;

1

8.5單詞有多少

用空格或換行分開的字符串稱為單詞。輸入多行字符串,直到遇到了單詞“s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論