华南俳烁实业有限公司

自考

各地資訊
當(dāng)前位置:華課網(wǎng)校 >> 自考 >> 模擬試題 >> 工學(xué)類 >> C語言程序設(shè)計(jì) >> 文章內(nèi)容

排行熱點(diǎn)

  • 歷年真題
  • 模擬試題
  • 自考自答

自學(xué)考試《C語言程序設(shè)計(jì)》隨堂試題及答案_第2頁

來源:華課網(wǎng)校  [2017年1月31日]  【

  【4.61】分析:按照親密數(shù)定義,要判斷數(shù)a是否有親密數(shù),只要計(jì)算出a的全部因子的累加和為b,再計(jì)算b的全部因子的累加和為n,若n等于a則可判定a和b是親密數(shù)。計(jì)算數(shù)a的各因子的算法:用a依次對i(i=1~a/2)進(jìn)行模運(yùn)算,若模運(yùn)算結(jié)果等于0,則i為 a的一個(gè)因子;否則結(jié)束對a的因子的計(jì)算。

  參考答案:

  #include

  #include

  main( )

  { int a, i, m, n;

  printf("Friendly-numbers pair samller than 3000:\n");

  for(a=1;a<3000;a++) /* 窮舉3000以內(nèi)的全部整數(shù) */

  { for(m=0,i=1;i<=a/2;i++ ) /* 計(jì)算數(shù)a的各因子,各因子之和存于m */

  if(!(a%i))

  m+=i; /* 計(jì)算m的各因子,各因子之和存于n */

  for(n=0,i=1;i<=m/2;i++)

  if(!(m%i))

  n+=i;

  if(n==a && a

  printf(" %4d~%4d",a,m);

  }

  【4.62】參考答案:

  #include

  #include

  main( ) /* 猜數(shù)程序 */

  { int magic; /* 計(jì)算機(jī)"想"的數(shù) */

  int guess; /* 人猜的數(shù) */

  int counter;

  magic=rand( ); /* 通過調(diào)用隨機(jī)函數(shù)任意"想"一個(gè)數(shù) */

  guess=magic-1; /* 初始化變量guess的值 */

  counter=0; /* 計(jì)數(shù)器清零 */

  while(magic != guess)

  { printf("guess the magic number:");

  scanf("%d", &guess);       /* 人輸入所猜的數(shù) */

  counter++;

  if(guess>magic)

  printf("**** Wrong **** too hight\n");

  else if(guess

  printf("**** Wrong **** too low\n");

  }

  printf("**** Right ****\n");

  printf("guess counter is %d\n", counter);

  }

  【4.63】分析:直接計(jì)算階乘的結(jié)果顯然超出整型數(shù)的范圍。此題的關(guān)鍵是如何減少計(jì)算中數(shù)的規(guī)模,注意在計(jì)算過程中出現(xiàn)0后,我們可以先行統(tǒng)計(jì)0的個(gè)數(shù),然后將0從結(jié)果中移去,另外,結(jié)果僅保存?zhèn)位數(shù)即可,其它位的數(shù)不會(huì)對0的個(gè)數(shù)產(chǎn)生影響。

  參考答案:

  main()

  { int i,n=0;

  long s=1;

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

  { s=s*i;

  while(s%10==0)

  { s=s/10;

  n++;

  }

  s=s%10;

  }

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

  }

  【4.64】參考答案:

  main()

  { int i,j,b[3][2];

  int a[2][3]={{1,2,3},{4,5,6}};

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

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

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

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

  { for(j=0;j<=1;j++)

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

  printf("\n");

  }

  }

  【4.65】參考答案:

  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=%d\n",count,a[1]);

  }

  【4.66】參考答案:

  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=%d\nACCOM=%d\na[%d]=%d\n",s1,s2,j,a[j][j]);

  }

  【4.67】參考答案:

  #include "stdio.h"

  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);

  }

  【4.68】參考答案:

  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]);

  }

  【4.69】參考答案:

  #include

  main()

  { int i,j,m,s,k,a[100];

  for(i=1;i<=100;i++ ) /* 尋找1000以內(nèi)的完數(shù) */ { m=i;s=0;k=0;

  while(m>0) /* 尋找i的因子 */

  { for(j=1;j

  if(m%j==0)

  { s=s+j;

  m=m/j;

  a[k++]=j;

  }

  if(j>=m) break;

  }

  if(s!=0&&i==s+m)

  { a[k++]=m;

  for(j=0;j

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

  printf("==%4d\n",i);

  }

  }

  }

  【4.70】參考答案:

  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

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

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

  }

  while(m<=n) /* m記錄已經(jīng)登記過的數(shù)的個(gè)數(shù) */

  { for(i=0;i

  { if(a[1][i]!=0) /* 已登記過的數(shù)空過 */

  continue;

  k=i;

  for(j=i;j

  if(a[1][j]==0 && a[0][j]

  a[1][k]=r++; /* 記錄名次,r為名次 */

  m++; /* 登記過的數(shù)增1 */

  for(j=0;j

  if(a[1][j]==0 && a[0][j]==a[0][k])

  { a[1][j]=a[1][k];

  m++;

  }

  break;

  }

  }

  for(i=0;i

  printf("a[%d]=%d, %d\n",i,a[0][i],a[1][i]);

  }

  【4.71】參考答案:

  #include

  main()

  { int i,j,k=0,m=2,s,r=0,a[500]; printf("%4d ",m);

  for(i=3;i<=2000;i++ )

  { for(j=2;j<=i-1;j++)

  if(i%j==0) break;

  if(j==i)

  { printf("%4d ", i );

  a[k++]=i-m;

  m=i;

  }

  }

  for(i=0;i

  { s=0;

  for(j=i;j

  { s=s+a[j];

  if(s>=1898) break;

  }

  if(s==1898)

  r++;

  }

  printf("\nresult=%d\n",r);

  }

  【4.72】分析:本問題的思路很多,我們介紹一種簡單快速的算法。

  首先求出三位數(shù)中不包含0且是某個(gè)整數(shù)平方的三位數(shù),這樣的三位數(shù)是不多的。然后將滿足條件的三位數(shù)進(jìn)行組合,使得所選出的三個(gè)三位數(shù)的九個(gè)數(shù)字沒有重復(fù)。程序中可以將尋找滿足條件三位數(shù)的過程和對該三位數(shù)進(jìn)行數(shù)字分解的過程結(jié)合起來。

  參考答案:

  #include

  main( )

  { int a[20],num[20][3],b[10]; /* a: 存放滿足條件的三位數(shù) */

  /* num:滿足條件的三位數(shù)分解后得到的數(shù)字,b: 臨時(shí)工作 */

  int i,j,k,m,n,t,flag;

  printf("The 3 squares with 3 different digits each are:\n");

  for(j=0,i=11;i<=31;i++) /* 求出是平方數(shù)的三位數(shù) */

  if(i%10 != 0) /* 若不是10的倍數(shù),則分解三位數(shù) */

  { k=i*i; /* 分解該三位數(shù)中的每一個(gè)數(shù)字 */

  num[j+1][0]=k/100; /* 百位 */

  num[j+1][1]=k/10%10; /* 十位 */

  num[j+1][2]=k%10; /* 個(gè)位 */

  if(!(num[j+1][0]==num[j+1][1] || num[j+1][0]==num[j+1][2]

  || num[j+1][1]==num[j+1][2]) )

  /* 若分解的三位數(shù)字均不相等 */

  a[++j]=k; /* j:計(jì)數(shù)器,統(tǒng)計(jì)已找到的滿足要求的三位數(shù) */

  }

  for(i=1;i<=j-2;++i ) /* 從滿足條件的三位數(shù)中選出三個(gè)進(jìn)行組合 */

  { b[1]=num[i][0]; /* 取第i個(gè)數(shù)的三位數(shù)字 */

  b[2]=num[i][1];

  b[3]=num[i][2];

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

  { b[4]=num[t][0]; /* 取第t個(gè)數(shù)的三位數(shù)字 */

  b[5]=num[t][1];

  b[6]=num[t][2];

  for(flag=0, m=1;!flag&&m<=3;m++) /* flag:出現(xiàn)數(shù)字重復(fù)的標(biāo)記 */

  for(n=4;!flag&&n<=6;n++) /* 判斷前兩個(gè)數(shù)的數(shù)字是否有重復(fù) */

  if(b[m]==b[n]) flag=1; /* flag=1:數(shù)字有重復(fù) */

  if(!flag)

  for(k=t+1;k<=j;++k)

  { b[7]=num[k][0]; /* 取第k個(gè)數(shù)的三位數(shù)字 */

  b[8]=num[k][1];

  b[9]=num[k][2];

  /* 判斷前兩個(gè)數(shù)的數(shù)字是否與第三個(gè)數(shù)的數(shù)字重復(fù) */

  for(flag=0,m=1;!flag&&m<=6;m++)

  for(n=7;!flag&&n<=9;n++)

  if(b[m]==b[n]) flag=1;

  if(!flag) /* 若均不重復(fù)則打印結(jié)果 */

  printf("%d, %d, %d\n",a[i],a[t],a[k]);

  }

  }

  }

  }

  【4.73】參考答案:

  main()

  { int i,n,k,a[3],b[3];

  for(i=248;i<=343;i++)

  { for(n=i,k=0;n>0;n/=7)

  a[k++]=n%7;

  for(n=i,k=0;n>0;n/=9)

  b[k++]=n%9;

  if(k==3)

  for(n=0;n

  if(a[n]!=b[k-n-1])

  break;

  if(n==k)

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

  }

  }

  【4.74】參考答案:

  #include

  int pos[101],div[101];

  main ()

  { int m, n, i, j;

  printf("Please input m/n(<0

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

  printf("%d/%d=0.", m, n);

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

  { pos[m]=i;

  m*=10;

  div[i]=m/n;

  m=m%n;

  if(m==0)

  { for( j=1;j<=i;j++) printf("%d",div[j]);

  break;

  }

  if(pos[m]!=0)

  { for( j=1;j<=i;j++) printf("%d",div[j]);

  printf("\nloop: start=%d, end=%d",pos[m], i);

  break;

  }

  }

  printf("\n");

  }

  【4.75】參考答案:

  #include "stdio.h"

  int a[20],b[20];

  main()

  { int t=0,*m,*n,*k,*j,z,i=0;

  printf("Input number 1:");

  do

  { a[++t]=getchar()-'0';

  }while(a[t]!=-38);

  printf("Input number 2:");

  do

  { b[++i]=getchar()-'0';

  }while(b[i]!=-38);

  if(t>i)

  { m=a+t;n=b+i;j=a;k=b;z=i;

  }

  else

  { m=b+i;n=a+t;j=b;k=a;z=t;

  }

  while(m!=j)

  { (*(--n-1))+=(*(--m)+*n)/10;

  *m=(*m+*n)%10;

  if (n==k+1 && *k!=1 ) break;

  if (n==k+1 && *k)

  { n+=19;*(n-1)=1;

  }

  if (n>k+z && *(n-1)!=1) break;

  }

  while (*(j++)!=-38) printf("%d",*(j-1));

  printf("\n");

  }

責(zé)編:zhangjing0102
长岭县| 山西省| 葵青区| 无锡市| 高平市| 黄骅市| 崇左市| 句容市| 太谷县| 米泉市| 商丘市| 呼伦贝尔市| 边坝县| 邵武市| 麻江县| 无锡市| 洪江市| 阳泉市| 建昌县| 龙门县| 肃宁县| 陵川县| 沈丘县| 科技| 禄劝| 平凉市| 阿坝| 梁平县| 宁津县| 竹山县| 佳木斯市| 玉田县| 泾源县| 邹平县| 香河县| 若羌县| 遂平县| 定襄县| 景德镇市| 西吉县| 航空|