第九次作业

实验一:

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

#include<stdio.h>
#define N 100
int readScore(int score[],int n);//输入函数
void printScore(int score[],int n);//浏览函数
double average(int score[],int n); //计算平均值函数
int findmin(int score[],int n);//计算最小值函数
void findminlndex(int score[],int n);//计算多个最小值下标
int findmax(int score[],int n);//求最高分 
void findmaxlndex(int score[],int n);//计算多个最大值下标 
void findscore(int score[],int n);//查找函数 
void bubblesort(int score[],int n);//排序函数 
int main()
{
    int score[N]={0},n,min,max,maxlndex;
    double average1;
    printf("请输入学生人数n:
");
    scanf("%d",&n);
    readScore(score,n);
    bubblesort(score,n);
    average1=average(score,n);
    printf("这%d名学生的平均成绩是%.2lf
",n,average1);
    min=findmin(score,n);
    max=findmax(score,n);
    printf("最低分是%d,最高分是%d
",min,max);
    findminlndex(score,n);
    findmaxlndex(score,n);
    findscore(score,n);
    return 0;
}
int readScore(int score[],int n)
{
    int i;
    printf("请输入编分数:
");
    for(i=0;i<n;i++)
    {
        scanf("%d",&score[i]);
    }
    return i;
}
void bubblesort(int score[],int n)
 {
     int i,j,t,flag;
     for(i=0;i<n-1;i++)
     {
         flag=0;
         for(j=0;j<n-1-i;j++)
         {
             if(score[j]>score[j+1])
             {
                 t=score[j+1];
                 score[j+1]=score[j];
                 score[j]=t;
                 flag=1;
             }
         }
         if(flag==0)
         {
             break;
         }
     }
     for(i=0;i<n;i++)
     {
         printf("%d号:%d
",i,score[i]);
      } 
 }
double average(int score[],int n)
{
    int i,sum;
    sum=0;
    for(i=0;i<n;i++)
    {
        sum+=score[i];
    }
    return (double)sum/n;
}
int findmin(int score[],int n)
{
     int i,min;
     min=score[0];
     
     for(i=0;i<n;i++)
     {
         if(min>score[i]) 
         {
             min=score[i];
         }
    }
    return min;
} 
void findminlndex(int score[],int n)
{
    int i,min;
    min=findmin(score,n);
    printf("最低分的同学有:
");
    for(i=0;i<n;i++)
    {
        if(score[i]==min)
        {
            printf("第%d为学生 ",i+1);
        }
    }
    printf("
");
}
int findmax(int score[],int n)
 {
     int i,max;
     max=score[0];
     for(i=1;i<n;i++)
     {
         if(score[i]>max)
         {
             max=score[i];
         }
    } 
    return max;
 } 
void findmaxlndex(int score[],int n)
{
    int i,max;
    max=findmax(score,n);
    printf("最高分有:
");
    for(i=0;i<=n;i++)
    {
        if(score[i]==max)
        {
            printf("第%d名学生 ",i+1);
        }
    }
    printf("
");
 } 
 void findscore(int score[],int n)
 {
     int i,score1,flag=0;
     printf("请输入你要查找的分数:
");
     scanf("%d",&score1);
     printf("该分数的有:
");
     for(i=0;i<n;i++)
     {
         if(score[i]==score1)
         {
             printf("第%d位学生
",i+1);
             flag=1;
         }
     }
     if(flag==0)
     printf("没有改分数的学生
");
 } 

实验二:

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

#include<stdio.h>
#define N 100
int main()
{
    int a[N],i,x=0;
    for(i=0;i<100;i++)
    {
        a[i]=i+1;
        if(a[i]%7==0||a[i]%3==0)
        {
            continue;
        }
        else
        {
            printf("%2d  ",a[i]);
            x++;
            if(x%10==0)
            {
                printf("
");
             } 
        }
     } 
     printf("
还剩余%d个数字",x);
     return 0;
}

附加题

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

#include<stdio.h>
int main()
{
    int a[10]={0},i,n,j,k,t;
    for(i=0;i<10;i++)
    {
        a[i]=i+1;
        printf("%d ",a[i]);
    }
    printf("
请输入要移出几位:
");
    scanf("%d",&n);
    for(j=0;j<n;j++)
    {
        t=a[9];
        for(k=9;k>0;k--)
        {
            a[k]=a[k-1];
        }
        a[0]=t;
    }
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
 } 

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

#include<stdio.h>
int main()
{
    int a[4],num,num1;
    printf("请输入一个四位数:
");
    scanf("%d",&num);
    a[0]=(num%10+9)%10;//
    a[1]=(num%100/10+9)%10;//
    a[2]=(num/100%10+9)%10;//
    a[3]=(num/1000+9)%10;//
    num1=a[1]*1000+a[0]*100+a[3]*10+a[2];
   printf("加密后的数为%d",num1);return 0;
    
}

实验总结:

1  在使用数组写函数时一定要注意到不要让数组越界

2  写函数时在无返回值时用void型

3  冒泡排序需要循环嵌套,内层循环是第一次找到一个最值得二次找到次最值……外层循环控制趟数

4  对数组中的数移位时要从后往前一个一个替换,不能从前往后替换

程序分析:

#include <stdio.h>
void swap(int x[]);
int main()
{  
     int a[2]={1,2};
    swap(a);
    printf("a[0]=%d
a[1]=%d
",a[0],a[1]);
    return 0;
}
void swap(int x[])
{   
    int z;
    z=x[0];     
    x[0]=x[1];     
    x[1]=z;
}

该程序能够完成交换是函数将实参录入地址传给形参,通过函数完成数组中两个数的交换;

#include <stdio.h>
void swap(int x,int y);
int main()
{
    int a[2]={1,2};
    swap(a[0],a[1]);
    printf("a[0]=%d
a[1]=%d
",a[0],a[1]);
    return 0;
}
void swap(int x,int y)
{  
     int z;
     z=x;
     x=y; 
     y=z;
}

该程序没有完成交换是因为程序只是吧形参的值给啦形参,录入地址并没有与函数同步,所以没有完成交换

原文地址:https://www.cnblogs.com/myfdpk/p/6127609.html