首页 > 代码库 > 2016-12-04

2016-12-04

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

#include <stdio.h>
#define N 100
void readscore(int score[],int n);   //输入函数 
double average(int score[],int n);    //平均值 
int maxscore(int score[],int n);    //最大值 
int maxindex(int score[],int n);     //最大下标 
int minscore(int score[],int n);     //最小值 
int minindex(int score[],int n);      //最小下标 
int search(int num[],int n,int x);     //查询 
void bubblesort(int score[],int n);     //升序 
void printscore(int score[],int n);      //输出函数   
int main()
{
    int score[N],n,max,max1,min,min1,m,x;
    double ave;
    printf("请输入成绩个数\n");
    scanf("%d",&n);
    readscore(score,n);
    ave=average(score,n);
    max=maxscore(score,n);
    max1=maxindex(score,n);
    min=minscore(score,n);
    min1=minindex(score,n);
    printf("平均值为%.2f,最大值为%d,最大下标为%d,最小值为%d,最小下标为%d\n",ave,max,max1,min,min1);
    printf("请输入一个成绩\n");
    scanf("%d",&x); 
    m=search(score,n,x);
    printf("该学生下标为%d\n",m);
    bubblesort(score,n);     
    printscore(score,n);      
    return 0;
}
void readscore(int score[],int n)  //输入函数 
{
    int i=0;
    printf("请输入成绩\n");
    for(i=0;i<n;i++)
    {
        scanf("%d",&score[i]);
    }
}
double average(int score[],int n)    //平均值 
{
    int i;
    double sum;
    sum=0;
    for(i=0;i<n;i++)
    {
        sum=sum+score[i];
    }
    return (double)sum/n;
}
int maxscore(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 maxindex(int score[],int n)     //最大下标 
{
    int i, maxdex=0;
    for(i=1;i<n;i++)
    {
        if(score[i]>score[maxdex])
        {
            maxdex=i;
        }
    }
    return maxdex;
}
int minscore(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;
}
int minindex(int score[],int n)      //最小下标 
{
    int i,mindex=0;
    for(i=1;i<n;i++)
    {
        if(score[i]<score[mindex])
        {
            mindex=i;
        }
    }
    return mindex;
}
int search(int num[],int n,int x)     //查询 
{
    int i;
    for(i=0;i<n;i++)
    {
        if(num[i]==x)
        {
            return i;
        }
    }
    return -1;
}
void bubblesort(int score[],int n)     //升序
{
    int i,j,t,flag;
    for(i=0;i<n;i++)
    {
        flag=0;
        for(j=0;j<n-1;j++)
        {
            if(score[j]>score[j+1])
            {
                t=score[j];
                score[j]=score[j+1];
                score[j+1]=t;
                flag=1;
            }
        }
        if(flag==0)
        {
            break;
        }
    }
}
void printscore(int score[],int n)        //输出函数
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%5d",score[i]);
    }
    printf("\n");
}

 

技术分享

总结:注意有返回值和没有返回值的函数该如何调用    写代码的时候循环嵌套弄错了

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

 

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

 

技术分享

 总结:利用循环给数组赋值,还要注意a++放的位置

附加题

 

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

#include <stdio.h>
#define N 10
int main()
{
    int arr[N],i,j=0,m,t;
    printf("原数组为:\n");
    for(i=0;i<N;i++)
    {
        j++;
        arr[i]=j;
    }
    for(i=0;i<N;i++)
    {
        printf("%d  ",arr[i]);
    }
    printf("\n");
    printf("请输入后移位置m\n");
    scanf("%d",&m);
     for(j=1;j<=m;j++)
    {
        t=arr[N-1];
        for(i=N-1;i>0;i--)
           {
            arr[i]=arr[i-1];
        }    
        arr[0]=t;
    }

    printf("新数组为:\n");
    for(i=0;i<N;i++)
    {
        printf("%d  ",arr[i]);
    }
    printf("\n");  
    return 0;
}

 

技术分享

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

#include <stdio.h>
int main()
{
    int i,brr[4];
    char arr[4];
    printf("请输入一个四位数\n");
    for(i=0;i<4;i++)
    {
        scanf("%c",&arr[i]);
        brr[i]=(arr[i]-48+9)%10;
    }
    printf("%d%d%d%d",brr[2],brr[3],brr[0],brr[1]);
    printf("\n");
    return 0;
}

技术分享

总结:定义输入的数组时可以定义成char型的才能连续输出一串数字     运算的时候要注意转化成数字 

三、程序分析

     程序1

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

技术分享

实验分析:定义了一个数组,并给数组赋初值,通过用函数将数组内的两个数字互换位置输出(实参定义的是数组)

  程序2 

#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\na[1]=%d\n",a[0],a[1]);
    return 0;
}
void swap(int x,int y)
{  
     int z;
     z=x;
     x=y; 
     y=z;
}

技术分享

实验分析:实参传的是数组传的是地址引用,传两个数字的话只是在方法区换了两个数,一退键就清空了,主函数中的两个数还是没有变。

2016-12-04