廣工 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,