欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      山科大 C語(yǔ)言程序設(shè)計(jì)編程精選44例

      時(shí)間:2019-05-15 01:00:10下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫寫幫文庫(kù)小編為你整理了多篇相關(guān)的《山科大 C語(yǔ)言程序設(shè)計(jì)編程精選44例》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫(kù)還可以找到更多《山科大 C語(yǔ)言程序設(shè)計(jì)編程精選44例》。

      第一篇:山科大 C語(yǔ)言程序設(shè)計(jì)編程精選44例

      問(wèn)題 1: 三個(gè)數(shù)比較大小

      題目描述

      從鍵盤上輸入0~100之間的三個(gè)數(shù),按從小到大的順序輸出。

      輸入

      輸入只有一行,為三個(gè)整數(shù)。

      輸出

      按從小到大輸出這三個(gè)數(shù)。

      樣例輸入 10 20 樣例輸出 15 20 提示

      用if語(yǔ)句判斷各種情況可以解決這個(gè)問(wèn)題。

      解答:

      #include int main(){

      int a,b,c;

      scanf(“%d%d%d”,&a,&b,&c);

      if(a>=b)

      {

      if(b>=c)

      printf(“%d %d %d”,c,b,a);

      else

      {

      if(a>=c)

      printf(“%d %d %d”,b,c,a);

      else

      printf(“%d %d %d”,b,a,c);

      }

      }

      else

      {

      if(b

      printf(“%d %d %d”,a,b,c);

      else

      {

      if(a

      printf(“%d %d %d”,a,c,b);

      else

      printf(“%d %d %d”,c,a,b);

      }

      } } 問(wèn)題 2: 輸出是m的倍數(shù)或n的倍數(shù)、但不是m和n的公倍數(shù)的數(shù)

      題目描述

      輸出1~k之間是m的倍數(shù)或n的倍數(shù)、但不是m和n的公倍數(shù)的數(shù),其中1<=m,n

      輸入

      輸入三個(gè)整數(shù),依次為k、m、n。

      輸出

      從小到大輸出符合題意的所有整數(shù),兩數(shù)之間用一個(gè)空格分開(kāi)。

      樣例輸入 2 3 樣例輸出 3 4 8 9 10 14 15 提示 難點(diǎn)在于輸出格式的控制:空格在數(shù)的中間,學(xué)會(huì)用循環(huán)時(shí)邊界情況的特殊處理。

      解答:

      #include int main(){ int k,m,n,i,a;scanf(“%d%d%d”,&k,&m,&n);if(m>=n)

      a=n;else

      a=m;printf(“%d”,a);for(i=a+1;i<=k;i++)

      if(i%m==0||i%n==0)

      {

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

      printf(“");

      else

      printf(” %d“,i);

      } }

      問(wèn)題 3: A+B Problem 題目描述

      計(jì)算a+b,0<=a,b<1000。

      輸入

      輸入有多對(duì)整數(shù)a和b組成,每對(duì)a和b占一行,a,b用空格分開(kāi)。

      輸出

      每行輸出一個(gè)a+b的值,順序與輸入對(duì)應(yīng)。

      樣例輸入 2 10 20 樣例輸出 3 30 提示

      OJ系統(tǒng)上測(cè)試輸入結(jié)束符為EOF(End Of File),其值為-1。用scanf()把文件所有內(nèi)容讀完后,會(huì)讀到EOF,所以可以用來(lái)判斷輸入是否完成,測(cè)試時(shí)可以用Ctrl+Z產(chǎn)生EOF。本題解法參看FAQ。

      解答:

      #include int main(){ int a,b;for(;scanf(”%d%d“,&a,&b)!=EOF;)

      printf(”%dn“,a+b);} 問(wèn)題 4: A+B Problem(II): Input/Output Pratice 題目描述

      計(jì)算a+b,0<=a,b<1000。

      輸入

      輸入的第一行是一個(gè)整數(shù)N,后面有N對(duì)整數(shù)a和b,每對(duì)a和b占一行,a,b用空格分開(kāi)。

      輸出

      每行輸出一個(gè)a+b的和,順序與輸入對(duì)應(yīng)。

      樣例輸入 1 2 10 20 樣例輸出 3 30 提示

      N給出了測(cè)試樣例數(shù),用for循環(huán)處理方便。

      解答:

      #include int main(){ int n,a,b,i;scanf(”%d“,&n);for(i=1;i<=n;i++){

      scanf(”%d%d“,&a,&b);

      printf(”%dn“,a+b);} } 問(wèn)題 5: A+B Problem(III): Input/Output Pratice 題目描述

      計(jì)算a+b,0<=a,b<1000。

      輸入

      輸入有多對(duì)整數(shù)a和b組成,每對(duì)a和b占一行,a,b用空格分開(kāi)。當(dāng)測(cè)試樣為0 0時(shí)表示輸入結(jié)束,0 0不參與運(yùn)算。

      輸出

      每行輸出一個(gè)a+b的值,順序與輸入對(duì)應(yīng)。

      樣例輸入 2 10 20 0 0 樣例輸出 30 提示

      練習(xí)break的使用。

      解答:

      #include int main(){ int a,b;for(;scanf(”%d%d“,&a,&b);){

      if(a==0&&b==0)

      break;

      printf(”%dn“,a+b);} } 問(wèn)題 6: A+B Problem(IV): Input/Output Pratice 題目描述

      計(jì)算a+b,0<=a,b<1000。

      輸入

      輸入有多對(duì)整數(shù)a和b組成,每對(duì)a和b占一行,a,b用空格分開(kāi)。

      輸出

      每行輸出一個(gè)a+b的值,順序與輸入對(duì)應(yīng)。每個(gè)格式樣例之間用一個(gè)空行分隔開(kāi)。

      樣例輸入 2 10 20 15 35 樣例輸出 30 50 提示

      由于輸出的和比空行多一個(gè),所以全部計(jì)算放在一個(gè)循環(huán)里是不行的,必須要特殊處理開(kāi)頭或者結(jié)尾。

      解答:

      #include int main(){ int i,a,b;i=1;scanf(”%d%d“,&a,&b);printf(”%dn“,a+b);i++;for(;scanf(”%d%d“,&a,&b)!=-1;)

      printf(”n%dn“,a+b);} 問(wèn)題 7: n個(gè)數(shù)的最大值和最小值

      問(wèn)題描述

      找出n個(gè)數(shù)中最大的數(shù)和最小的數(shù),并將它們的值輸出出來(lái)。

      輸入

      輸入為n+1個(gè)整數(shù),都在int類型范圍內(nèi)。這些數(shù)可能用若干空格或者換行符分隔開(kāi)。輸入的第1個(gè)數(shù)為n,表示后續(xù)有n個(gè)數(shù)輸入。從輸入的第2個(gè)數(shù)開(kāi)始,求出直到第n+1個(gè)數(shù)中最大的數(shù)和最小的數(shù)。輸出

      輸出為兩行,格式見(jiàn)sample。

      樣例輸入 0 1-1 樣例輸出

      The maximum number is 1.The minimum number is-1.提示

      分隔符是空格還是回車都是空白符,對(duì)scanf(”%d“)來(lái)說(shuō)沒(méi)有區(qū)別;先讀入n,然后用for循環(huán)就很容易控制讀入n個(gè)數(shù)的過(guò)程。

      解答:

      #include int main(){ int a,n,i,min,max;scanf(”%d“,&n);scanf(”%d“,&a);min=a;max=a;for(i=1;i

      scanf(”%d“,&a);

      if(a>max)

      max=a;

      if(a

      min=a;} printf(”The maximum number is %d.n“,max);printf(”The minimum number is %d.“,min);}

      問(wèn)題 8: 成績(jī)的等級(jí)

      題目描述 把百分制的考試成績(jī)轉(zhuǎn)換成五級(jí)制的成績(jī): 90~100:Excellent 80~89:Good 70~79:Average 60~69:Pass 0~59:Failing 不在0~100之間的輸入是非法數(shù)據(jù),輸出“Error”。

      輸入

      輸入多行,每行一個(gè)整數(shù)。

      輸出

      輸入所對(duì)應(yīng)的成績(jī)等級(jí)。

      樣例輸入

      -1 81 92 35 68 72 100 樣例輸出

      Error Good Excellent Failing Pass Average Excellent 提示

      用switch語(yǔ)句解決這個(gè)問(wèn)題比較方便。

      解答:

      #include int main(){ int a;for(;scanf(”%d“,&a)!=-1;)

      if(a<0||a>100)

      printf(”Errorn“);

      else

      {

      switch(a/10)

      {

      case 0:

      case 1:

      case 2:

      case 3:

      case 4:

      case 5:printf(”Failingn“);break;

      case 6:printf(”Passn“);break;

      case 7:printf(”Averagen“);break;

      case 8:printf(”Goodn“);break;

      case 9:

      case 10:printf(”Excellentn“);break;

      }

      } } 問(wèn)題 9: 只有一個(gè)二元運(yùn)算符的表達(dá)式運(yùn)算 題目描述

      編程序讀入并計(jì)算只有一個(gè)二元運(yùn)算符的表達(dá)式的值。用到的二元運(yùn)算符有:“+”、“-”、“*”、“/”、“%”,與C語(yǔ)言的語(yǔ)法一致。

      輸入

      每行輸入一個(gè)表達(dá)式,格式為:二個(gè)整型的操作數(shù)a和b,中間用一個(gè)符號(hào)分開(kāi),這個(gè)符號(hào)就是運(yùn)算符。測(cè)試樣例不存在除數(shù)為0的情況。輸入以a和b為0,且用一個(gè)空格分開(kāi)結(jié)束。輸出

      每行對(duì)應(yīng)輸入的運(yùn)算符為“+”、“-”、“*”、“/”、“%”,則計(jì)算a+b、a-b、a*b、a/b、a%b的值;否則輸出“invalid op”。

      樣例輸入

      33+5 8*9 2.2 1-6 17/3 9%3 0 0 樣例輸出

      invalid op-5 5 0 提示

      教材上有非常相似的例題可以參考。#include #include void main(){ int i,a,b;char c;for(i=0;i<=100;i++){for(;scanf(”%d%c%d“,&a,&c,&b)!=EOF;)

      if(a==0&&c==' '&&b==0)

      goto loop;

      else

      switch(c){ case'+':

      printf(”%dn“,a+b);

      break;case'-':

      printf(”%dn“,a-b);

      break;case'*':

      printf(”%dn“,a*b);

      break;case'/':

      printf(”%dn“,a/b);

      break;case'%':

      printf(”%dn“,a%b);

      break;default:

      printf(”invalid opn“);

      } } loop: i=101;} 問(wèn)題 10: 求100以內(nèi)的素?cái)?shù)

      題目描述

      素?cái)?shù)是只能被1和自身整除的正整數(shù),根據(jù)數(shù)學(xué)定義1不是素?cái)?shù)。素?cái)?shù)也叫質(zhì)數(shù)。

      輸入

      輸入為兩個(gè)整數(shù)m和n,滿足0<=m<=n<=100。

      輸出

      從大到小輸出m~n之間的所有素?cái)?shù),一個(gè)素?cái)?shù)一行。如果m~n之間沒(méi)有素?cái)?shù),則不輸出任何數(shù)。

      輸出的所有數(shù)在兩行“=====”之間。

      樣例輸入 12 樣例輸出

      ===== 11 7 5 3 2 ===== 提示

      利用素?cái)?shù)的數(shù)學(xué)規(guī)律可以很容易的解出此題,題目給出的數(shù)據(jù)范圍是關(guān)鍵。

      解答:

      #include int main(){ int a,b,i,q,j;scanf(”%d%d“,&a,&b);printf(”=====n“);for(j=b;j>=a;j--){

      q=0;

      for(i=2;i

      {

      if(j%i!=0)

      q++;

      }

      if(q==j-2)

      printf(”%dn“,j);} printf(”=====“);} 問(wèn)題 11: 攝氏——華氏溫度轉(zhuǎn)換表

      題目描述

      已知華氏溫度F,轉(zhuǎn)換為攝氏溫度C的公式為C=(F-32)*5/9。

      輸出給定范圍(從low到high)和步長(zhǎng)(step)的攝氏——華氏溫度轉(zhuǎn)換表

      輸入

      第1行若為“C->F”表示輸出:攝氏——華氏溫度轉(zhuǎn)換表,若為“F->C”表示輸出:華氏——攝氏溫度轉(zhuǎn)換表。

      第2、3行為兩個(gè)整數(shù):high和low,其值在-100到200之間。第4行為step,step精確到小數(shù)點(diǎn)后1位。

      輸出

      輸出第一行為C和F,分別表示攝氏和華氏,與小數(shù)點(diǎn)對(duì)齊。若輸出攝氏——華氏溫度轉(zhuǎn)換表,則C在前、F在后;反之,則輸出華氏——攝氏溫度轉(zhuǎn)換表。

      從輸出的第2行開(kāi)始為從溫度low到溫度high(包括low和high)的轉(zhuǎn)換表,溫度輸出精確到小數(shù)點(diǎn)后1位,表格被“->”分為兩個(gè)寬度相同的部分,其它的測(cè)試樣例也不會(huì)給出超出寬度的數(shù)據(jù),格式詳見(jiàn)sample。

      樣例輸入

      C->F-10 40 2.5 樣例輸出

      C-> F-10.0-> 14.0-7.5-> 18.5-5.0-> 23.0-2.5-> 27.5 0.0-> 32.0 2.5-> 36.5 5.0-> 41.0 7.5-> 45.5 10.0-> 50.0 12.5-> 54.5 15.0-> 59.0 17.5-> 63.5 20.0-> 68.0 22.5-> 72.5 25.0-> 77.0 27.5-> 81.5 30.0-> 86.0 32.5-> 90.5 35.0-> 95.0 37.5-> 99.5 40.0-> 104.0 提示

      輸出格式可以通過(guò)sample分析出來(lái),因?yàn)閮蓹诘目倢挾仁枪潭ǖ?。一個(gè)隱藏的陷阱是step是浮點(diǎn)數(shù),某些浮點(diǎn)數(shù)是無(wú)法精確存儲(chǔ)的,因此經(jīng)過(guò)一定量的計(jì)算后這個(gè)誤差會(huì)影響到浮點(diǎn)數(shù)的相等性判斷,需要加上精度控制。

      解答:

      #include int main(){

      double low,high;

      double step,c,f;

      char ch1,ch2;

      scanf(”%c->%c“,&ch1,&ch2);

      if(ch1=='C'&&ch2=='F')

      {

      scanf(”%lf%lf%lf“,&low,&high,&step);

      f=(double)9/5*low+32;

      if(low==-100||f<=-100)

      {

      printf(”

      C->

      F“);

      while(low<=high+0.01)

      {

      f=low*9.0/5.0+32;

      printf(”n%6.1lf-> %6.1lf“,low,f);

      low+=step;

      }

      return 0;

      }

      printf(”

      C->

      F“);

      while(low<=high+0.01)

      {

      f=low*9.0/5.0+32;

      printf(”n%5.1lf-> %5.1lf“,low,f);

      low+=step;

      }

      return 0;

      }

      else if(ch1=='F'&&ch2=='C')

      {

      scanf(”%lf%lf%lf“,&low,&high,&step);

      c=(low-32)*((double)5/9);

      if(low==-100||c<=-100)

      {

      printf(”

      F->

      C“);

      while(low<=high+0.01)

      {

      c=(low-32)*5/9.0;

      printf(”n%6.1lf-> %6.1lf“,low,c);

      low+=step;

      }

      return 0;

      }

      printf(”

      F->

      C“);

      while(low<=high+0.01)

      {

      c=(low-32)*5/9.0;

      printf(”n%5.1lf-> %5.1lf“,low,c);

      low+=step;

      }

      return 0;

      } } 問(wèn)題 12: 1!+2!+…+k!=?

      題目描述

      求1!+2!+…+k!=?,并判斷是否溢出。

      輸入

      輸入為一個(gè)正整數(shù)k。

      輸出

      若1!+2!+…+k!的值溢出unsigned(無(wú)符號(hào)整型)的范圍輸出“overflow”,否則輸出1!+2!+…+k!的結(jié)果。

      樣例輸入 樣例輸出

      153 提示

      如果一個(gè)值溢出某個(gè)變量的數(shù)據(jù)類型存儲(chǔ)范圍,但仍然存入該變量,那么存入該變量中的值實(shí)際上是什么?

      解答: #include int main(){

      int i,j;

      unsigned int s,b,a;s=0;

      scanf(”%d“,&j);

      b=1;

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

      {

      a=b;

      b=b*i;

      if((double)b/a

      { printf(”overflown“);

      return 0;

      }

      s=s+b;

      }

      printf(”%un“,s);

      return 0;} 問(wèn)題 13: 輸出整數(shù)的最低兩位

      題目描述

      把一個(gè)整數(shù)的最低兩位打印出來(lái),不輸出整數(shù)的符號(hào)。

      輸入

      輸入為一個(gè)整數(shù)n,不會(huì)超出int類型的數(shù)據(jù)范圍。

      輸出

      輸出n的最低兩位數(shù)字。但是,輸入的數(shù)字本身不足兩位時(shí),不應(yīng)當(dāng)補(bǔ)0。如,輸入為“1”,則輸出為“1”。

      樣例輸入

      -102 樣例輸出

      02 提示

      printf函數(shù)可以完成補(bǔ)0的操作。

      解答:

      #include int main(){ int a,b,c;scanf(”%d“,&a);if(a<0){

      c=-a;

      if(c<100)

      printf(”%d“,c);

      else

      {

      b=c-100*(c/100);

      printf(”%.2d“,b);

      } } else {

      if(a<100)

      printf(”%d“,a);

      else

      {

      b=a-100*(a/100);

      printf(”%.2d“,b);

      } } } 問(wèn)題 14: 產(chǎn)生等差序列之一

      題目描述

      根據(jù)給出的初始數(shù)、公差和序列長(zhǎng)度求等差序列。

      輸入

      輸入為一行,格式見(jiàn)sample。其中,start為初始數(shù),step為公差,times為序列長(zhǎng)度。滿足,times>0,step不為0。

      輸出 把這個(gè)等差序列輸出在一行里,序列兩數(shù)之間用一個(gè)空格分隔。

      樣例輸入

      start = 1, step = 2, times = 100 樣例輸出 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 155 157 159 161 163 165 167 169 171 173 175 177 179 181 183 185 187 189 191 193 195 197 199 解答:

      #include int main(){ int st,s,t,i;scanf(”start = %d, step = %d, times = %d“,&st,&s,&t);printf(”%d“,st);for(i=1;i

      st=st+s;

      printf(” %d“,st);

      } } 問(wèn)題 15: 產(chǎn)生等差序列之二

      題目描述

      根據(jù)給出的初始數(shù)、公差和終止條件求等差序列。

      輸入

      輸入為一行,格式見(jiàn)sample。其中,start為初始數(shù),step為公差,end為終止條件。滿足,step不為0,并且start和end的大小關(guān)系與step的方向一致。end不一定是序列的最后一個(gè)數(shù)。

      輸出 把這個(gè)等差序列輸出在一行里,序列兩數(shù)之間用一個(gè)空格分隔。

      樣例輸入

      start = 1, step = 2, end = 200 樣例輸出 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 155 157 159 161 163 165 167 169 171 173 175 177 179 181 183 185 187 189 191 193 195 197 199 提示

      根據(jù)start和step的大小關(guān)系,判斷序列終止的條件可能不同。

      解答:

      #include int main(){ int st,s,end;scanf(”start = %d, step = %d, end = %d“,&st,&s,&end);printf(”%d“,st);if(s>0){

      for(st=st+s;st<=end;st=st+s)

      printf(” %d“,st);

      } else {

      for(st=st+s;st>=end;st=st+s)

      printf(” %d“,st);} }

      問(wèn)題 16: 輾轉(zhuǎn)相除法

      題目描述

      輾轉(zhuǎn)相除法,也稱歐幾里得算法,是求最大公約數(shù)的算法。輾轉(zhuǎn)相除法首次出現(xiàn)于歐幾里得的《幾何原本》(第VII卷,命題i和ii)中,而在中國(guó)則可以追溯至東漢出現(xiàn)的《九章算術(shù)》。兩個(gè)整數(shù)的最大公約數(shù)(亦稱公約數(shù))是能夠同時(shí)整除它們的最大的正整數(shù)。輾轉(zhuǎn)相除法基于如下原理:兩個(gè)整數(shù)的最大公約數(shù)等于其中較小的數(shù)和兩數(shù)的差的最大公約數(shù)。例如,252和105的最大公約數(shù)是21(252 = 21 × 12;105 = 21 × 5);因?yàn)?52 ? 105 = 147,所以147和105的最大公約數(shù)也是21。在這個(gè)過(guò)程中,較大的數(shù)縮小了,所以繼續(xù)進(jìn)行同樣的計(jì)算可以不斷縮小這兩個(gè)數(shù)直至其中一個(gè)變成零。這時(shí),所剩下的還沒(méi)有變成零的數(shù)就是兩數(shù)的最大公約數(shù)。例如,計(jì)算a = 1071和b = 462的最大公約數(shù)的過(guò)程如下:從1071中不斷減去462直到小于462(可以減2次,即商q0 = 2),余數(shù)是147:

      1071 = 2 × 462 + 147.然后從462中不斷減去147直到小于147(可以減3次,即q1 = 3),余數(shù)是21:

      462 = 3 × 147 + 21.再?gòu)?47中不斷減去21直到小于21(可以減7次,即q2 = 7),沒(méi)有余數(shù):

      = 7 × 21 + 0.此時(shí),余數(shù)是0,所以1071和462的最大公約數(shù)是21。

      輸入

      輸入為多行,每行有一對(duì)非負(fù)整數(shù)a,b,且a*b不會(huì)超出int類型的數(shù)據(jù)范圍。輸入至EOF結(jié)束。

      輸出

      每行輸出一對(duì)a,b的最大公約數(shù)和最小公倍數(shù),順序與輸入對(duì)應(yīng)。

      樣例輸入 1 2 3 2 2 3 2 4 6 7 5 12 6 18 9 24 36 樣例輸出 1 1 6 2 2 1 6 2 12 1 35 6 12 9 18 12 72 提示

      按照題目描述所給的算法解題,注意以下幾點(diǎn):輾轉(zhuǎn)相除法對(duì)兩個(gè)數(shù)的大小關(guān)系有要求,根據(jù)倍數(shù)和約數(shù)的數(shù)學(xué)定義,一個(gè)非0數(shù)和0的約數(shù)是多少?輾轉(zhuǎn)相除法的計(jì)算過(guò)程是符合這種定義的。

      解答:

      #include int main(){ int a,b,i,c;for(;scanf(”%d%d“,&a,&b)!=-1;){

      c=a*b;

      if(a==0&&b!=0)

      printf(”%d %dn“,b,a);

      else if(a!=0&&b==0)

      printf(”%d %dn“,a,b);

      else

      {

      while(a!=b)

      {

      if(a>b)

      a=a-b;

      if(a

      b=b-a;

      }

      printf(”%d %dn“,a,c/a);

      } } }

      問(wèn)題 17: Sum Problem 題目描述

      計(jì)算若干整數(shù)的和,這些整數(shù)都是小于1000的非負(fù)整數(shù)。

      輸入 輸入為多行,每行為一組測(cè)試樣例。每個(gè)測(cè)試樣例以一個(gè)整數(shù)N開(kāi)始,后面接著是N個(gè)整數(shù)。

      輸出

      每組測(cè)試樣例對(duì)應(yīng)一行輸出,輸出所給的N個(gè)整數(shù)之和,順序與輸入對(duì)應(yīng)。

      樣例輸入 1 2 3 5 10 15 20 30 50 樣例輸出 125 提示

      用雙重循環(huán)解決這個(gè)問(wèn)題,外層循環(huán)控制用例的輸入,內(nèi)層循環(huán)控制讀取N個(gè)整數(shù)。

      解答:

      #include int main(){ int n,a,i,s;for(;scanf(”%d“,&n)!=-1;){

      s=0;

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

      {

      scanf(”%d“,&a);

      s=s+a;

      }

      printf(”%dn“,s);} } 問(wèn)題 18: Sum Problem(II): Input/Output Pratice 題目描述 計(jì)算若干整數(shù)的和,這些整數(shù)都是小于1000的非負(fù)整數(shù)。

      輸入

      輸入的第一行是一個(gè)整數(shù)M,后面有M個(gè)測(cè)試樣例。每個(gè)測(cè)試樣例以一個(gè)整數(shù)N開(kāi)始,后面接著是N個(gè)整數(shù)。

      輸出

      每組測(cè)試樣例對(duì)應(yīng)一行輸出,為所給的N個(gè)整數(shù)之和,順序與輸入對(duì)應(yīng)。

      樣例輸入 3 1 2 3 5 10 15 20 30 50 樣例輸出 125 提示

      用雙重循環(huán)解決這個(gè)問(wèn)題,外層循環(huán)控制用例的輸入,內(nèi)層循環(huán)控制讀取N個(gè)整數(shù)。

      解答:

      #include int main(){ int m,n,a,i,j,s;scanf(”%d“,&m);for(j=1;j<=m;j++){

      scanf(”%d“,&n);{

      s=0;

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

      {

      scanf(”%d“,&a);

      s=s+a;

      }

      } } } printf(”%dn“,s);問(wèn)題 19: Sum Problem(III): Input/Output

      Pratice 題目描述

      計(jì)算若干整數(shù)的和,這些整數(shù)都是小于1000的非負(fù)整數(shù)。

      輸入

      輸入為多行,每行為一組測(cè)試樣例。每個(gè)測(cè)試樣例以一個(gè)整數(shù)N開(kāi)始,后面接著是N個(gè)整數(shù)。當(dāng)輸入的N為0時(shí)表示輸入結(jié)束。

      輸出

      每組測(cè)試樣例對(duì)應(yīng)一行輸出,為所給的N個(gè)整數(shù)之和,順序與輸入對(duì)應(yīng)。

      樣例輸入 1 2 3 5 10 15 20 30 50 0 樣例輸出 125 提示

      用雙重循環(huán)解決這個(gè)問(wèn)題,外層循環(huán)控制用例的輸入,內(nèi)層循環(huán)控制讀取N個(gè)整數(shù)。

      解答:

      #include int main(){ int n,a,i,s;for(;scanf(”%d“,&n);)

      {

      if(n==0)

      break;

      else

      {

      s=0;

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

      {

      scanf(”%d“,&a);

      s=s+a;

      }

      printf(”%dn“,s);

      } } } 問(wèn)題 20: Sum Problem(IV): Input/Output Pratice 題目描述

      計(jì)算若干整數(shù)的和,這些整數(shù)都是小于1000的非負(fù)整數(shù)。

      輸入

      輸入的第一行是一個(gè)整數(shù)M,后面有M個(gè)測(cè)試用例。每個(gè)測(cè)試用例以一個(gè)整數(shù)N開(kāi)始,后面接著是N個(gè)整數(shù)。

      輸出

      每組測(cè)試用例對(duì)應(yīng)一行輸出,為所給的N個(gè)整數(shù)之和,順序與輸入對(duì)應(yīng)。兩樣例的輸出之間用一個(gè)空行分隔開(kāi)。

      樣例輸入 3 1 2 3 5 10 15 20 30 50 樣例輸出 6 125 提示

      用雙重循環(huán)解決這個(gè)問(wèn)題,外層循環(huán)控制用例的輸入,內(nèi)層循環(huán)控制讀取N個(gè)整數(shù)。

      解答:

      #include int main(){ int m,n,a,i,j,s;scanf(”%d“,&m);

      scanf(”%d“,&n);{

      s=0;

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

      {

      scanf(”%d“,&a);

      s=s+a;

      }

      printf(”%dn“,s);} for(j=2;j<=m;j++){

      scanf(”%d“,&n);{

      s=0;

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

      {

      scanf(”%d“,&a);

      s=s+a;

      }

      printf(”n%dn“,s);} } }

      問(wèn)題 21: 序數(shù)的后綴

      題目描述

      英文中經(jīng)常用阿拉伯?dāng)?shù)字加上字母后綴表示“第幾“這樣的序數(shù)詞。比如,”第10次會(huì)面“通常寫成”10th meeting“。

      后綴來(lái)源于英文的序數(shù)詞:第1的英文是first,寫成”1st‘;第2的英文是second,寫成“2nd”;第3的英文是third,寫成“3rd”,第4是fourth,寫成“4th”,以后的數(shù)字都加“th”。在這里規(guī)定,所有后綴為1的數(shù)字都寫成“st”結(jié)尾,后綴為2的數(shù)字寫成“nd”結(jié)尾,后綴為3的英文寫成“rd”結(jié)尾,其他的寫成“th”結(jié)尾。

      輸入

      輸入為多個(gè)很小的正整數(shù),當(dāng)輸入為0時(shí)表示輸入結(jié)束。

      輸出

      輸出為多行,每行對(duì)應(yīng)一個(gè)輸入數(shù)字的序數(shù)表示。

      樣例輸入 2 3 4 5 10 11 12 13 14 0

      樣例輸出

      1st 2nd 3rd 4th 5th 10th 11st 12nd 13rd 14th

      提示

      用if語(yǔ)句似乎更容易些。

      解答:

      #include int main(){ int a;for(;scanf(”%d“,&a);){

      if(a==0)

      break;

      else

      {

      if(a%10==1)

      printf(”%dstn“,a);

      if(a%10==2)

      printf(”%dndn“,a);

      if(a%10==3)

      printf(”%drdn“,a);

      }

      }

      } if(a%10==4||a%10==5||a%10==6||a%10==7||a%10==8||a%10==9||a%10==0)printf(”%dthn“,a);問(wèn)題 22: Sequence Problem : Array Pratice 題目描述

      整數(shù)序列是一串按特定順序排列的整數(shù),整數(shù)序列的長(zhǎng)度是序列中整數(shù)的個(gè)數(shù),不可定義長(zhǎng)度為負(fù)數(shù)的整數(shù)序列。

      兩整數(shù)序列A、B的和定義為一個(gè)新的整數(shù)序列C,序列C的長(zhǎng)度是A、B兩者中較長(zhǎng)的一個(gè),序列C的每個(gè)位置上的整數(shù)都是A、B對(duì)應(yīng)位置之和。若序列A、B不等長(zhǎng),不妨假設(shè)A比B整數(shù)多,那么序列C中多出B的那部分整數(shù)視作A的對(duì)應(yīng)位置上的整數(shù)與0相加。你的任務(wù)是計(jì)算符合某些要求的整數(shù)序列的和,這些序列中的整數(shù)都是小于1000的非負(fù)整數(shù)。

      輸入

      輸入為多行,直到文件末尾結(jié)束。每行第一個(gè)整數(shù)為N(N<=1000),后接一個(gè)長(zhǎng)度為N的整數(shù)序列。

      輸出

      對(duì)輸入的整數(shù)序列兩兩相加:第1行和第2行相加、第3行和第4行相加……按順序輸出結(jié)果:每行輸出一個(gè)整數(shù)序列,每?jī)蓚€(gè)整數(shù)之間用一個(gè)空格分隔。若序列數(shù)目不為偶數(shù),則視作補(bǔ)一個(gè)長(zhǎng)度為0的整數(shù)序列相加。

      值得注意的是一個(gè)長(zhǎng)度為0的整數(shù)序列也應(yīng)該有輸出,即使沒(méi)有整數(shù)輸出,也應(yīng)該占有一行,因?yàn)椤懊啃休敵鲆粋€(gè)整數(shù)序列”。

      樣例輸入 1 2 3 5 10 15 20 30 50 4 100 200 300 400 樣例輸出 11 17 23 30 50 100 200 300 400 提示

      這里最少要用到一個(gè)數(shù)組來(lái)存數(shù)整數(shù)序列或整數(shù)序列的和。

      解答:

      #include int main(){ int a[1000]={0},b[1000]={0};int m,i,j=0,p,k;while(scanf(”%d“,&m)!=EOF){

      j++;

      if(j%2!=0)

      {

      for(i=0;i

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

      }

      else

      {

      for(p=0;p

      scanf(”%d“,&b[p]);

      }

      if(j%2!=1)

      {

      if(i<=p)

      {

      for(k=0;k

      {

      if(k==0)

      {

      printf(”%d“,a[k]+b[k]);

      a[k]=0;

      b[k]=0;

      }

      else

      {

      printf(” %d“,a[k]+b[k]);

      a[k]=0;

      b[k]=0;

      }

      }

      printf(”n“);

      }

      else

      {

      for(k=0;k

      {

      if(k==0)

      {

      printf(”%d“,a[k]+b[k]);

      a[k]=0;

      b[k]=0;

      }

      else

      {

      printf(” %d“,a[k]+b[k]);

      a[k]=0;

      b[k]=0;

      }

      }

      printf(”n“);

      }

      } } if(m!=0&&j%2==1)

      {

      for(i=0;i

      {

      if(i==0)

      printf(”%d“,a[i]);

      else

      printf(” %d“,a[i]);

      }

      printf(”n“);

      }

      if(m==0&&j%2==1)

      printf(”n“);} 問(wèn)題 23: Sequence Problem(II): Array Pratice 題目描述

      整數(shù)序列是一串按特定順序排列的整數(shù),整數(shù)序列的長(zhǎng)度是序列中整數(shù)的個(gè)數(shù),不可定義長(zhǎng)度為負(fù)數(shù)的整數(shù)序列。

      兩整數(shù)序列A、B的和定義為一個(gè)新的整數(shù)序列C,序列C的長(zhǎng)度是A、B兩者中較長(zhǎng)的一個(gè),序列C的每個(gè)位置上的整數(shù)都是A、B對(duì)應(yīng)位置之和。若序列A、B不等長(zhǎng),不妨假設(shè)A比B整數(shù)多,那么序列C中多出B的那部分整數(shù)視作A的對(duì)應(yīng)位置上的整數(shù)與0相加。你的任務(wù)是計(jì)算符合某些要求的整數(shù)序列的和,這些序列中的整數(shù)都是小于1000的非負(fù)整數(shù)。

      輸入 輸入的第一行為一個(gè)整數(shù)M(M>0),后面有M行輸入。每行輸入為不超過(guò)1000個(gè)整數(shù)的整數(shù)序列,每個(gè)整數(shù)序列的輸入均以0結(jié)束。

      輸出

      對(duì)輸入的整數(shù)序列兩兩相加:第1行和第2行相加、第3行和第4行相加……按順序輸出結(jié)果:每行輸出一個(gè)整數(shù)序列,每?jī)蓚€(gè)整數(shù)之間用一個(gè)空格分隔。若序列數(shù)目不為偶數(shù),則視作補(bǔ)一個(gè)長(zhǎng)度為0的整數(shù)序列相加。

      值得注意的是一個(gè)長(zhǎng)度為0的整數(shù)序列也應(yīng)該有輸出,即使沒(méi)有整數(shù)輸出,也應(yīng)該占有一行,因?yàn)椤懊啃休敵鲆粋€(gè)整數(shù)序列”。

      樣例輸入 1 2 3 0 10 15 20 30 50 0 100 200 300 400 0 樣例輸出 17 23 30 50 100 200 300 400 提示

      這里最少要用到一個(gè)數(shù)組來(lái)存數(shù)整數(shù)序列或整數(shù)序列的和。一個(gè)省事的做法是把數(shù)組定義的稍微大一點(diǎn),因?yàn)橛袝r(shí)你的程序可能會(huì)邊界處理的不是太好。

      解答:

      #include int main(){

      int i,j,x,y,q;y=0;

      scanf(”%d“,&x);

      if(x%2==0)

      {

      for(q=0;q

      {

      int a[2000]={0},b[2000]={0},c[2000]={0};

      for(j=0;scanf(”%d“,&a[j]);j++)

      {

      if(a[j]==0)

      break;

      }

      for(i=0;scanf(”%d“,&b[i]);i++)

      {

      if(b[i]==0)

      break;

      }

      if(i>j)

      j=i;

      i=0;

      while(i

      {

      if(i==0)

      printf(”%d“,a[0]+b[0]);

      else

      printf(” %d“,a[i]+b[i]);

      i++;

      }

      printf(”n“);

      } } else { for(q=0;q<(x+1)/2;q++)

      {

      int a[2000]={0},b[2000]={0},c[2000]={0};

      j=0;

      y=y+2;

      if(x+2-y>1)

      {

      for(j;scanf(”%d“,&a[j]);j++)

      {

      if(a[j]==0)

      break;

      }

      for(i=0;scanf(”%d“,&b[i]);i++)

      {

      if(b[i]==0)

      break;

      }

      if(i>j)

      j=i;

      i=0;

      while(i

      {

      if(i==0)

      printf(”%d“,a[0]+b[0]);

      else

      printf(” %d“,a[i]+b[i]);

      i++;

      }

      printf(”n“);

      }

      }

      }

      } else { for(j=0;scanf(”%d“,&a[j]);j++){ if(a[j]==0)

      break;} i=0;while(i

      printf(”%d“,a[0]);else

      printf(” %d“,a[i]);i++;}

      printf(”n“);}

      問(wèn)題 24: Sequence Problem(III): Array Pratice 題目描述

      整數(shù)序列是一串按特定順序排列的整數(shù),整數(shù)序列的長(zhǎng)度是序列中整數(shù)的個(gè)數(shù),不可定義長(zhǎng)度為負(fù)數(shù)的整數(shù)序列。

      兩整數(shù)序列A、B的和定義為一個(gè)新的整數(shù)序列C,序列C的長(zhǎng)度是A、B兩者中較長(zhǎng)的一個(gè),序列C的每個(gè)位置上的整數(shù)都是A、B對(duì)應(yīng)位置之和。若序列A、B不等長(zhǎng),不妨假設(shè)A比B整數(shù)多,那么序列C中多出B的那部分整數(shù)視作A的對(duì)應(yīng)位置上的整數(shù)與0相加。你的任務(wù)是計(jì)算符合某些要求的整數(shù)序列的和,這些序列中的整數(shù)都是小于1000的非負(fù)整數(shù)。

      輸入

      輸入的第一行為一個(gè)整數(shù)M(M>0),后面有M行輸入。每行第一個(gè)整數(shù)為N(N<=1000),后接一個(gè)長(zhǎng)度為N的整數(shù)序列。

      輸出

      對(duì)輸入的整數(shù)序列兩兩相加:第1行和第2行相加、第2行和第3行相加……按順序輸出結(jié)果:每行輸出一個(gè)整數(shù)序列,每?jī)蓚€(gè)整數(shù)之間用一個(gè)空格分隔。若最后序列不足兩個(gè),則視作補(bǔ)一個(gè)長(zhǎng)度為0的整數(shù)序列相加。

      值得注意的是一個(gè)長(zhǎng)度為0的整數(shù)序列也應(yīng)該有輸出,即使沒(méi)有整數(shù)輸出,也應(yīng)該占有一行,因?yàn)椤懊啃休敵鲆粋€(gè)整數(shù)序列”。樣例輸入 3 1 2 3 5 10 15 20 30 50 4 100 200 300 400 樣例輸出 17 23 30 50 110 215 320 430 50 100 200 300 400 提示

      這里最少要用到兩個(gè)數(shù)組來(lái)存儲(chǔ)整數(shù)序列。

      解答:

      #include int main(){ int i,j,y,p,q,x,a[1001]={0},b[1001]={0};scanf(”%d“,&q);for(i=1;i<=q;i++){

      if(i%2!=0)

      {

      scanf(”%d“,&y);

      for(j=0;j

      scanf(”%d“,&a[j]);

      if(i!=1)

      {

      if(y>p)

      x=y;

      else

      x=p;

      if(x==0)

      printf(”n“);

      else

      {

      j=0;

      while(j

      {

      if(j==0)

      printf(”%d“,a[j]+b[j]);

      else

      printf(” %d“,a[j]+b[j]);

      b[j]=0;

      j++;

      }

      printf(”n“);

      }

      }

      if(q==1&&q!=1)

      {

      if(y==0)

      printf(”n“);

      else

      {

      for(j=0;j

      {

      if(j==0)

      printf(”%d“,a[j]);

      else

      printf(” %d“,a[j]);

      }

      }

      }

      if(i==q)

      {

      for(j=0;j

      {

      if(j==0)

      printf(”%d“,a[j]);

      else

      printf(” %d“,a[j]);

      }

      printf(”n“);

      }

      }

      else

      {

      scanf(”%d“,&p);

      for(j=0;j

      scanf(”%d“,&b[j]);

      if(y>p)

      x=y;

      else

      x=p;

      if(x==0)

      printf(”n“);

      else

      {

      j=0;

      while(j

      {

      if(j==0)

      printf(”%d“,a[j]+b[j]);

      else

      printf(” %d“,a[j]+b[j]);

      a[j]=0;

      j++;

      }

      printf(”n“);

      }

      } } if(i==q){

      j=0;

      while(j

      {

      if(j==0)

      printf(”%d“,b[j]);

      else

      printf(” %d“,b[j]);

      j++;

      }

      printf(”n“);} } 問(wèn)題 25: Matrix Problem : Array Pratice 題目描述

      求一個(gè)m×n階矩陣A的轉(zhuǎn)置矩陣AT。矩陣A的每個(gè)元素都在int類型的范圍之內(nèi)。

      輸入

      輸入的第一行為一個(gè)整數(shù)M(M>0),后面有M組輸入數(shù)據(jù)。每組數(shù)據(jù)以兩個(gè)正整數(shù)m和n開(kāi)始,滿足0

      輸出

      輸出為多組,每組輸出A的轉(zhuǎn)置矩陣AT。矩陣的輸出為:每行兩個(gè)元素之間用一個(gè)空格分開(kāi),每行最后一個(gè)元素之后為一個(gè)換行,在下一行開(kāi)始輸出矩陣的下一行。每?jī)山M輸出之間用一個(gè)空行分隔開(kāi)。

      樣例輸入 3 3 1 2 3 4 5 6 7 8 9 樣例輸出 1 4 7 2 5 8 3 6 9 提示

      二維數(shù)組存儲(chǔ)矩陣。

      解答:

      #include int main(){ int M,m,n,i,j,k;int a[100][100];scanf(”%d“,&M);

      scanf(”%d%d“,&m,&n);for(i=0;i

      for(j=0;j

      scanf(”%d“,&a[i][j]);for(i=0;i

      for(j=0;j

      printf(”%d “,a[j][i]);

      printf(”%d“,a[m-1][i]);

      printf(”n“);} for(k=1;k

      scanf(”%d%d“,&m,&n);

      for(i=0;i

      for(j=0;j

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

      printf(”n“);

      for(i=0;i

      {

      for(j=0;j

      printf(”%d “,a[j][i]);

      printf(”%d“,a[m-1][i]);

      printf(”n“);

      } } } 問(wèn)題 26: Matrix Problem(II): Array Pratice 題目描述

      求兩個(gè)矩陣A、B的和。根據(jù)矩陣加法的定義,只有同階的矩陣才能相加??梢源_保所有運(yùn)算結(jié)果都在int類型的范圍之內(nèi)。

      輸入

      輸入數(shù)據(jù)為多個(gè)矩陣,每個(gè)矩陣以兩個(gè)正整數(shù)m和n開(kāi)始,滿足0

      輸出

      對(duì)輸入的矩陣兩兩相加:第1個(gè)和第2個(gè)相加、第3個(gè)和第4個(gè)相加……按順序輸出矩陣相加的結(jié)果:每行兩個(gè)元素之間用一個(gè)空格分開(kāi),每行最后一個(gè)元素之后為一個(gè)換行,在下一行開(kāi)始輸出矩陣的下一行。

      若輸入的矩陣不為偶數(shù)個(gè),最后剩余的矩陣不產(chǎn)生任何輸出。

      不滿足矩陣加法定義的數(shù)據(jù)輸出“Not satisfied the definition of matrix addition!” 每?jī)山M輸出之間用一個(gè)空行分隔開(kāi)。

      樣例輸入 3 1 2 3 4 5 6 7 8 9 3 3 9 8 7 6 5 4 3 2 1 3 3 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 1 0 0 0 樣例輸出 10 10 10 10 10 10 10 10

      Not satisfied the definition of matrix addition!提示

      矩陣的加法就是對(duì)應(yīng)位置上的元素相加。

      解答:

      #include int main(){ int m,n,e,f,i,j,k,x=1,y=1;

      for(i=0;;i++)

      {

      int a[200][200]={0},b[200][200]={0};

      scanf(”%d%d“,&m,&n);

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

      break;

      else

      {

      for(j=0;j

      for(k=0;k

      scanf(”%d“,&a[j][k]);

      }

      for(;scanf(”%d%d“,&e,&f)!=EOF;)

      {

      x=2;

      y=y+1;

      for(j=0;j

      for(k=0;k

      scanf(”%d“,&b[j][k]);

      break;

      }

      if(e==0&&f==0)

      break;

      if(y!=2)

      printf(”n“);

      }

      } if(x==2){ if(m!=e||n!=f){

      printf(”Not satisfied the definition of matrix addition!“);

      printf(”n“);} else { j=0;while(j

      k=0;

      while(k

      {

      if(k==0)

      printf(”%d“,a[j][k]+b[j][k]);

      else

      printf(” %d“,a[j][k]+b[j][k]);

      k++;

      }

      if(j

      printf(”n“);

      j++;} printf(”n“);} }

      問(wèn)題 27: Matrix Problem(III): Array Pratice 題目描述

      求兩個(gè)矩陣A、B的乘積C=AB。根據(jù)矩陣乘法的定義,只有A的列數(shù)和B的行數(shù)相同才能相乘。可以確保所有運(yùn)算結(jié)果都在int類型的范圍之內(nèi)。

      輸入

      輸入數(shù)據(jù)為多個(gè)矩陣(最少2個(gè)),每個(gè)矩陣以兩個(gè)正整數(shù)m和n開(kāi)始,滿足0

      輸出

      對(duì)輸入的矩陣兩兩相乘:第1個(gè)和第2個(gè)相乘、第1個(gè)和第2個(gè)相乘的結(jié)果和第3個(gè)相乘……按順序輸出矩陣相乘的結(jié)果:每行兩個(gè)元素之間用一個(gè)空格分開(kāi),每行最后一個(gè)元素之后為一個(gè)換行,在下一行開(kāi)始輸出矩陣的下一行。

      若前k個(gè)矩陣相乘的結(jié)果和第k+1個(gè)矩陣無(wú)法相乘(即不滿足矩陣乘法定義),則輸出“Not satisfied the definition of matrix multiplication!”。然后用第k+1個(gè)矩陣去和第k+2個(gè)矩陣相乘。最后一個(gè)矩陣只做乘數(shù)。

      每?jī)山M輸出之間用一個(gè)空行分隔開(kāi)。

      樣例輸入 3 1 1 1 1 1 1 3 3 1 2 3 4 5 6 7 8 9 3 1 0 0 0 0 0 樣例輸出 15 18 12 15 18 0 0 提示

      矩陣的乘法就是一行乘以一列加起來(lái)做一個(gè)元素。

      解答:

      #include int main(){

      int m,n,i,j,p,k,c,d,o,q;

      int a[100][100]={0},b[100][100]={0},e[100][100]={0};

      for(k=1;;k++)

      {

      if(k==1&&k%2==1)

      {

      scanf(”%d“,&m);

      scanf(”%d“,&n);

      }

      else if(k%2==0)

      {

      scanf(”%d“,&m);

      scanf(”%d“,&n);

      }

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

      return 0;

      else

      {

      if(k==1)

      {

      i=0;

      while(i

      {

      j=0;

      while(j

      {

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

      j++;

      }

      i++;

      }

      }

      else if((k>1)&&(k%2!=0))

      {

      for(i=0;i

      for(j=0;j

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

      }

      else

      {

      for(p=0;p

      for(q=0;q

      scanf(”%d“,&b[p][q]);

      if(j==p)

      {

      for(c=0;c

      {

      d=0;

      while(d

      {

      e[c][d]=0;

      for(o=0;o

      e[c][d]+=a[c][o]*b[o][d];

      d++;

      }

      }

      for(c=0;c

      {

      for(d=0;d

      {

      if(d==0)

      printf(”%d“,e[c][d]);

      else

      printf(” %d“,e[c][d]);

      }

      printf(”n“);

      }

      }

      else

      {

      printf(”Not satisfied the definition of matrix multiplication!n“);

      for(c=0;c

      for(d=0;d

      e[c][d]=b[c][d];

      }

      }

      }

      if(k%2==0)

      printf(”n“);

      } } 問(wèn)題 28: 十進(jìn)制整數(shù)轉(zhuǎn)二進(jìn)制

      題目描述

      給出一個(gè)十進(jìn)制的非負(fù)整數(shù)x,x<=216,把它轉(zhuǎn)換成二進(jìn)制數(shù)輸出。

      輸入

      輸入為多行,每行一個(gè)整數(shù)x,至讀入EOF結(jié)束。

      輸出

      每行輸出x對(duì)應(yīng)的二進(jìn)制數(shù)值。

      樣例輸入

      0 1 3 33 65535 樣例輸出

      0 1 11 100001 ***1 提示

      本題有多種解法:可以用循環(huán)迭代對(duì)2的除法和取余操作,不過(guò)處理的順序與輸出順序相反,需要利用數(shù)組存儲(chǔ);用取對(duì)數(shù)或從大到小減去2的整數(shù)次冪的方法計(jì)算與輸出順序是相同的;也可以用printf()把十進(jìn)制的數(shù)值處理成十六進(jìn)制,然后1位十六進(jìn)制轉(zhuǎn)4位二進(jìn)制;也可以用位運(yùn)算處理。

      解答:

      #include int main(){ int x,i,j,y;for(;scanf(”%d“,&x)!=-1;){

      if(x==0)

      printf(”%dn“,x);

      else

      {

      i=0;

      int a[100]={0};

      for(;x!=0;)

      {

      y=x%2;

      x=x/2;

      a[i]=y;

      i++;

      }

      for(j=i-1;j>=0;j--)

      printf(”%d“,a[j]);

      printf(”n“);

      } } }

      問(wèn)題 29: 魔方陣

      題目描述

      所謂N階魔方陣,是一個(gè)N*N的方陣,其元素由1到N^2組成,且方陣每行每列以及對(duì)角線的元素和相等。如三階魔方陣: 8 1 6 3 5 7 4 9 2 魔方陣的規(guī)律如下: 從1~N*N的 各個(gè)數(shù)依次如下規(guī)則存放:(1)1在第一行中間一列;

      (2)每一個(gè)數(shù)存放的行比前一個(gè)數(shù)的行數(shù)減一,列數(shù)加一(如上的三階方陣5在4的上一行,后一列);

      (3)如果上一個(gè)數(shù)在第一行,則下一個(gè)數(shù)在最后一行,列數(shù)加一;(4)如果上一個(gè)數(shù)在最后一列,則下一個(gè)數(shù)在第一列,行數(shù)減一;

      (5)如果按上述規(guī)則確定的位置已經(jīng)有數(shù),或上一個(gè)數(shù)在第一行第N列,則下一個(gè)數(shù)放在上一個(gè)數(shù)的正下方。

      輸入

      輸入包含多組數(shù)據(jù),每組為一個(gè)小于100的正奇數(shù)。

      輸出

      對(duì)于每個(gè)輸入的N,輸出N階魔方陣;兩組數(shù)據(jù)之間用一個(gè)空行分隔。方陣中每行每?jī)蓚€(gè)數(shù)之間有一個(gè)空格,行首和行末沒(méi)有多余的空格。

      樣例輸入 樣例輸出 1 6 3 5 7 4 9 2 解答:

      #include int main(){ int i,j,k,n,row=1,col,temp_row,temp_col;int sqrt[100][100]={0};scanf(”%d“,&n);col=(n+1)/2;for(i=1;i<=n*n;i++){

      sqrt[row][col]=i;

      temp_row=row;

      temp_col=col;

      if(row==1&&col==n)

      row++;

      else

      {

      row--;

      col++;

      if(row==0)

      row=n;

      if(col>n)

      col=1;

      if(sqrt[row][col]!=0)

      {

      row=temp_row+1;

      col=temp_col;

      if(row>n)

      row=1;

      }

      } } j=1;while(j<=n){ k=1;

      while(k<=n)

      {

      if(k%n==0)

      printf(”%dn“,sqrt[j][k]);

      else

      printf(”%d “,sqrt[j][k]);k++;

      }

      j++;} for(;scanf(”%d“,&n)!=-1;){ printf(”n“);int sqrt[100][100]={0};col=(n+1)/2;for(i=1;i<=n*n;i++){

      sqrt[row][col]=i;

      temp_row=row;

      temp_col=col;

      if(row==1&&col==n)

      {

      row++;

      }

      else

      {

      row--;

      col++;

      if(row==0)

      row=n;

      if(col>n)

      col=1;

      if(sqrt[row][col]!=0)

      {

      row=temp_row+1;

      col=temp_col;

      if(row>n)

      row=1;

      }

      } } j=1;while(j<=n){ k=1;

      while(k<=n)

      {

      if(k%n==0)

      printf(”%dn“,sqrt[j][k]);

      else

      printf(”%d “,sqrt[j][k]);k++;

      }

      j++;} } } 問(wèn)題 30: 兔子的繁殖問(wèn)題

      題目描述

      假設(shè)一對(duì)兔子每月能生一對(duì)小兔(一雌一雄),每對(duì)小兔出生后的下一個(gè)月是沒(méi)有繁殖能力的,至出生后的第三個(gè)月開(kāi)始又可以每月生一隊(duì)小兔,問(wèn)從一對(duì)剛出生的小兔開(kāi)始,經(jīng)過(guò)若干個(gè)月后一共有多少兔子(假設(shè)在此過(guò)程中兔子沒(méi)有死亡)?

      這個(gè)問(wèn)題是意大利數(shù)學(xué)家菲波那契(Fibonacci)在他1202年出版的《算盤全書》中提出來(lái)的,從第一對(duì)剛出生的小兔開(kāi)始每月的兔子數(shù)被乘坐菲波那契序列。

      輸入

      輸入的第一個(gè)數(shù)為n,接下來(lái)有n個(gè)數(shù)字。每個(gè)數(shù)字為一個(gè)月份m(m<=45)。

      輸出

      輸出為n行,每行為第m個(gè)月后的兔子總數(shù)。

      樣例輸入 1 2 3 4 5 10 樣例輸出 2 3 5 8 89 提示

      可以先計(jì)算出菲波那契序列并存儲(chǔ)下來(lái),然后查詢出每月兔子數(shù)。

      解答:

      #include int main(){ int a[50],b[50];int i,x,n;a[0]=1;a[1]=1;i=2;while(i<50){

      a[i]=a[i-1]+a[i-2];

      i++;}

      scanf(”%d“,&x);

      for(i=1;i<=x;i++){

      scanf(”%d“,&n);

      b[i]=a[n];} for(i=1;i<=x;i++)

      printf(”%dn“,b[i]);} 問(wèn)題 31: 簡(jiǎn)單的整數(shù)排序

      題目描述

      對(duì)給出的若干整數(shù)按從小到大排序。

      輸入 輸入的第一個(gè)數(shù)為n(n<=1000),后接n個(gè)整數(shù)。

      輸出

      按從小到大的順序輸出這些整數(shù),每?jī)蓚€(gè)整數(shù)之間用一個(gè)空格分隔開(kāi),最后一個(gè)整數(shù)后面沒(méi)有空格。

      樣例輸入 3 9 1 5 2 8 5 6 7 3 樣例輸出 2 3 3 5 5 6 7 8 9 提示

      排序前必須把所有的整數(shù)都存儲(chǔ)下來(lái)。因?yàn)橹挥凶疃?000個(gè)數(shù),1秒的時(shí)間足夠任何排序算法運(yùn)行處結(jié)果來(lái)。

      解答:

      /*本題使用插入排序*/ #include int main(){ int a[1000];int m,n,p,i,j;scanf(”%d“,&n);for(i=0;i

      scanf(”%d",&a[i]);for(j=1;j

      p=0;

      while(p

      {

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

      break;

      else

      p++;

      }

      m=a[j];

      for(i=j;i>p;i--)

      a[i]=a[i-1];

      a[p]=m;

      }

      第二篇:C語(yǔ)言程序設(shè)計(jì)習(xí)題試題(編程題)

      C語(yǔ)言程序設(shè)計(jì)習(xí)題(編程類)

      1、從鍵盤輸入任意的字符,按下列規(guī)則進(jìn)行分類計(jì)數(shù)。

      第一類 '0','1','2','3','4','5','6','7','8','9'

      第二類 '+','-','*','/','%','='

      第三類 其它字符

      當(dāng)輸入字符''時(shí)先計(jì)數(shù),然后停止接收輸入,打印計(jì)數(shù)的結(jié)果。參考答案:

      #include void main(){ int class1, class2, class3; char ch;

      class1=class2=class3=0; /* 初始化分類計(jì)數(shù)器 */ do { ch=getch(); switch(ch){ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': class1++; break; /* 對(duì)分類1計(jì)數(shù) */ case '+': case '-': case '*': case '/': case '%': case '=': class2++; break; /* 對(duì)分類2計(jì)數(shù) */ default: class3++; break; /* 對(duì)分類3計(jì)數(shù) */ } }while(ch!= ''); /* 字符''在C程序中要使用轉(zhuǎn)義符'' */ printf(“class1=%d, class2=%d, class3=%dn”, class1, class2, class3); }

      2、從鍵盤輸入十個(gè)整數(shù),用插入法對(duì)輸入的數(shù)據(jù)按照從小到大的順序進(jìn)行排序,將排序后的結(jié)果輸出。參考答案: void main(){ int i,j,num,a[10]; for(i=0;i<10;i++){ printf(“Enter No.%d:”, i+1); scanf(“%d”,&num);

      for(j=i-1;j>=0&&a[j]>num;j--)a[j+1]=a[j]; a[j+1]=num; } for(i=0;i<10;i++)printf(“No.%d=%dn”, i+1, a[i]); }

      3、輸入一個(gè)正整數(shù),要求以相反的順序輸出該數(shù)。例如輸入12345,輸出位54321。參考答案: void main(){ int n;

      printf(“Please enter n:”); scanf(“%d”,&n); while(n>0){ printf(“%d”,n%10); n=n/10; } }

      4、編寫程序,讀入一個(gè)整數(shù)N;若N為非負(fù)數(shù),則計(jì)算N到2×N之間的整數(shù)和;若N為一個(gè)負(fù)數(shù),則求2×N到N之間的整數(shù)和。分別利用for和while寫出兩個(gè)程序。參考答案: void main(){ int i,n;

      long s1=0,s2=0;

      printf(“Please enter N:”); scanf(“%d”,&n); if(n>=0)for(i=n;i<=2*n;i++)s1=s1+i; else for(i=n;i>=2*n;i--)s1=s1+i; i=n; if(i>=0)while(i<=2*n)s2=s2+i++; else while(i>=2*n)s2=s2+i--;

      printf(“Result1=%ld result2=%ldn”,s1,s2); }

      5、一個(gè)自然數(shù)被8除余1,所得的商被8除也余1,再將第二次的商被8除后余7,最后得到一個(gè)商為a。又知這個(gè)自然數(shù)被17除余4,?所得的商被17除余15,最后得到一個(gè)商是a的2倍。編寫程序求這個(gè)自然數(shù)。參考答案: void main(){ int i,n,a;

      for(i=0; ;i++){ if(i%8==1){ n=i/8; if(n%8==1){ n=n/8;

      if(n%8==7)a=n/8; } } if(i%17==4){ n=i/17;

      if(n%17==15)n=n/17; } if(2*a==n){ printf(“result=%dn”,i); break; } } }

      6、編寫程序,輸出用一元人民幣兌換成1分、2分和5分硬幣的不同兌換方法。參考答案: void main(){ int f1,f2,f5,count=0; for(f5=0;f5<=20;f5++)for(f2=0;f2<=(100-f5*5)/2;f2++){ f1=100-f5*5-f2*2; if(f5*5+f2*2+f1==100)printf(“No.%2d >> 5: %4d 2: %2d 1: %2dn”,++count,f5,f2,f1); } }

      7、將一個(gè)數(shù)的數(shù)碼倒過(guò)來(lái)所得到的新數(shù)叫原數(shù)的反序數(shù)。如果一個(gè)數(shù)等于它的反序數(shù),則稱它為對(duì)稱數(shù)。求不超過(guò)1993的最大的二進(jìn)制的對(duì)稱數(shù)。參考答案: void main(){ int i,j,n,k,a[16]={0}; for(i=1;i<=1993;i++){ n=i;k=0;

      while(n>0)/* 將十進(jìn)制數(shù)轉(zhuǎn)變?yōu)槎M(jìn)制數(shù) */ { a[k++]=n%2; n=n/2; } for(j=0;j=k){ printf(“ %d: ”,i); for(j=0;j

      8、十個(gè)小孩圍成一圈分糖果,老師分給第一個(gè)小孩10塊,第二個(gè)小孩2塊,第三個(gè)小孩8塊,第四個(gè)小孩22塊,第五個(gè)小孩16塊,第六個(gè)小孩4塊,第七個(gè)小孩10塊,第八個(gè)小孩6塊,第九個(gè)小孩14 塊,第十個(gè)小孩20塊。然后所有的小孩同時(shí)將自己手中的糖分一半給右邊的小孩;糖塊數(shù)為奇數(shù)的人可向老師要一塊。問(wèn)經(jīng)過(guò)這樣幾次調(diào)整后大家手中的糖的塊數(shù)都一樣?每人各有多少塊糖? 參考答案: void main(){ int i,count=0,a[11]={0,10,2,8,22,16,4,10,6,14,20}; while(1){ for(i=1;i<=10;i++)a[i-1]=a[i-1]/2+a[i]/2; a[10]=a[10]/2+a[0]; for(i=1;i<=10;i++)if(a[i]%2==1)a[i]++; for(i=1;i<10;i++)if(a[i]!=a[i+1])break; if(i==10)break; else { a[0]=0; count++; } } printf(“count=%d number=%dn”,count,a[1]); }

      9、輸入5×5的數(shù)組,編寫程序?qū)崿F(xiàn):(1)求出對(duì)角線上各元素的和;

      (2)求出對(duì)角線上行、列下標(biāo)均為偶數(shù)的各元素的積;(3)找出對(duì)角線上其值最大的元素和它在數(shù)組中的位置。參考答案: void main(){ int i,j,s1=0,s2=1,a[5][5]; for(i=0;i<5;i++)for(j=0;j<5;j++){ printf(“%d %d: ”,i,j); scanf(“%d”,&a[i][j]); } for(i=0;i<5;i++){ for(j=0;j<5;j++)printf(“%5d”,a[i][j]); printf(“n”); } j=0;

      for(i=0;i<5;i++){ s1=s1+a[i][i];

      if(i%2==0)s2=s2*a[i][i]; if(a[i][i]>a[j][j])j=i; } printf(“SUN=%dnACCOM=%dna[%d]=%dn”,s1,s2,j,a[j][j]); }

      10、編寫程序,以字符形式輸入一個(gè)十六進(jìn)制數(shù),將其變換為一個(gè)十進(jìn)制整數(shù)后輸出。參考答案:

      #include “stdio.h” void main(){ int i,n=0,a[4]={0};

      printf(“Please enter a digit:”);

      for(i=0;i<4 &&(a[i]=getchar())!='n';i++); for(i=0;i<4;i++)if(a[i]>=48&&a[i]<=57)a[i]=a[i]-48; else if(a[i]>=65&&a[i]<=69)a[i]=a[i]-55; else if(a[i]>=97&&a[i]<=102)a[i]=a[i]-87; else printf(“input Error!”); for(i=0;i<4;i++)n=n*16+a[i]; printf(“%d”,n); }

      11、編寫程序,輸入一個(gè)十進(jìn)制整數(shù),將其變換為二進(jìn)制后儲(chǔ)存在一個(gè)字符數(shù)組中。參考答案: void main(){ int i,n,k=16,a[16]={0}; printf(“Please enter a digit:”); scanf(“%d”,&n);

      while(n>0)/* 將十進(jìn)制數(shù)轉(zhuǎn)變?yōu)槎M(jìn)制數(shù) */ { a[--k]=n%2; n=n/2; } for(i=0;i<16;i++)printf(“%2d”,a[i]); }

      12、對(duì)數(shù)組A中的N(0<N<100=個(gè)整數(shù)從小到大進(jìn)行連續(xù)編號(hào),輸出各個(gè)元素的編號(hào)。要求不能改變數(shù)組A中元素的順序,且相同的整數(shù)要具有相同的編號(hào)。例如數(shù)組是:A=(5,3,4,7,3,5,6)則輸出為:(3,1,2,5,1,3,4)參考答案: void main(){ int i,j,k,n,m=1,r=1,a[2][100]={0}; printf(“Please enter n:”); scanf(“%d”,&n); for(i=0;i

      for(j=i;j

      13、求這樣一個(gè)三位數(shù),該三位數(shù)等于其每位數(shù)字的階乘之和。

      即: abc = a!+ b!+ c!參考答案: void main(){ int a[5],i,t,k;

      for(i=100;i<1000;i++){ for(t=0,k=1000;k>=10;t++){ a[t]=(i%k)/(k/10); k/=10; } if(f(a[0])+f(a[1])+f(a[2])==i)printf(“%d ”,i); } } f(m)int m;

      { int i=0,t=1;

      while(++i<=m)t*=i; return(t); }

      14、編寫一個(gè)函數(shù)實(shí)現(xiàn)將字符串str1和字符串str2合并,合并后的字符串按其ASCII碼值從小到大進(jìn)行排序,相同的字符在新字符串中只出現(xiàn)一次。參考答案:

      #include “string.h” strcmbn(a,b,c)/* 數(shù)組合并函數(shù):將數(shù)組a、b合并到 */ char a[],b[],c[]; { char tmp; int i,j,k,m,n; m=strlen(a); n=strlen(b);

      for(i=0;i

      tmp=a[i]; a[i]=a[k]; a[k]=tmp; } for(i=0;i

      tmp=b[i]; b[i]=b[k]; b[k]=tmp; } i=0;j=0;k=0;

      while(ib[j])c[k++]=b[j++]; /* 將a[i]、b[j]中的小者存入c[k] */ else { c[k++]=a[i++]; if(a[i-1]==b[j])j++; /* 如果a、b當(dāng)前元素相等,刪掉一個(gè) */ } while(i