谁有c语言程序设计苏小红版第8单元课后实验题答案

Python012

谁有c语言程序设计苏小红版第8单元课后实验题答案,第1张

#include <stdio.h>

#define N 30

int Average(int score[], int n)/* Average()函数原型 */

void ReadScore(int score[], long num[],int n)/* ReadScore()函数原型 */

void DataSort(int score[], long num[], int n)

void PrintScore(int score[], long num[], int n)

void DataNum(int score[], long num[], int n)

void PrintNum(int score[], long num[], int n)

void SearchNum(int score[],long num[],int n)

void Statistics(int score[], int n)

void List(int score[], long num[], int n)

int main()

{

int choice,n,score[N], aver=0,i,sum=0

long num[N]

do

{

printf("1: Append record\n")

printf("2: Caculate total and average score of course\n")

printf("3: Sort in descending order by score\n")

printf("4: Sort in ascending order by number\n")

printf("5: Search by number\n")

printf("6: Statistic analysisc\n")

printf("7: List record\n")

printf("0: Exit\n")

scanf("%d",&choice)

switch(choice)

{

case 1:printf("Total students are:")

scanf("%d",&n)

ReadScore (score,num,n)

break

case 2:aver = Average(score, n)

printf("Average score is %d\n",aver)

for (i=0i<ni++)

{

sum += score[i]

}

printf("Caculate total score is %d\n",sum)

break

case 3:DataSort(score,num,n)

printf("Sorted scores :\n")

printf(" number:score: \n")

PrintScore(score,num,n)

break

case 4:DataNum(score,num,n)

printf("Sorted number :\n")

printf(" number:score: \n")

PrintNum(score,num,n)

break

case 5:SearchNum(score,num,n)

break

case 6:Statistics(score, n)

break

case 7:List(score,num,n)

break

case 0:break

}

}while(choice!=0)

return 0

}

/* 1、函数功能:输入n个学生的学号及某门课成绩 */

void ReadScore(int score[], long num[],int n)

{

int i

for(i=0i<ni++)

{

printf("Input student's ID and score:")

scanf("%ld%d",&num[i],&score[i])

}

}

/* 2、函数功能:计算课程的总分和平均分 */

int Average(int score[], int n) /* Average()函数定义 */

{

int i, sum = 0

for (i=0i<ni++)

{

sum += score[i]

}

return sum / n

}

/* 3、函数功能:成绩由高到低排序 */

void DataNum(int score[], long num[], int n)

{

int i,j,k,temp1

long temp2

for(i=0i<n-1i++)

{

k=i

for(j=i+1j<nj++)

{

if (score[j]>score[k])

{

k=j

}

}

if(k!=i)

{

temp1=score[k]score[k]=score[i]score[i]=temp1

temp2=num[k]num[k]=num[i]num[i]=temp2

}

}

}

/* 函数功能:显示排序后学生学号和成绩 */

void PrintNum(int score[], long num[], int n)

{

int i

for(i=0i<ni++)

{

printf(" %10ld%4d\n",num[i],score[i])

}

}

/* 4、函数功能:学号由小到大排序 */

void DataSort(int score[], long num[], int n)

{

int i,j,k,temp1

long temp2

for(i=0i<n-1i++)

{

k=i

for(j=i+1j<nj++)

{

if (num[j]<num[k])

{

k=j

}

}

if(k!=i)

{

temp1=num[k]num[k]=num[i]num[i]=temp1

temp2=score[k]score[k]=score[i]score[i]=temp2

}

}

}

/* 函数功能:显示排序后学生学号和成绩 */

void PrintScore(int score[], long num[], int n)

{

int i

for(i=0i<ni++)

{

printf(" %10ld%4d\n",num[i],score[i])

}

}

/* 5、函数功能:按学号查询学生排名及其成绩*/

void SearchNum(int score[],long num[],int n)

{

long number

int i

printf("Please input the number you want to search:")

scanf("%ld",&number)

for(i=0i<ni++)

{

if(num[i]==number)

{

printf("%ld %d\n",num[i],score[i])

return

}

}

printf("\nNot found!\n")

}

/* 6、函数功能:统计个人类别的人数以及所占的百分比*/

void Statistics(int score[], int n)

{

int i,a=0,b=0,c=0,d=0,e=0

for(i=0i<ni++)

{

if(score[i]>=90)

{

a++

}

else if(score[i]>=80)

{

b++

}

else if(score[i]>=70)

{

c++

}

else if(score[i]>=60)

{

d++

}

else

{

e++

}

}

printf("优秀人数:%d\t占:%.3f%%\n良好人数:%d\t占:%.3f%%\n中等人数:%d\t占:%.3f%%\n及格人数:%d\t占:%.3f%%\n不及格人数:%d\t占:%.3f%%\n",a,(float)100*a/n,b,(float)100*b/n,c,(float)100*c/n,d,(float)100*d/n,e,(float)100*e/n)

}

/* 7、函数功能:输入学生学号、成绩、总分、平均分*/

void List(int score[], long num[], int n)

