1. 程式人生 > >廣工 AnyviewC C語言習題 第六章

廣工 AnyviewC C語言習題 第六章

Anyview 第六章


6.022 n是系統給定的外部變數。編寫程式,求1到n間的

自然數之和。請定義區域性變數s存放求和的結果,並用下
列語句輸出結果

      printf("1+2+...+n=%d\n",s);
void main()
{
  int s;
  /* 請新增相關說明和語句 */
   s=0;
    for (int i=1;i<=n;i++)
    s+=i;

  printf("1+2+...+n=%d\n",s); /* 注意:不要修改此輸出語句 */
}

/**********

6.028 n和s是系統給定的外部整型變數(不需要自行定義)。

編寫程式,求1到n之間的偶數之和,並將結果存放到s。
**********/

void main()
{
    for (int i=1;i<=n;i++)
        if (i%2==0)
            s+=i;
}
//第二種方法
    for (int i=2;i<=n;i+=2)
        s+=i;
//第三種方法
for (int i=1;i<=n;i++)
        (i%2==0)?s+=i:; //編譯錯誤?
//第四種方法

/**********

【習題6.033】系統給定外部整型陣列a、整型變數n、max、min

和實型變數avg(不需要自行定義)。編寫程式,求陣列a中前n
個元素的最大值max、最小值min及平均值avg。
**********/

void main()
{
    avg=0;
    max=a[0];
    min=a[0];
    for (int i=0;i<n;i++)
    {
        if (a[i]>max)        
            max=a[i];        
        if (a[i]<min)        
            min=a[i];        
        avg+=a[i];
    }                             
    avg=avg/n;
  }

/**********

6.040 m,n和s是系統定義的外部整型變數(不需要自行定義)。

編寫程式,根據m的值求滿足1+2+…+n>=m的最小n,並將
1+2+…+n的結果存放到s。例如,若m=50,則n=10,s=55。
**********/

void main()
{

    for (int i=1;i<=m;i++)
    {
        s+=i;
        if (s>=m)
        {
            n=i;
            break;
        }
    }
}

/**********

【習題6.043】系統給定外部整型變數n和整型陣列a(不需要

自行定義)。編寫程式,找出陣列a中前n個元素中的最小元素
及其下標,然後把它和陣列中最前面的元素a[0]交換位置。
**********/

void main()
{
      int min=0,t,tmp;
      min=a[0];
      for (int j=0;j<n;j++)
    {
        if (a[j]<min)
        min=a[j];
    }
    for (int k=0;k<n;k++)
    {
        if (a[k]==min)
        t=k;
    }
    tmp=a[t];
    a[t]=a[0];
    a[0]=tmp;
}

/**********

【習題6.050】系統給定外部字串s和整型陣列c[26](不需要

自行定義)。編寫程式,將字串s中26個小寫字母出現的次數
依次統計到陣列c中。例如,當s=“abcijkabcdexyzuvwx”時,
陣列c的26個元素值依次為:2 2 2 1 1 0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 1 1 1 2 1 1。
**********/

void main()
{
   int l=strlen(s);
     for (int j=0;j<26;j++)
     {
        c[j]=0;
     }
    for (int i=0;i<l;i++)
    {
        switch(s[i])
        {
            case 'a':
                c[0]++;
                break;
            case 'b':
                c[1]++;    
                break;
            case 'c':
                c[2]++;
                break;
            case 'd':
                c[3]++;
                break;
            case 'e':
                c[4]++;
                break;
            case 'f':
                c[5]++;
                break;
            case 'g':
                c[6]++;
                break;
            case 'h':
                c[7]++;
                break;
            case 'i':
                c[8]++;
                break;
            case 'j':
                c[9]++;
                break;
            case 'k':
                c[10]++;
                break;
            case 'l':
                c[11]++;
                break;
            case 'm':
                c[12]++;
                break;
            case 'n':
                c[13]++;
                break;
            case 'o':
                c[14]++;
                break;
            case 'p':
                c[15]++;
                break;
            case 'q':
                c[16]++;
                break;
            case 'r':
                c[17]++;
                break;
            case 's':
                c[18]++;
                break;
            case 't':
                c[19]++;
                break;
            case 'u':
                c[20]++;
                break;
            case 'v':
                c[21]++;
                break;
            case 'w':
                c[22]++;
                break;
            case 'x':
                c[23]++;
                break;
            case 'y':
                c[24]++;
                break;
            case 'z':
                c[25]++;
                break;
            default:
                break;
        }
    } 
}

/**********

【習題6.051】 系統給定外部字串s和整型陣列c[26]

(不需要自行定義)。編寫程式,將字串s中26個字母
(不區分大小寫)出現的次數依次統計到陣列c中。例如,
當s=“AbcijKaBcdEXyzuvwx”時,陣列c的26個元素值
依次為:2 2 2 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0
1 1 1 2 1 1。
**********/

