作业(九)

1.

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

实验代码:

#include<stdio.h>
#define N 100
void student(int score[],int n);
double average(int score[],int n);
int findmax(int score[],int n);
int findmin(int score[],int n);
int findmaxinder(int score[],int n,int max);
int findmininder(int score[],int n,int min);
int findstudent(int score[],int n,int x);
void order(int score[],int n);
void grade(int score[],int n);
int main()
{
    int score[N]={0},n,x,i,max,min;
    double ave;
    printf("请输入学生的数量。
");
    scanf("%d",&n);  
    student(score,n);
    ave=average(score,n);
    printf("考试成绩的平均分为%.2f。
",ave);
    printf("请输入您所查询学生的考试成绩:
");
    scanf("%d",&x);
    findstudent(score,n,x);
    max=findmax(score,n);
    min=findmin(score,n);
    findmaxinder(score,n,max);
    findmininder(score,n,min);
    printf("成绩从小到大排序是:"); 
    order(score,n);
    grade(score,n);
    return 0;
}
void student(int score[],int n)
{
    int i;
    printf("请输入考试成绩:
");
    for(i=0;i<n;i++)        
    {
        scanf("%d",&score[i]);
    }
}
double average(int score[],int n)
{
    int i,sum=0;
    for(i=0;i<n;i++)        
    {
        sum=sum+score[i];
    }
    return (double)sum/n;
}
int findmax(int score[],int n)
{
    int i,a;
    a=score[0];
    for(i=1;i<n;i++)
    {
        if(score[i]>a)
        {
            a=score[i];
        }
    }
    return a;
}
int findmin(int score[],int n)
{
    int i,a;
    a=score[0];
    for(i=1;i<n;i++)
    {
        if(score[i]<a)
        {
            a=score[i];
        }
    }
    return a;
}
int findmaxinder(int score[],int n,int max)
{
    int i,a; 
    for(i=0;i<n;i++)
    {
        if(score[i]==max)
        {
            a=i+1; 
            printf("成绩最高是%d分,是第%d名同学。
",max,a);
        }
    }
}
int findmininder(int score[],int n,int min)
{
    int i,a; 
    for(i=0;i<n;i++)
    {
        if(score[i]==min)
        {
            a=i+1; 
            printf("成绩最低是%d分,是第%d名同学。
",min,a);
        }
    }
}
int findstudent(int score[],int n,int x)
{
    int i,y=0;
    for(i=0;i<n;i++)
    {
        if(score[i]==x)
        {
            y=i+1;
            printf("您所查询学生的是第%d名输入的成绩。
",y);
        }
    }
    if(y==0)
    {
        printf("您所查询学生的考试成绩不存在。
");
    }
}
void order(int score[],int n)
{
    int i,j,temp;
    for(i=0;i<n-1;i++) 
    {
        for(j=0;j<n-1-i;j++) 
        {
            if (score[j]>score[j+1])
            {
                temp=score[j];
                  score[j]=score[j+1];
                  score[j+1]=temp;
            }
          }
    }
}
void grade(int score[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%d ",score[i]);
    } 
}

实验截图:

2.

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

实验代码:

#include<stdio.h>
#define N 100int main()
{
    int sum[100]={0},i,j=1,n=0,m=0,x=0,y;
    for(i=0;i<100;i++)        
    {
        sum[i]=j;
        j++;
    }
    for(i=0;i<100;i++) 
    {
        m=sum[i]%3;
        n=sum[i]%7;
        if(m==0||n==0)
        {
            sum[i]=0;
        }
    }
    for(i=0;i<100;i++)
    {
        if(sum[i]==0)
        {
            continue;
        }
        else
        {
            printf(" %03d",sum[i]);
            x++;
            y++;
        }
        if(y%10==0)
        {
            printf("
");
        }
    } 
    printf("
 一共有%d个数字。
",x);
    return 0;
}

实验截图:

 附加题

1.

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

实验代码:

#include<stdio.h>
#include<stdlib.h>
#define N 100
int main()
{
    int m,n,sum[N]={0},i,j=1,temp;
    printf("请输入数组元素的个数。
");
    scanf("%d",&n);
    printf("请输入你所要移动的位数。
");
    scanf("%d",&m);
    if(m>n)
    {
        printf("输入错误。
");
        exit(0);
    }
    for(i=0;i<n;i++)        
    {
        sum[i]=j;
        j++;
    }
    for(j=1;j<=m;j++)
    {
        temp=sum[n-1];
        for(i=n-1;i>0;i--)
           {
            sum[i]=sum[i-1];
        }    
        sum[0]=temp;
    }
    for(i=0;i<n;i++)
    {
        printf(" %02d",sum[i]);    
    }
    return 0;
}

实验截图:

2.

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

实验代码:

#include<stdio.h>
#include<stdlib.h>
#define N 4
int main()
{
    int x,y=0,sum[4],a,b,i,c,temp;
    printf("请输入一个四位数,进行加密。
");
    scanf("%d",&x);
    if(x>9999||x<1000)
    {
        printf("您输入有错,请重新输入。"); 
        exit(0);
    }
    for(i=0;i<4;i++)
    {
        b=x;
        a=(b%10+9)%10;
        sum[i]=a;
        x=b/10;
    }
    for(i=3;i>=2;i--)
    {
        temp=sum[i];
        sum[i]=sum[i-2];
        sum[i-2]=temp;
    }
    for(i=3;i>=0;i--)
    {
        c=sum[i];
        y=c+10*y;
    }
    printf("经过加密后为:%d
",y);
    return 0;
}

实验截图:

实验结论:

1.注意返回值用int,不用返回值用void。

2.注意不要出现数组的越界。

3.注意随机变量的改变,函数不要只能运行一次。

4.注意函数输入时要注意带入的是数组,而不是元素。

5.注意函数的赋初值问题。

6.注意程序的优化以及验证函数的合法性,符号是否注意全角半角。

程序分析:

第一个程序

a[0]=2

a[1]=1

第一个程序的换数是数组内元素的代换,也就是函数里是数组代换,因为输入的也是数组,所以数组x[0]与x[1]可以进行交换。

第二个程序

a[0]=1

a[1]=2

第二个程序的换数是元素与元素的代换,也就是实参的代换,而输入的是数组,所以x,y并没有赋予数值。所以直接进行的是输出。

因为程序的实参和形参的定义不同,所以两个程序的运行结果不同。

原文地址:https://www.cnblogs.com/wgy774553994/p/6111918.html