作业9

 

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

#include <stdio.h>
#define N 100
void readScore(int score[], int n);
double average(int score[],int n);
int findMax(int score[],int n);
int findMaxIndex(int score[],int n);
int findMin(int score[],int n);
int findMinIndex(int score[],int n);
int findscore(int score[],int n);
void bubbleSort(int score[],int n);
void print(int score[],int n);
int main ()
{
int score[N],n,max,maxIndex,min,minIndex,i,a[N];
double ave;
printf ("请输入人数 ");
scanf ("%d",&n) ;
printf("请输入成绩 ") ;
readScore(score,n);
ave=average(score,n);
{
printf("average is %.lf ",ave);
}
max=findMax(score,n);
{
printf("max is %d ",max);
}
maxIndex=findMaxIndex(score,n);
{
printf("maxindex is %d ",maxIndex);
}
min=findMin(score,n);
{
printf("min is %d ",min);
}
minIndex=findMinIndex(score,n);
{
printf("minindexis %d ",minIndex);
}
i=findscore(score,n);
bubbleSort(score,n) ;
print(score,n);
return 0;
}
void readScore(int score[], int n)
{
int i;
for(i=0;i<n;i++)
{
scanf("%d",&score[i]);
}
}
double average(int score[],int n)
{
int i,sum;
double ave;
sum = 0;
for(i=0;i<n;i++)
{
sum+=score[i];
}
ave=(double)sum/n;
return ave;
}
int findMax(int score[],int n)
{
int i;
int max;
max=score[0];
for(i=1;i<n;i++)
{
if(score[i]>max)
{
max=score[i];
}
}
return max;
}
int findMaxIndex(int score[],int n)
{
int i,maxIndex;
maxIndex=0;
for(i=1;i<n;i++)
{
if(score[i]>score[maxIndex])
{
maxIndex=i;
}
}
return maxIndex;
}
int findMin(int score[],int n)
{
int i;
int min;
min=score[0];
for(i=1;i<n;i++)
{
if(score[i]<min)
{
min=score[i];
}
}
return min;
}
int findMinIndex(int score[],int n)
{
int i,minIndex;
minIndex=0;
for(i=1;i<n;i++)
{
if(score[i]<score[minIndex])
{
minIndex=i;
}
}
return minIndex;
}
int findscore(int score[],int n)
{
int x,i;
printf("input score ");
scanf ("%d",&x);
for(i=0;i<n;i++)
{
if (score[i]==x)
{
printf("the number is %d ",i);
}
if(score[i]!=x)
{
printf("输入错误 ");
}
}
return 0;
}
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];
score[j]=score[j+1];
score[j+1]=t;
flag=1;
}
}
if(flag==0)
break;
}
}
void print(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 a[N],i,j=0;
    for(i=0;i<N;i++)
    {
        a[i]=i+1;
        if(a[i]%3!=0&&a[i]%7!=0)
        {
            printf("%3d  ",a[i]);
            j++;
        }
         
    }
    printf("
共有%d个
",j);
    return 0;
}

附加题

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

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

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

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

程序分析:

   程序1     

#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;
}

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

  分析上述两个程序的执行结果。说明为什么?

程序分析:第一个程序中函数用了数组,内容可以被交换,第二个程序中没有运用数组定义函数,导致主函数中内容没有实现交换。

实验总结:

1.定义函数时要想清楚有没有返回值.

2.数字的初始值一定要定义.

3.字符的类型要想好.

4.尽量简化程序 ,比如相同的循环可以直接套在一个循环里.

原文地址:https://www.cnblogs.com/wp980327/p/6131336.html