void main()
{
       int l=strlen(s);
    for (int j=0;j<26;j++)
    c[j]=0;
    for (int i=0;i<l;i++)
    {
        switch(s[i])
        {
            case 'a':
            case 'A':
                c[0]++;
                break;
            case 'b':
            case 'B':
                c[1]++;    
                break;
            case 'c':
            case 'C':
                c[2]++;
                break;
            case 'd':
            case 'D':
                c[3]++;
                break;
            case 'e':
            case 'E':
                c[4]++;
                break;
            case 'f':
            case 'F':
                c[5]++;
                break;
            case 'g':
            case 'G':
                c[6]++;
                break;
            case 'h':
            case 'H':
                c[7]++;
                break;
            case 'i':
            case 'I':
                c[8]++;
                break;
            case 'j':
            case 'J':
                c[9]++;
                break;
            case 'k':
            case 'K':
                c[10]++;
                break;
            case 'l':
            case 'L':
                c[11]++;
                break;
            case 'm':
            case 'M':
                c[12]++;
                break;
            case 'n':
            case 'N':
                c[13]++;
               break;
            case 'o':
            case 'O':
                c[14]++;
               break;
            case 'p':
            case 'P':
                c[15]++;
                break;
            case 'q':
            case 'Q':
                c[16]++;
                break;
            case 'r':
            case 'R':
                c[17]++;
                break;
            case 's':
            case 'S':
                c[18]++;
                break;
            case 't':
            case 'T':
                c[19]++;
                break;
            case 'u':
            case 'U':
                c[20]++;
                break;
            case 'v':
            case 'V':
                c[21]++;
                break;
            case 'w':
            case 'W':
                c[22]++;
                break;
            case 'x':
            case 'X':
                c[23]++;
                break;
            case 'y':
            case 'Y':
                c[24]++;
                break;
            case 'z':
            case 'Z':
                c[25]++;
                break;
            default:
                break;
        }
    } 
}

/**********

6.176 系統給定外部長整型變數s,整型變數a、m和k,

1<=a<=9,1<=m<=9且m+k<=9(不需要自行定義)。編寫
程式,求數列a,aa,aaa,…,aa…a,…(第i項為i個a)中,
第m項起的k項之和,並將結果存放到s。例如:當a=6,
m=4且k=3時,置s=6666+66666+666666。
**********/

void main()
{
     int t=1;
    long s0[10]={0};
    if (a>=1 && a<=9 && 1<=m && m<=9 && m+k<=9)
    {
            for (int j=0;j<m;j++)
            {
                t=1;
                for (int i=1;i<=j;i++)
                {
                    t*=10;
                }
                
                s0[0]+=a*t;
            }
            s+=s0[0];
            //printf("%d\n",s0[0]);
            for (int i=1;i<k;i++)
            {
                s0[i]=s0[i-1]*10+a;
                s+=s0[i];
            }
    }
     if(a==0 || m==0 || k==0)
    {
        s=0;
    }
}

/**********

6.183 系統給定外部長整型變數s和整型變數n,且

n的值在0和9之間(不需要自行定義)。編寫程式,
求1+12+123+…+12…n之值,並將結果存放到s。例如,
n=5時,置s=1+12+123+1234+12345。
**********/

void main()
{
int t;
    long s0[10]={0};
    if (n>=1 && n<=9)
    {
        s0[0]=1;
            for (int j=1;j<n;j++)
            {
                t=1;
                for (int i=1;i<=j;i++)
                {
                    t*=10;
                }
                
                s0[j]+=s0[j-1]*10+j+1;
            }
            
            //printf("%d\n",s0[0]);
            for (int i=0;i<n;i++)
            {
                
                s+=s0[i];
            }
            
    }
    else   
    {
        s=0;
    }
}

/**********

【習題6.225】系統給定外部整型變數n、e和整型陣列a(不需要自行定義),

其中陣列a中前n個元素(a[0],a[1],…,a[n-1])已經按元素值由小到大排序。
編寫程式,把變數e的值插入到陣列a中,並且仍然保持a中元素由小到大的排列
順序。若e的值比原有所有的數都大時,插入在末尾的a[n]。若比原有的數都小
時,則插入在最前面的a[0]。
**********/

void main()
{
   for (int i=0;i<n;i++)
    {
        if (a[i]>=e)
        {
            for (int j=n-1;j>=i;j--)
            {
                a[j+1]=a[j];
            }
            a[i]=e;
            break;
        }
    }
    if (e>=a[n-1])
    a[n]=e;
}

/**********

【習題6.255】系統給定外部整型變數n和整型陣列a(不需要自行定義)。

編寫程式,用起泡法對陣列a中前n個元素(a[0],a[1],…,a[n-1])進行
分段排序,其中前一半為從小到大排序,後一半為從大到小排序,n為奇數
時,位於中間點的數不需要排序。
**********/

void main()
{
      for (int i=0;i<n/2;i++)
    {
        int max=a[0];
        for (int j=1;j<n/2-i;j++)
        {
            if (max>a[j])
            {
                int t=a[j];
                a[j]=max;
                a[j-1]=t;
            }
            else
            {
                //int t=max;
                max=a[j];
                //a[j-1]=t;
            }
        }
    }
    
    for (i=n;i>n/2;i--)
    {
        int min=a[n/2];
        for (int j=n/2+1;j<n;j++)
        {
            if (min<a[j])
            {
                int t=a[j];
                a[j]=min;
                a[j-1]=t;
            }
            else
            {
                //int t=max;
                min=a[j];
                //a[j-1]=t;
            }
        }
    }
}

/**********

【習題6.265】系統給定外部整型變數n和整型陣列a(不需要自行定義)。

編寫程式,用起泡法對陣列a中前n個元素(a[0],a[1],…,a[n-1])進行
分段排序,其中前一半為從大到小排序,後一半為從小到大排序,並把n個
數的平均值存在a[n]中,n為奇數時,位於中間點的數不需要排序。
**********/

void main()
{          double min,max,