第九次作业

 1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)

#include <stdio.h>
#define N 100
void intscore (int score[],int n);
void outfscore(int score[],int n);
double aver(int score[],int n);
int Maxindex(int score[],int n,int max);
int Minindex(int score[],int n,int min);
int insearch(int score[],int n);
void readScore(int score[], int n);
void printscore(int score[],int n);
int main()
{
    int i,score[N]={0},n,max,maxindex,min,minindex,search;
    double average;
    printf("请输入要统计的学生人数:
");
    scanf("%d",&n);
    intscore(score,n);
    outfscore(score,n);
    average=aver(score,n);
    max=score[0];
    maxindex=Maxindex(score,n,max);
    min=score[0];
    minindex=Minindex(score,n,min);
    search=insearch(score,n);
    readScore(score,n);
    printscore(score,n);
    return 0;
}
//输入函数 
void intscore (int score[],int n)
{
    int i; 
    for(i=0;i<n;i++)
    {
        printf("请输入学生分数:
");
        scanf("%d",&score[i]);
    }
}
//输出函数
void outfscore(int score[],int n)
{
    int i; 
    for(i=0;i<n;i++)
    {
        printf("%5d",score[i]);
    }
}
//平均值
double aver(int score[],int n) 
{
    int i,sum=0;
    double average;
    for(i=0;i<n;i++)
    {
        sum+=score[i];
    }
    average=(double)sum/n;
    //return (double)sum/n;
    printf("
%.2lf
",average);
}
//最大值
int Maxindex(int score[],int n,int max) 
{    
    int insearch=0,i;
    for(i=1;i<n;i++)
    {
        if(score[i]>max)    
        {
            max=score[i];
            insearch=i;
        }
    } 
    printf("最高分为%d,该学生为第%d号
",max,++insearch);   
}
//最小值
int Minindex(int score[],int n,int min) 
{
    int i,insearch=0;
    for(i=1;i<n;i++)
    {
        if(score[i]<min)    
        {
            min=score[i];
            insearch=i;
        }
    } 
    printf("最低分为%d,该学生为第%d号
",min,++insearch); 
}
//寻找
int insearch(int score[],int n)
{
    int grade,i,insearch;
    printf("输入你要找的分数:
"); 
    scanf("%d",&grade); 
    for(i=0;i<n;i++)
    {
        if(grade==score[i])
        {
            insearch=i+1;
        }
    }
    printf("该学生的学号为%d
",insearch); 
}
//排序
void readScore(int score[], int n)
{
    int i,j,temp;
    for(i = 0; i < n; i++)
    {
        for(j = 0; i + j < n - 1; j++)
        {
            if(score[j] > score[j + 1])
            {
                temp = score[j];
                score[j] = score[j + 1];
                score[j + 1] = temp;
            }
  
        }
    }
    return;
}
//输出函数
void printscore(int score[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%5d",score[i]);
    } 
}

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

#include <stdio.h>
#define N 100
int main()
{
    int i,n,l=0,m=0,x=0,num[N];
    for(i=1,n=0;i<N;i++,n++)
    {
        num[n]=i;
    }
    for(i=0;i<N;i++)
    {
        if(num[i]%3==0||num[i]%7==0)
        {
            num[i]=0;
            m++;
        }
    }
    for(i=0;i<N;i++)
    {
        if(num[i]==0)
        {
            continue;
        }
        x++;
        printf("%5d",num[i]);
        if(x%8==0)
        {
            printf("
");
        }
    }
    printf("
一共有%d个",(100-m));
    return 0;
}    

附加题

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

#include <stdio.h>
#define N 10
int main()
{
    int i,m,x,g,num[N]={0};
    for(i=0;i<N;i++)
    {
        num[i]=i;
    }
    printf("请输入一个数:
");
    scanf("%d",&m);
    for(i=0;i<m;i++)
    {
        x=num[9];
        for(g=9;g>0;g--)
        {
            num[g]=num[g-1];
        }
        num[0]=x;
    }
    for(i=0;i<10;i++)
    {
        printf("%2d",num[i]);
    }
    return 0;
}

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

#include <stdio.h>
#define N 4
int main()
{
    int x,n,i;
    int num[N]={0},nums[N]={0};
    printf("请输入一个四位数:
");
    scanf("%d",&n);
    while(n>9999||n<1000)
    {
        printf("输入错误!
");
        scanf("%d",&n);
    }
    for(i=3;i>=0;i--)            //分配 
    {
        num[i]=n%10;
        n=n/10;
    }
/*    for(i=0;i<4;i++)           //验证 
    {
        printf("%2d",num[i]);
    }*/
    for(i=3;i>=0;i--)
    {            
        nums[i]=(num[i]+9)%10;
    }
/*    for(i=0;i<4;i++)           //验证 
    {
        printf("%3d",nums[i]);
    }*/
    x=nums[2]*1000+nums[3]*100+nums[0]*10+nums[1]*1; 
    printf("
加密后为%d",x);
    return 0;
} 

实验总结:

1:第一个程序其实不难,就是麻烦。。。

2:附加题一里,有个循环变量g,之前用的也是i,但是发现陷入死循环。。其实之前就是想省点事少定义一个变量,,,

3:附加题二的for循环第二个语句记反了,符合条件再进行循环语句,导致输出一直是零。

4:while()         当符合()里的条件时才进行循环。

   

     程序分析:

结果:

  程序1结果:a【0】=2,a【1】=1。

  程序2结果:a【0】=1,a【1】=2.

分析:数组在调用函数中作为参数被传递是双向传递,若做修改则返回原数组后,被修改的数组项数值改变。

   单纯的简单变量作为参数被传递则是单向传递,在调用函数中被修改,主函数中的变量值无变化。

原文地址:https://www.cnblogs.com/yanchao980817/p/6128449.html