{

int i, j=0

for(i=0i<ni++)

{

printf("学号:%ld\t考试成绩:%d\n",num[i],score[i])

j+=score[i]

}

printf("课程总分:%d\n平均分:%.3f\n",j,(float)j/n)

}

1实验目的:熟练掌握一维数组,二维数组的定义,初始化和输入输出方法熟练掌握与数组有关的常用算法(如查找,排序等)。

2实验内容:设定一个整形数组存放20个元素,用直接赋值的方法在程序中初始化该数组。先对这些无序的数据进行排序,然后采用折半查找,把要寻找的数的位置输出出来。

3算法描述流程图

源程序:#include<stdio.h>

void main()

{int k,s,b,i,j,m,n,a[20]={12,9,16,21,6,11,19,4,8,20,15,2,5,18,14,7,3,10,13,17}

for(s=0s<20s++)

{

for(i=s+1i<20i++)

{

if(a[s]>a[i])

{

j=a[s]

a[s]=a[i]

a[i]=j

}

}

}

scanf("%d",&b)

m=0

n=19

while(m<=n)

{

k=(m+n)/2

if(b==a[k])

{

printf("FOUND\n")

printf("%d\n",k+1)

break

}

else

{

if(b<a[k])

n=k-1

else

m=k+1

}

if(m>n)

printf("NO FOUND")

}

}

5测试数据:3,5, 20,30

6运行结果:FOUND 2FOUND 4FOUND 19 NO FOUND

7出现问题及解决方法:编译时出错,修改源程序,直到没有错误为止

8实验心得:通过折半查找,可以实现对数组数据的处理,并且增加了查找速度

//线性表函数操作

#include <stdio.h>

#include <string.h>

#define MaxSize 30

#define Error 0

#define True 1

typedef char ElemType

typedef struct

{

ElemType elem[MaxSize]

int length

}SqList/*顺序表类型定义*/

void InitList(SqList * &L) /*初始化顺序表L*/

{

L = (SqList *)malloc(sizeof(SqList))

L ->length = 0

}

void DestroyList( SqList *L ) /*释放顺序表L*/

{

free(L)

}

int ListEmpty( SqList *L )/*判断顺序表L是否为空表*/

{

return( L ->length == 0)

}

int ListLength( SqList *L ) /*返回顺序表L的元素个数*/

{

return( L ->length)

}

void DispList( SqList *L )/*输出顺序表L*/

{

int i

if( ListEmpty(L))

return

for( i = 0i <L ->lengthi++ )

printf("%c", L ->elem[i])

printf("\n")

}

int GetElem( SqList *L, int i, ElemType &e) /*获取顺序表中的第i个元素*/

{

if( i <1 || i >L ->elem[i])

return Error

e = L ->elem[i - 1]

return True

}

int LocateElem( SqList *L, ElemType e) /*在顺序表中查找元素e*/

{

int i = 0

while( i <L ->length &&L ->elem[i] != e)

i++

if(i >= L ->length)

return Error

else

return i+1

}

int ListInsert( SqList * &L, int i, ElemType e) /*在顺序表L中第i个位置插入元素e*/

{

int j

if( i <1 || i >L ->length + 1)

return 0

i-- /*将顺序表位序转化为elem下标*/

for( j = L ->lengthj >ij--)/*将elem[i]及后面元素后移一个位置*/

L ->elem[j] = L ->elem[j - 1]

L ->elem[i] = e

L ->length++ /*顺序表长度增1*/

return True

}

int ListDelete( SqList * &L, int i, ElemType &e) /*顺序表L中删除第i个元素*/

{

int j

if( i <1 || i >L ->length)

return Error

i-- /*将顺序表位序转化为elem下标*/

e = L ->elem[i]

for(j = ij <L ->length - ij++)

L ->elem[j] = L ->elem[j + 1]

L ->length-- /*顺序表长度减1*/

return True

}

void main()

{

SqList *L

ElemType e

printf("(1)初始化顺序表L\n")

InitList(L)

printf("(2)依次采用尾插法插入a,b,c,d,e元素\n")

ListInsert(L, 1, 'a')

ListInsert(L, 2, 'b')

ListInsert(L, 3, 'c')

ListInsert(L, 4, 'd')

ListInsert(L, 5, 'e')

printf("(3)输出顺序表L:")

DispList(L)

printf("(4)顺序表L长度 = %d\n", ListLength(L))

printf("(5)顺序表L为%s\n", (ListEmpty(L) ?"空" :"非空"))

GetElem(L, 3, e)

printf("(6)顺序表L的第3个元素 = %c\n", e)

printf("(7)元素a的位置 = %d\n", LocateElem(L,'a'))

printf("(8)在第4个元素位置上插入f元素\n")

ListInsert(L, 4, 'f')

printf("(9)输出新的顺序表L:")

DispList(L)

printf("(10)删除L的第3个元素\n")

ListDelete(L, 3, e)

printf("(11)输出新的顺序表L:")

DispList(L)

printf("(12)释放顺序表L\n")

DestroyList(L)

}