1.数组编程
(3) 某歌手大赛,共有10个评委给歌手打分,分数采用百分制,去掉一个最高分,去掉一个最低分,然后取平均分,得到歌手的成绩。10个分数由键盘输入,编写程序计算某歌手的成绩。
float calculates(float s[10])
{
int i;
float max=s[0],min=s[0],sum=0,ave;
for(i=0;i<10;i++)
{
if(s[i]>max) max=s[i];
if(s[i]<min) min=s[i];
sum=sum+s[i];
}
ave=(sum-max-min)/8;
return(ave);
}
main()
{
int i;
float score,s[10];
printf("\nPlease input the 10 scores:\n");
for(i=0;i<10;i++)
scanf("%f",&s[i]);
score=calculates(s);
printf("\nThe singer's score is %f",score);
}
(4) 有一个一维数组包含10个元素,编写程序将其中的值按逆序重新存放。即第一个元素和最后一个元素交换位置,第二个元素和倒数第二个元素交换位置,依次类推。
#define N 10
main()
{
int i,j,a[N],m,n,temp;
n=N;
printf("\nPlease input %d integer:\n",n);
for(i=0;i<N;i++)
scanf("%d",&a[i]);
m=(N-1)/2;
for(i=0;i<=m;i++)
{
j=N-1-i;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
printf("\nThe array has been inverted:\n");
for(i=0;i<N;i++)
printf("%d ",a[i]);
}
(5) 有n个数,已按由小到大的顺序排好,要求输入一个数,将它插入到数列的合适位置,使数组仍然有序,并输出新数列。编程时应考虑插入的数的各种可能性(比原所有数都大;比原所有数都小;在最大数和最小数之间)。
main()
{
static int a[11]={3,8,11,17,20,28,40,58,67,85};
int num,i;
printf("\nThe list is:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\nPlease input the insert number:");
scanf("%d",&num);
i=9;
while(num<a[i]&&i>=0)
{
a[i+1]=a[i];
i--;
}
a[i+1]=num;
printf("\nThe result is:\n");
for(i=0;i<11;i++)
printf("%d ",a[i]);
}
(8) 输入一个M行M列的二维数组,分别计算四周元素及两条对角线上的元素之和。M由下面的符号常量定义,#define M 5
#define M 5
main()
{
int a[M][M],i,j,m,n,sum1=0,sum2=0;
m=M;
printf("\nPlease input %d numbers:\n",m*m);
for(i=0;i<M;i++)
for(j=0;j<M;j++)
scanf("%d",&a[i][j]);
printf("\nThe array is:\n");
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
{
printf("%d ",a[i][j]);
if(i==j||(i+j)==(M-1)) sum2=sum2+a[i][j];
if(i==0||i==(M-1)||j==0||j==(M-1))
sum1=sum1+a[i][j];
}
printf("\n");
}
printf("\nThe round sum is %d",sum1);
printf("\nThe corner sum is %d",sum2);
}
(11) 有一段文字,共有5行,分别统计出其中英文大写字母、小写字母、数字、空格以及其它字符的个数。
#include "string.h"
main()
{
char a[5][100];
int i,j=0,ualpha=0,lalpha=0,number=0,space=0,other=0;
printf("\nInput 5 string:\n");
for(i=0;i<5;i++)
gets(a[i]);
for(i=0;i<5;i++)
{
ualpha=0;lalpha=0;number=0;space=0;other=0;
for(j=0;j<100;j++)
{
if(a[i][j]!='\0')
{
if(a[i][j]>=65&&a[i][j]<=90) ualpha++;
else if(a[i][j]>=97&&a[i][j]<=122) lalpha++;
else if(a[i][j]>=48&&a[i][j]<=57) number++;
else if(a[i][j]==32) space++;
else other++;
}
else break;
}
printf("\n%d:ualpha:%d,lalpha:%d,number:%d,space:%d,other:%d",i,ualpha,lalpha,number,space,other);
}
}
(13) 从键盘输入一个字符串,分别输出其完全大写和完全小写的形式。
#include <string.h>
main()
{
char str[20],low[20],up[20];
int i;
printf("\nPlease input a string:");
gets(str);
printf("\nThe letter list is:\n");
puts(str);
i=0;
while(str[i]!='\0')
{
if(str[i]>=65&&str[i]<=90)
{
low[i]=str[i]+32;
up[i]=str[i];
}
else if(str[i]>=97&&str[i]<=122)
{
low[i]=str[i];
up[i]=str[i]-32;
}
i++;
}
printf("\nThe result is:\n");
puts(up);
puts(low);
}
(3) 某歌手大赛,共有10个评委给歌手打分,分数采用百分制,去掉一个最高分,去掉一个最低分,然后取平均分,得到歌手的成绩。10个分数由键盘输入,编写程序计算某歌手的成绩。
float calculates(float s[10])
{
int i;
float max=s[0],min=s[0],sum=0,ave;
for(i=0;i<10;i++)
{
if(s[i]>max) max=s[i];
if(s[i]<min) min=s[i];
sum=sum+s[i];
}
ave=(sum-max-min)/8;
return(ave);
}
main()
{
int i;
float score,s[10];
printf("\nPlease input the 10 scores:\n");
for(i=0;i<10;i++)
scanf("%f",&s[i]);
score=calculates(s);
printf("\nThe singer's score is %f",score);
}
(4) 有一个一维数组包含10个元素,编写程序将其中的值按逆序重新存放。即第一个元素和最后一个元素交换位置,第二个元素和倒数第二个元素交换位置,依次类推。
#define N 10
main()
{
int i,j,a[N],m,n,temp;
n=N;
printf("\nPlease input %d integer:\n",n);
for(i=0;i<N;i++)
scanf("%d",&a[i]);
m=(N-1)/2;
for(i=0;i<=m;i++)
{
j=N-1-i;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
printf("\nThe array has been inverted:\n");
for(i=0;i<N;i++)
printf("%d ",a[i]);
}
(5) 有n个数,已按由小到大的顺序排好,要求输入一个数,将它插入到数列的合适位置,使数组仍然有序,并输出新数列。编程时应考虑插入的数的各种可能性(比原所有数都大;比原所有数都小;在最大数和最小数之间)。
main()
{
static int a[11]={3,8,11,17,20,28,40,58,67,85};
int num,i;
printf("\nThe list is:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\nPlease input the insert number:");
scanf("%d",&num);
i=9;
while(num<a[i]&&i>=0)
{
a[i+1]=a[i];
i--;
}
a[i+1]=num;
printf("\nThe result is:\n");
for(i=0;i<11;i++)
printf("%d ",a[i]);
}
(8) 输入一个M行M列的二维数组,分别计算四周元素及两条对角线上的元素之和。M由下面的符号常量定义,#define M 5
#define M 5
main()
{
int a[M][M],i,j,m,n,sum1=0,sum2=0;
m=M;
printf("\nPlease input %d numbers:\n",m*m);
for(i=0;i<M;i++)
for(j=0;j<M;j++)
scanf("%d",&a[i][j]);
printf("\nThe array is:\n");
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
{
printf("%d ",a[i][j]);
if(i==j||(i+j)==(M-1)) sum2=sum2+a[i][j];
if(i==0||i==(M-1)||j==0||j==(M-1))
sum1=sum1+a[i][j];
}
printf("\n");
}
printf("\nThe round sum is %d",sum1);
printf("\nThe corner sum is %d",sum2);
}
(11) 有一段文字,共有5行,分别统计出其中英文大写字母、小写字母、数字、空格以及其它字符的个数。
#include "string.h"
main()
{
char a[5][100];
int i,j=0,ualpha=0,lalpha=0,number=0,space=0,other=0;
printf("\nInput 5 string:\n");
for(i=0;i<5;i++)
gets(a[i]);
for(i=0;i<5;i++)
{
ualpha=0;lalpha=0;number=0;space=0;other=0;
for(j=0;j<100;j++)
{
if(a[i][j]!='\0')
{
if(a[i][j]>=65&&a[i][j]<=90) ualpha++;
else if(a[i][j]>=97&&a[i][j]<=122) lalpha++;
else if(a[i][j]>=48&&a[i][j]<=57) number++;
else if(a[i][j]==32) space++;
else other++;
}
else break;
}
printf("\n%d:ualpha:%d,lalpha:%d,number:%d,space:%d,other:%d",i,ualpha,lalpha,number,space,other);
}
}
(13) 从键盘输入一个字符串,分别输出其完全大写和完全小写的形式。
#include <string.h>
main()
{
char str[20],low[20],up[20];
int i;
printf("\nPlease input a string:");
gets(str);
printf("\nThe letter list is:\n");
puts(str);
i=0;
while(str[i]!='\0')
{
if(str[i]>=65&&str[i]<=90)
{
low[i]=str[i]+32;
up[i]=str[i];
}
else if(str[i]>=97&&str[i]<=122)
{
low[i]=str[i];
up[i]=str[i]-32;
}
i++;
}
printf("\nThe result is:\n");
puts(up);
puts(low);
}