第九次作业。

 1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)#include<stdio.h>#define N 10double ave(int score[],int n);//求平均 void input(int score[],int n);//输入 int fmax(int score[],int n);//最大值int fmin(int score[],int n);//最小值void indexmax(int score[],int n,int max);//最大值下标

void indexmin(int score[],int n,int min);//最小值下标 
void find(int score[],int n,int want);//查找 
void series(int score[],int n);//排序
void output(int score[],int n);//输出 
int main()
{
    int n,score[N],max,min,i,want;
    double average;
    printf("请输入共有多少人:\n");
    scanf("%d",&n);
    input(score,n);//存数据 
    average=ave(score,n);
    max=fmax(score,n);
    min=fmin(score,n);
    output(score,n);//输出数据 
    printf("平均值=%.2lf\n",average);
    printf("最大值=%d",max);
    indexmax(score,n,max);//输出下标 
    printf("最小值=%d",min);
    indexmin(score,n,min);//输出下标 
    printf("请输入想要查询的成绩:\n");
    scanf("%d",&want);
    find(score,n,want);
    series(score,n);
    return 0;
}
double ave(int score[],int n)
{
    int sum=0,i;
    double result;
    for(i=0;i<n;i++)
    {
        sum=sum+score[i];
    }
    result=(double)sum/n;
    return result;
}
void input(int score[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("请输入学生成绩;\n");
        scanf("%d",&score[i]);
    }
}
void output(int score[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%4d",score[i]);
    }
    printf("\n");
}
int fmax(int score[],int n)
{
    int max,i;
    max=score[0];
    for(i=0;i<n;i++)
    {
        if(max<score[i])
        {
            max=score[i];
        }
    }
    return max;
}
int fmin(int score[],int n)
{
    int min,i;
    min=score[0];
    for(i=0;i<n;i++)
    {
        if(min>score[i])
        {
            min=score[i];
        }
    }
    return min;
}
void indexmax(int score[],int n,int max)
{
    int i;
  
for(i=0;i<n;i++)
 {
if(max==score[i])
{ printf(
"%4d号 ",i+1); }
}
printf(
"\n"); } void indexmin(int score[],int n,int min) { int i; for(i=0;i<n;i++) { if(min==score[i]) { printf("%4d号 ",i+1); } } printf("\n"); } void find(int score[],int n,int want) { int i,falg=0;
printf(
"查找到的为;\n"); for(i=0;i<n;i++) { if(score[i]==want) {
       flag++; printf(
"%4d号 ",i+1); } }
  if(flag==0)
{
    printf("没有您要查找的。");
  }
}
void series(int score[],int n) { int i,j,tenp; for(i=0;i<n-1;i++) for(j=0;j<n-i-1;j++) { tenp=0; if(score[j]<score[j+1]) { tenp=score[j]; score[j]=score[j+1]; score[j+1]=tenp; } } printf("\n从高到低的顺序为:"); for(i=0;i<n;i++) { printf("%4d",score[i]); } }

   2.定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。

#include<stdio.h>
#define N 100
int main()
{
    int number[N],i,num=0;
    for(i=0;i<N;i++)
    {
        number[i]=i+1;
    }
    for(i=0;i<N;i++)
    {
        if(number[i]%3==0||number[i]%7==0)
        {
            number[i]=0;
        }
    }
    for(i=0;i<N;i++)
    {
        if(number[i]!=0)
        {
            num++;
            printf("%4d",number[i]);
        }
    }
    printf("\n共有%d个数\n",num);
    return 0;
}

 

附加题

   1.将数组a中的10个元素后移m位,移出的m位顺序存放在数组的 前m位。要求:(1)数组值在程序中初始化(2)m从键盘输入。

#include<stdio.h>
#define N 100
int main()
{
    int a[N]={1,2,3,4,5,6,7,8,9,10},i,j,m,temp;
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n请输入向后移的位数;\n");
    scanf("%d",&m); 
    if(m>10)
    {
        printf("输入错误!\n");
    }
    else
    {
        for(i=0;i<m;i++)
        {
            temp=a[9];
            for(j=9;j>0;j--)
            {
                a[j]=a[j-1];
            }
            a[0]=temp;        
        }
    }
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
} 

 

   2. 数字加密:输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。(使用数组)

实验总结:1.我不太理解王佳诺给我讲的方法,所以第一题里我自己又多写了两个函数。

2.已看作业问题里的学习内容。

3.内层循环变量与外层循环变量不能相同。

知识点总结:1.数组初始化a[N]={0}

2.数组和循环相联系。

3.再出现a[i+1]或者a[i-1]时需要靠虑是否越界。

posted @ 2016-12-01 13:01  宁萌啊  阅读(210)  评论(5编辑  收藏  举报