实验7_数组的应用(参考答案)

合集下载

C语言程序设计实验指导书参考答案_第二版

C语言程序设计实验指导书参考答案_第二版
数的整除由键盘输入个整数逐个判断它们能否被27整除能的输出yes不能的输出no注意输出时一个判断结果占一行5个数的判断共占5第一组自测数据键盘输入271757732554正确输出yesyesyes第二组自测数据键盘输入271757732554正确输出yesyesyes提示整除即除得余数为0参考程序
C 语言程序设计 上机实验指导与习题(第二版) 参考答案(仅供教师内部参考)来自华南农业大学目 录
上机实验 ................................................................................................................................................................... 1 实验 1 C 语言程序初步 .................................................................................................................................... 1 一、实验目的............................................................................................................................................ 1 二、实验内容.................................................................................................................................

实验7 数组(2)-参考答案

实验7 数组(2)-参考答案

上机实验八二维数组与字符数组—参考答案一.目的要求1.掌握二维数组的基本概念,如何定义二维数组,如何初始化二维数组。

2.掌握二维数组的基本操作:引用数组元素、行(列)求和,行(列)最大最小值,整个数组的输入输出等。

3.掌握与二维数组有关的算法,如找最大最小值(或位置)、矩阵转置等。

4.掌握字符串与字符数组的基本应用方法5.掌握字符串有关的算法,如字符转换、查询、统计和进制转换等二.实验内容【实验题1】程序填空:输入一个4×4矩阵,求出主对角线上的元素之和sum1、副对角线上的元素之和sum2,并输出结果。

提示:每一行只有一个主对角线元素a[i][i](特征:i==j),也仅有一个副对角线元素a[i][n-i-1](特征:i+j==n-1,即j=n-1-i)源程序:#include<stdio.h>void main(){ int i,j,sum1=0,sum2=0, a[4][4];printf("Input a 4*4 matrix:\n");for(i=0;i<4;i++ ) //输入矩阵元素for(j=0;j<4;j++ )scanf("%d", &a[i][j]);for(i=0; i<4; i++ ){ //计算sum1和sum2sum1 +=a[i][i] ;sum2 +=a[i][3-i] ;}printf("sum1=%d, sum2=%d\n", sum1,sum2); //输出结果}运行程序,并输入数据: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16运行结果:sum1= , sum2=【实验题2】程序填空:打印杨辉三角形前10行:11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1……………………算法提示:分析一个10行的杨辉三角,需要一个10×10的二维矩阵a,则:1)杨辉三角为下三角矩阵,只需要求出第i行(i=0,1,2,…,9)前i+1个元素,即a[i][j]!=0 (j=0…i). 2)每行的第0列元素均为1,即a[i][0]=1;3)每行的主对角线元素也均为1,即a[i][i]=1;4)从第2行开始,每行夹在第0列元素与主对角线元素之间的元素a[i][j]( i=2,3,…,9, j=1,..,i-1 ) 等于其左上方元素a[i-1][j-1]与正上方元素a[i-1][j]之和,即a[i][j]=a[i-1][j-1]+a[i-1][j];5)输出该矩阵的下三角,即得出杨辉三角的前10行。

实验报告07答案

实验报告07答案

实验报告07:数组一、实验目的1.理解数组的作用是用于保存大批量数据。

2.能够使用一维数组编写程序。

二、实验内容1.语句“Dim A(-2 To 3) As Integer”定义的数组包括__ 6 个数组元素。

2.定义一个类型为字符型的一维数组A,共有5个元素,语句为Dim A(4) as String 。

3.要使本窗体中数组缺省的下界为1,必须在窗体的通用部分输入语句Option Base 1 。

4.引用一维数组中的元素,下标可以是__ D ____。

(A)常量(B)变量(C)表达式(D)以上都行5.下面程序定义了一个包含10个元素的数组,并将a(1)赋值为1、a(2)赋值为3、a(3)赋值为5、……、a(10)赋值为19。

请完成该程序。

Dim a(1 to 10) As IntegerFor k=1 To 10a(k)=2*k-1Next k6.以下程序段的输出结果是 2 12 30 56 90 。

Private Sub Command1_Click()Dim num(1 To 10) As Integer, k As IntegerFor k = 1 To 10num(k) = k * (k + 1)Next kFor k = 1 To 10 Step 2Print num(k);Next kEnd Sub7.以下程序段的输出结果是8 42 。

Private Sub Command1_Click()Dim num(1 To 5) As Integer, k As Integernum(1)=1For k =1 To 4num(k+1) = num(k)*2 + k Next kPrint num(3); num(5)End Sub 班级:姓名:学号:三、思考题1.求斐波拉契数列的前20项。

其数列形式为:1,1,2,3,5,8,13,21,34,……要求:事件代码由窗体的单击事件触发。

在窗体中每行输出10个数。

实验7 数组的应用(参考答案)

实验7 数组的应用(参考答案)

实验七数组的应用(参考答案)[实验任务一]:程序跟踪调试实例7-1:error7_1.c参考答案程序跟踪调试实例7-2:error7_2.c参考答案[实验任务二]:程序填空实例7-1:blank7_1.c参考答案程序填空实例7-2:blank7_2.c参考答案程序填空实例7-3:blank7_3.c参考答案程序填空实例7-4:blank7_4.c参考答案程序填空实例7-5:blank7_5.c参考答案[实验任务三]:编程实例7-1:meld.c参考答案编程实例7-2:DtoB.c参考答案编程实例7-3:match.c参考答案编程实例7-4:matrix.c参考答案编程实例7-5:rewrite.c参考答案编程实例7-6:string.c参考答案编程实例7-7:phalanx.c参考答案编程实例7-8:yanghui.c参考答案[实验任务四]:设计程序实例7-1:学生成绩统计cjtj.c(一维数组和函数综合编程练习)参考答案#include <stdio.h>#define ARR_SIZE 30int ReadScore(int num[], float score[]);int GetFail(int num[], float score[], int n);float GetAver(float score[], int n);int GetAboveAver(int num[], float score[], int n);void GetDetail(float score[], int n);void main(){int n, num[ARR_SIZE], fail, aboveAver;float score[ARR_SIZE];printf("Please enter num and score until score<0:\n");n = ReadScore(num, score);printf("Total students:%d\n", n);fail = GetFail(num, score, n);printf("Fail students = %d\n", fail);aboveAver = GetAboveAver(num, score, n);printf("Above aver students = %d\n", aboveAver);GetDetail(score, n);}/*函数功能:从键盘输入一个班学生某门课的成绩及其学号,当输入成绩为负值时,输入结束函数参数:整型数组num,存储学生学号 ; 实型数组score,存储学生成绩函数返回值:学生总数*/int ReadScore(int num[], float score[]){int i = 0;scanf("%d%f", &num[i], &score[i]);while (score[i] >= 0){i++;scanf("%d%f", &num[i], &score[i]);}return i;}/*函数功能:统计不及格人数并打印不及格学生名单函数参数:整型数组num,存储学生学号实型数组score,存储学生成绩整型变量n,学生总数函数返回值:不及格人数*/int GetFail(int num[], float score[], int n){int i, count;printf("Fail:\nnumber--score\n");count = 0;for (i=0; i<n; i++){if (score[i] < 60){printf("%d------%.0f\n", num[i], score[i]);count++;}}return count;}/*函数功能:计算全班平均分成绩函数参数:实型数组score,存储学生成绩整型变量n,学生总数函数返回值:平均分*/float GetAver(float score[], int n){int i;float sum = 0;for (i=0; i<n; i++){sum = sum + score[i];}return sum/n;}/*函数功能:统计成绩在全班平均分及平均分之上的学生人数并打印其学生名单函数参数:整型数组num,存储学生学号实型数组score,存储学生成绩整型变量n,学生总数函数返回值:成绩在全班平均分及平均分之上的学生人数*/int GetAboveAver(int num[], float score[], int n){int i, count;float aver;aver = GetAver(score, n);printf("aver = %f\n", aver);printf("Above aver:\nnumber--score\n");count = 0;for (i=0; i<n; i++){if (score[i] >= aver){printf("%d------%.0f\n", num[i], score[i]);count++;}}return count;}/*函数功能:统计各分数段的学生人数及所占的百分比函数参数:实型数组score,存储学生成绩整型变量n,学生总数函数返回值:无*/void GetDetail(float score[], int n){int i, j, stu[6];for (i=0; i<6; i++){stu[i]=0;}for (i=0; i<n; i++){if (score[i] < 60){j = 0;}else{j = ((int)score[i] - 50) / 10;}stu[j]++;}for (i=0; i<6; i++){if (i == 0){printf("< 60 %d %.2f%%\n", stu[i],(float)stu[i]/(float)n*100);}else if (i == 5){printf(" %d %d %.2f%%\n", (i+5)*10, stu[i],(float)stu[i]/(float)n*100);}else{printf("%d--%d %d %.2f%%\n", (i+5)*10,(i+5)*10+9,stu[i],(float)stu[i]/(float)n*100);}}}程序运行结果如下:Please enter num and score until score<0 for no more than 30 students:99010 90↙99011 66↙99012 78↙99013 88↙99014 45↙99015 100↙99016 97↙99017 87↙99018 76↙99019 83↙99020 -1↙Total students:10Fail:number--score99014-------45Fail students = 1aver = 81.000000Above aver:number--score99010------9099013------8899015------10099016------9799017------8799020------83Above aver students = 6< 60 1 10.00%60-69 1 10.00%70-79 2 20.00%80-89 3 30.00%90-99 2 20.00%100 1 10.00%设计程序实例7-2:成绩排名次cjrank.c(二维数组、函数和常用算法综合编程练习)参考答案#include <stdio.h>#define STU 30#define COURSE 3void Input(long num[],int score[][COURSE],int n);void GetSumAver(int score[][COURSE],int n,int sum[],float aver[]);void Sort(long num[],int score[][COURSE],int n,int sum[],float aver[]);void Print(long num[],int score[][COURSE],int n,int sum[],float aver[]);int Search(long num[], int n, long x);main(){int n, score[STU][COURSE], sum[STU], pos;long num[STU], x;float aver[STU];printf("Please enter the total number of the students(n<=30):");scanf("%d", &n); /*输入参加考试的学生人数*/printf("Enter No. and score as: MT EN PH\n");Input(num, score, n); /*输入学生成绩*/GetSumAver(score, n, sum, aver); /*计算总分和平均分*/printf("Before sort:\n");Print(num, score, n, sum, aver);Sort(num, score, n, sum, aver); /*排名次*/printf("After sort:\n");Print(num, score, n, sum, aver);printf("Please enter searching number:");scanf("%ld", &x); /*以长整型格式输入待查找学生的学号*/ pos = Search(num, n, x); /*名次查寻*/if (pos != -1){printf("position:\t NO \t MT \t EN \t PH \t SUM \t AVER\n");printf("%8ld\t%4ld\t%4d\t%4d\t%4d\t%5d\t%5.0f\n", pos+1,num[pos], score[pos][0],score[pos][1],score[pos][2],sum[pos],aver[pos]);}else{printf("Not found!\n");}}/* 函数功能:输入某班学生期末考试三门课程成绩函数参数:长整型数组num,存放学生学号整型数组score,存放学生成绩整型变量n,存放学生人数函数返回值:无*/void Input(long num[], int score[][COURSE], int n){int i, j;for (i=0; i<n; i++){scanf("%ld", &num[i]);for (j=0; j<COURSE; j++){scanf("%d", &score[i][j]);}}}/* 函数功能:计算每个学生的总分和平均分整型变量n,存放学生人数整型数组sum,计算得到的每个学生的总分实型数组aver,计算得到的每个学生的平均分函数返回值:无*/void GetSumAver(int score[][COURSE], int n, int sum[], float aver[]){int i, j;for (i=0; i<n; i++){sum[i] = 0;for (j=0; j<COURSE; j++){sum[i] = sum[i] + score[i][j];}aver[i] = (float)sum[i] / COURSE;}}/* 函数功能:按总分成绩由高到低排出成绩的名次函数参数:长整型数组num,存放学生学号整型数组score,存放学生成绩整型变量n,存放学生人数整型数组sum,存放每个学生的总分实型数组aver,存放每个学生的平均分函数返回值:无*/void Sort(long num[],int score[][COURSE], int n, int sum[], float aver[]) {int i, j, k, m;int temp1;long temp2;float temp3;for (i=0; i<n-1; i++){k = i;for (j=i+1; j<n; j++){if (sum[j] > sum[k]) k = j;}if (k != i){temp1 = sum[k]; sum[k] = sum[i]; sum[i] = temp1;temp2 = num[k]; num[k] = num[i]; num[i] = temp2;temp3 = aver[k]; aver[k] = aver[i]; aver[i] = temp3;for (m=0; m<COURSE; m++){temp1 = score[k][m];score[k][m] = score[i][m];score[i][m] = temp1;}}}}/* 函数功能:打印出名次表,表格内包括学生编号、各科分数、总分和平均分整型数组score,存放学生成绩整型变量n,存放学生人数整型数组sum,存放每个学生的总分实型数组aver,存放每个学生的平均分函数返回值:无*/void Print(long num[], int score[][COURSE], int n, int sum[],float aver[]){int i, j;printf(" NO \t| MT \t EN \t PH \t SUM \t AVER\n");printf("----------------------------------------------------\n");for (i=0; i<n; i++){printf("%4ld\t| ", num[i]);for (j=0; j<COURSE; j++){printf("%4d\t", score[i][j]);}printf("%5d\t%5.0f\n", sum[i], aver[i]);}}/* 函数功能:在学号数组中顺序查找学生的学号函数参数:长整型数组num,存放学生学号整型变量n,存放学生人数长整型变量x,存放待查找学生的学号函数返回值:找到时,返回学生学号再学号数组中的下标位置否则,返回值-1*/int Search(long num[], int n, long x){int i;for (i=0; i<n; i++){if (num[i] == x) return(i);}return (-1);}程序运行结果如下:Please enter the total number of the students(n<=30):5↙Enter No. and score as: MT EN PH99010 80 87 83↙99011 90 95 93↙99012 67 78 87↙99013 76 89 81↙99014 60 56 45↙Before sort:NO | MT EN PH SUM AVER--------------------------------------------------------------99010 | 80 87 83 250 8399011 | 90 95 93 278 9399013 | 76 89 81 246 8299014 | 60 56 45 161 54After sort:NO | MT EN PH SUM AVER-------------------------------------------------------------- 99011 | 90 95 93 278 9399010 | 80 87 83 250 8399013 | 76 89 81 246 8299012 | 67 78 87 232 7799014 | 60 56 45 161 54Please enter searching number:99012↙position: NO MT EN PH SUM AVER4 99012 67 78 74 232 77。

答案 实验报告_实验7_数组(学号_姓名)

答案 实验报告_实验7_数组(学号_姓名)

实验报告_实验7_数组(学号_姓名)一、实验目的:1、理解数组的作用、特点;2、掌握一维数组、二维的定义、引用、初始化,能够与循环结合实现批量数据处理(如输入、输出,比较大小,交换等);3、掌握字符数组、字符串的使用;4、熟悉打擂台等典型算法。

二、实验内容1、(基础题)有一个数列,它的第一项为1,第二项为2,第三项为3,以后每一项都等于它的前三项之和。

使用一维数组编程实现功能:计算该数列的前20项并赋值给数组,然后以逆序方式输出,每一行5个数据。

如下图所示:程序代码:#include<stdio.h>int main(){int i;int f[20]={1,2,3};for(i=3;i<20;i++)f[i]=f[i-1]+f[i-2]+f[i-3];//计算数列的值for(i=19;i>=0;i--){//每行输出5个数据printf("%10d",f[i]);if(i%5==0)printf("\n");}printf("\n\n");return0;}2、(基础题)青年歌手大奖赛,有7名评委进行打分,分数取值范围:0.0~10.0,试编程实现如下功能:从键盘输入7位评委给某一选手的评分,之后计算、输出该选手的平均得分(计算规则:去掉一个最高分和一个最低分,求出剩余5个得分的平均值)。

如下图所示:(提示:使用一维数组来保存7位评委的给分,先计算所有评委给分总和,并找到最高分、最低分,然后用给分总和-最高分-最低分,再除5得到选手的平均得分,最后输出。

)程序代码:#include<stdio.h>#define N7int main(){double score[N];double max,min,sum,aver;int i;printf("请输入%d位评委的给分:\n",N);for(i=0;i<N;i++)scanf("%lf",&score[i]);max=min=sum=score[0];for(i=1;i<N;i++){if(max<score[i])max=score[i];if(min>score[i])min=score[i];sum=sum+score[i];}sum=sum-max-min;aver=sum/(N-2);printf("\n去掉一个最高分:%.4f,去掉一个最低分:%.4f\n\n",max,min);printf("该选手的最后得分是:%.4f\n\n",aver);return0;}3、(基础题)计算矩阵之和:先输出这两个矩阵,再输出求和后矩阵。

实验七 数组的定义和应用

实验七 数组的定义和应用

实验七数组的定义和应用一、实验目的1.掌握数组定义的规则;2.掌握C语言数组的基本用法;3.掌握字符数组和字符串的使用。

二、实验重难点重点:1.数组的概念;2.数组的定义和应用。

难点:1.数组的定义;2.一维数组、二维数组在程序中的运用方法;3.字符数组和字符串的定义及使用方法。

三、实验内容与要求实验内容:1.求一个5行5列的整型二维数组对角线元素之和(数组的值在运行时输入)。

2.编程题:输入人数n(0≤n≤10),再输入n个成绩,对成绩降序排序后输出。

3.已有一个排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。

(要求将初始数组和插入后的数组都输出)4.求n 个数的最大值。

(n从键盘输入,n<10)5.用筛选法输出200以内的素数。

6.编一个程序,将字符数组s2中的全部字符复制到字符数组s1中,不用strcpy函数。

复制时‘\0’也要复制过去。

‘\0’后面的字符不复制。

四、实验学时4课时五、根据实验过程填写下列内容1.写出能够完成实验1要求的输出格式的程序和运行后的结果。

程序:运行结果:2.写出能够完成实验2要求的输出格式的程序和运行后的结果。

程序:运行结果:3.写出能够完成实验3求的输出格式的程序和运行后的结果。

程序:运行结果:4.写出能够完成实验3求的输出格式的程序和运行后的结果。

程序:运行结果:5.用筛选法输出200以内的素数。

#include <stdio.h>#include <math.h>int main(){int n,k,i,m=0;for(n=2;n<=200;n=n+1){ k=sqrt(n);for (i=2;i<=k;i++)if(n%i==0)break;if(i>=k+1){printf("%4d",n);m=m+1;}if(m%10==0) printf("\n");}return 0;}。

实验 数组——参考答案

实验 数组——参考答案

实验6 数组一、一维数组实验2、编程:输入长度为10得整型数组并输出;然后将其逆序存放后再输出。

例如:0 1 2 3 4 5 6 7 8 9#include<stdio、h>void main(){int i, j, a[10], t;printf("Input 10 number: ");for(i=0; i<10; i++) /*读入数据*/scanf("%d", &a[i]);printf("origin data: ");for(i=0; i<10; i++) /*输出原始数据*/printf("%d ", a[i]);printf("\n");for(i=0,j=9; i<j ; i++,j--) /*逆序存放*/{t=a[i];a[i]=a[j];a[j]= t;}printf("After reversed: "); /*输出逆序存放后得数据*/for(i=0; i<10; i++)printf("%d ", a[i]);printf("\n");}3、编程:输入n个(1<n<=10)正整数并保存到数组中,求出最大值、最小值、平均值,以及最大值、最小值在数组中得下标分别就是多少。

例如:5#include <stdio、h>void main(){int i, n , max, min, a[10], sum;float average;printf("Input n (1<n<=10): ");scanf("%d", &n);if(1<n && n<=10){printf("Input %d integer:", n); /*输入数据并求累加与*/for(i=0, sum=0; i<n; i++){scanf("%d", &a[i]);sum+=a[i];}average=(float)sum/n; /*求出平均值*/for(i=0, max=0, min=0; i<n; i++) /*求最大、最小值得下标*/{if(a[i] > a[max])max= i;if(a[i] < a[min])min= i;}printf("max=%-5d index=%d\n", a[max], max);printf("min=%-5d index=%d\n", a[min], min);printf("average=%、2f\n", average);}elseprintf("数据超出范围");}4、编程:青年歌手参加歌曲大奖赛,有10个评委对她(她)进行打分,试编程求这位选手得平均得分并输出(去掉一个最高分与一个最低分)。

c语言.实验7 数组(1)

c语言.实验7 数组(1)

实验7 数组(1)截止时间:5.8 23:59填空题1.程序的功能是:从键盘输入一个十进制正整数n,将n转换成二进制数并输出,填空以实现功能要求。

例如:若输入十进制数8,则输出其对应的二进制数1000;若输入十进制数25,则输出其对应的二进制数11001。

输入、输出示例:#include <stdio.h>int main(){int n,i=0,a[30];scanf("%d",&n);while(n!=0 ){a[i]=; //1n=n/2;; //2}for(i=;i>=0;i--) //3printf("%d",a[i]);return 0}2. 以下程序的功能是:从键盘任意输入一个整数x ,在数组a 中顺序查找,如果找到,则给出该数所在的下标值,如果没找到,则输出no 。

例如:若输入5,则输出其对应数组元素的下标4,若输入25,则输出no 。

输入输出示例:#include <stdio.h>int main(){ int a[10]={1,2,3,4,5,6,7,8,9,10},i,x; scanf("%d",&x);; //1while(&& i<10 ) //2 i++;if() //3printf("pos:%d",i);elseprintf("no!");return 0; }编程题在下面编程题1.【问题描述】输入10个整数,求大于平均值的偶数和奇数各有多少个?【输入形式】输入10个整数【输出形式】输出大于平均值的偶数和奇数的个数。

【样例输入】2.【问题描述】教材P176:第7章课后习题题三(1)-选择法排序(输出数据之间用一个空格间隔)。

【输入形式】输入数据的个数【输出形式】【样例输入】【样例输出】。

实验七 数组的应用(1)

实验七 数组的应用(1)
实验七 数组的应用 【实验目的】 (1)掌(3)掌握使用循环结构处理数组数据。
【实验内容】
一、编程题 1、定义一维数组 score 存放 5 位同学的英语成绩,成绩从键盘输入, 按从大到小的顺序对数组进行排序, 并输出该数组的原始值和排序后 的值。
PDF 文件使用 "pdfFactory Pro" 试用版本创建
PDF 文件使用 "pdfFactory Pro" 试用版本创建
【2】; bb[i]/=5; } for(i=0;i<3;i++) printf(“\nstudent%d\taverage=%5.1f”,i+1,bb[i]); } 2、请补充 main 函数,该函数的功能是:输出一个 10x10 矩阵,要求非周边元素 赋值 0,周边元素赋值 1。部分源程序如下。 注意:请勿改动主函数 main 和其他函数中的任何内容,仅在 main( )函数的横线 上填入所编写的若干表达式或语句。 试题程序: #include <stdio.h> #define N 10 main( ) { int bb[N][N]; int i,j; for( i=0;i<N;i++) for( j=0;j<N;j++) { if( 【1】 ) bb[i][j]=1; else 【2】 ; } printf(“\n***the result***\n); for(i=0;i<N;i++) { printf(“\n\n”); for(j=0;j<N;j++) printf(“%4d”,bb[i][j]); } }
2、定义一维数组 a,长度为 8,各个元素的值从键盘输入,输出该数 组中的最小值,最大值,平均值以及总和。

华北电力大学c++实验指导数组的应用习题参考答案

华北电力大学c++实验指导数组的应用习题参考答案

P126 数组的应用习题解答1.改错题见文件“实验指导改错题习题解答”。

2.填空题(在空白处填入适当内容,将程序补充完整,并上机调试)(1)求Fibonachi数列(1,1,2,3,5,8,13,……)的前10项。

#include <iostream.h>void main(){ int f[11]={0,1,1},n;for(n=3;n<=10;n++)f[n]= (1);for( (2);n<=10;n++)cout<<f[n]<<" ";}参考答案(1)f[n]= f[n-1]+f[n-2] (2)n=10(2)从键盘上输入若干学生的成绩,统计出平均成绩,并输出低于平均分的学生成绩,输入负数结束数据的输入。

#include <iostream.h>void main(){ float x[100],sum=0.0,ave,a;int n=0,i;cin>>a;while( (1) ){ sum+=a ;x[n]=a ;(2) ;cin>>a;}ave=sum/n; ;cout<<"ave="<<ave<<endl;for(i=0; (3) ;i++)if( (4) )cout<<x[i]<<" ";}参考答案(1)a>=0 (2)n++ (3) i<n (4)x[i]<ave(3)计算一个3X3矩阵的各列元素的平均值。

#include "iostream.h"#define M 3void main(){int a[M][M]={1,2,3,4,5,6,7,8},i,j;float ave[M];for(i=0;i<M;i++){ (1) ;for(j=0;j<M;j++)ave[i]=ave[i]+ (2) ;ave[i]= (3) ;}for(i=0;i<M;i++)cout<<" "<<ave[i];}参考答案(1)ave[i]=0 (2)a[j][i] (3)ave[i]/M(4)找出一个5x5矩阵中的最小值及其在数组中的位置。

实验七 数组及其应用(二)

实验七  数组及其应用(二)

实验七 数组及其应用(二)
一、实验目的
1.掌握数组的基本概念。

2.掌握二维数组的声明、引用。

3.掌握静态数组和动态数组的区别。

4.掌握控件数组。

二、实验内容
1 有矩阵A ,用二维数组求其转置矩阵B 。

要求将两矩阵按照矩阵样式显示。

⎥⎦⎤⎢⎣⎡654321A =,⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡635241B = 【提示】
所谓转置,即:b(i,j)=a(j,i)。

2 有3×4矩阵A ,求其中值最大和值最小的那两个元素的值,以及它们所在的行号和
列号。

其中,⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡735086792741A =。

3 打印出如图9-1a 所示的杨辉三角形,要求先输入行数n 。

进一步要求:如果要显示为图9-1b 所示的样式,该如何改动原来的程序呢?
【提示】
(1)杨辉三角形是n b a )(+展开后各项的系数,具有如下规律:各行的第一个和最后一个数都是1;从第三行起,除上面指出的第一个数和最后一个数之外,其它的数是上一行同列和前一列两个数之和,即:]1,1[],1[],[--+-=j i a j i a j i a ,i 为行,j 为列。

(2)为了便于控制,将内容显示在图片框(PictureBox )中。

(3)要显示为图9-1(b )所示的样式,应该利用TAB 函数对每行显示的起始位定位。

图9-1(a ) 实验10.3程序运行界面
图9-1(b ) 实验10.3程序运行界面。

实验七 指针与数组 参考答案

实验七 指针与数组 参考答案

1、设计程序sy6-1.c,有三个整形变量i,j,k。

设置三个指针变量p1,p2,p3,分别指向i,j,k。

然后通过指针变量使i,j,k三个变量的值顺序交换,即原来i的值赋给j,把j的原值赋给k,把k的原值赋给i。

i,j,k的原值由键盘输入,要求输出i,j,k的原值和新值。

参考答案:#include<stdio.h>void main(){int i,j,k,*p1,*p2,*p3,t;printf("请输入i,j,k:");scanf("%d%d%d",&i,&j,&k);printf("交换前:i=%d j=%d,k=%d\n",i,j,k);p1=&i;p2=&j;p3=&k; //p1指向i,p2指向j,p3指向kt=*p3;*p3=*p2;*p2=*p1,*p1=t; //通过指针间接访问i,j,k并实现交换printf("交换后:i=%d j=%d k=%d\n",i,j,k);}2、设计程序sy6-2.c,已知数组{1,3,5,7,9},在其中分别用下标法、地址法和指针法访问数组元素,将它们输出。

参考答案:#include<stdio.h>void main(){int a[5]={1,3,5,7,9},i,*p;printf("下标法a[i]:");for(i=0;i<5;i++)printf("%3d",a[i]);printf("\n地址法*(a+i):*(a+i):");for(i=0;i<5;i++)printf("%3d",*(a+i));printf("\n指针法*p:");for(p=a;p<a+5;p++)printf("%3d",*p);printf("\n");}3、设计程序sy6-3.c,利用字符指针编程,要求在一行文字:“I have50Yuan.”中,删去字符‘0’,使其变成:“I have5Yuan.”,并输出结果。

实验07-1参考答案

实验07-1参考答案

实验七-1 数组程序设计班级:学号:姓名:评分:一.【实验目的】1、熟练掌握使用一维数组编程的方法。

2、熟练掌握排序算术。

3、熟练掌握使用二维数组编程的方法。

4、进一步掌握C程序的调试方法和技巧。

二.【实验内容和步骤】1、程序调试题A.目标:进一步学习掌握程序调试的方法和技巧。

B.内容:从键盘输入一个正整数n(0<n<9)和一组(n个)有序的整数,再输入一个整数x,把x插入到这组数组中,使该组数据仍然有序。

改正程序中的错误,使其实现程序的功能。

(注:程序文件保存在“调试示例”文件夹中,文件名为error07_1.cpp)①调试正确的源程序清单#include <stdio.h>int main( ){int i, j, n, x, a[10];printf("输入数据的个数n:");scanf("%d", &n);printf("输入%d个整数:", n);for(i = 0; i < n; i++)scanf("%d", &a[i]);printf("输入要插入的整数:");scanf("%d", &x);for(i = 0; i < n; i++){if(x > a[i]) continue;j = n - 1;while(j >= i){ /* 调试时设置断点 */a[j+1] = a[j];j--;} /* 调试时设置断点 */a[i] = x;break;}if(i == n) a[n]=x;for(i = 0; i < n + 1; i++)printf("%d ", a[i]);putchar('\n');return 0;}②运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

第4章 数组的应用(课后练习题答案)-2018(1)

第4章 数组的应用(课后练习题答案)-2018(1)

12. 以下那种说法错误?( B )。 (A)数组中的元素在某些方面彼此相关;
(B)数组中的所有元素具有相同的下标;
(C)数组中的所有元素具有相同的数据类型; (D)数组中的所有元素具有相同的名字;
13. 语句 int a[]={0,1,2}执行后,数组的元素个数是( B )。
(A)2
(B)3
(C)4
for(j=0;j<N-1;j++)
for(k=0;
k<N-j-1
; k++)
if(
a[k]<a[k+1]
)
{ a[k]+=a[k+1]; a[k+1]=a[k]-a[k+1] ; a[k]=a[k]-a[k+1] ; }
for(j=0;
j<N
;j++) cout<<a[j]<<" ";
cout<<endl;
多允许有 50 个字符。 ( F )11. C++中各种数据类型的变量在定义后会被自动初始化为 0 值。 ( F )12. 定义数组时可以用变量来定义数组的大小,但不能用表达式。 ( F )13. 定义一个有 50 个元素的一维字符数组,用该数组表示一个字符串数据最多允
许有 50 个字符。 ( T )14. 定义一个数组后该数组的最小下标取值是 0。 ( T )15. 静态数组被定义时,数组的所有元素自动获取初始值 0。 ( F )16. 数组是 C++的基本数据类型。 ( F )17. 数组不能用来存放字符串。 ( T )18. 同一数组的所有数组元素在内存中是连续存放的。 ( T )19. 在 C++中数组是具有一定顺序关系的若干相同类型变量的集合体。 ( F )20. 在给全部数组元素赋初值时,可以不指定二维数组中的常量表达式,

浙师大 C语言 实验7一维数组+答案

浙师大 C语言  实验7一维数组+答案
未改正错误之前,程序运行结果是(注意,最后一项——20,错误):
数组的下标应该从几开始?标出的三个错误语句行,应分别改为?
从0开始,
fib[1]= fib[2]= 1;//错误1fib[0]= fib[1]= 1;
for(i=3; i<=20; i++)//错误2for( i=2;i<20; i++)
for(i=1; i<=20; i++){//错误3for( i=0;i<20; i++)
改正后,程序运行结果是
【实验题2】程序填空:给定平面上10个点,求其中离原点最近的点。源程序用一维数组x存放这10个点的x坐标,用一维数组y存放相应的y坐标,即第i个点的坐标为(x[i], y[i])。用变量index记录最近点的下标。程序中使用距离的平方做比较:x*x+y*y。
for(i=0;i<5;i++)printf("%5d",a[i]);
printf("\n");
}
运行程序,输入1 2 3 4 5,结果为:
如果将Line 8改为“a[i]= a[i+1];”,则Line 7应改为:for(i=0; i<4; i++)
如果要求程序实现数组元素的顺时针转动,那么Line 6、Line 7、Line 8、Line 9应该如何修改?
for(i=0; i<4; i++)//Line7:前4个元素依次后移一位
a[4-i]=a[3-i];//Line 8:后移一位
a[0]=t;
//Line 9:将t中存放的最后一个元素放入首元素的位置

实验7 二维数组 字符数组及字符串的应用

实验7 二维数组 字符数组及字符串的应用

实验7 二维数组、字符数组及字符串的应用一、实验目的(1)掌握二维数组的定义及初始化方法。

(2)掌握利用二维数组解决问题的常用编程方法。

(3)掌握字符数组的定义及使用方法。

(4)掌握字符串的表示方法及正确处理方法。

(5)掌握字符串函数的使用方法。

二、实验内容1.在一个4×5方阵中,找出每列中的最小元素及其所在位置。

[源程序][回答问题](1)定义一个6行6列的二维数组并初始化,以矩阵的形式输出该二维数组。

(2)找出第1列中最小元素所在的位置并输出。

(3)总结规律,利用循环分别找出每一列中最小元素所在位置并输出。

2.对一个m×n的矩阵,交换指定的两列元素。

交换的两列列号由用户从键盘指定。

输出交换前后的矩阵。

[源程序][回答问题](1)定义一个m行n列的二维数组(设m为4,n为5)并输入元素值,以矩阵的形式输出该二维数组。

(2)手工交换该二维数组的第2列和第4列。

(3)总结规律,利用循环完成第2列与第4列的交换,并以矩阵形式输出该二维数组。

(4)把交换的第2列和第4列用变量x和y替换,即交换第x列与第y列,其中x、y 由键盘输入并且需要满足1<= x <= n,1<= y <= n,从而完成整个程序。

3.通过随机函数生成一个n×n矩阵,每个元素均为10—30之间的整数,求其每行元素的平均值。

[源程序][回答问题](1)定义一个n行n列的二维数组。

(2)使用随机组产生10-30之间的数值赋值给二维数组的各元素。

(3)对二维数组的第1行求累加和,再用累加和的结果除以n,即可求得第1行的平均值。

(4)若对每行均进行上述操作,应如何修改程序?4.从键盘输入一个字符串,求其长度和其中包含的数字字符的个数。

[源程序][回答问题](1)C语言中借用什么来处理字符串?如何定义?(2)你准备采用何种方式完成字符串的输入?指出你所采用输入方式的特点。

(3)如果使用C的库函数如何求串的长度?如果不使用C的库函数又如何求串的长度?(4)判断字符串中的每个字符是否数字字符(即′0′-′9′之间的符号),若是则计数。

C语言编程数组应用实例面试问题答案

C语言编程数组应用实例面试问题答案

C语言编程数组应用实例面试问题答案在面试过程中,C语言的数组应用是常见的考点之一。

以下是一些常见C语言编程数组应用实例面试问题以及详细的答案解析。

问题一:什么是数组?回答:数组是一种可以容纳固定数量元素的数据结构。

在C语言中,数组是由相同数据类型的元素组成的有序集合。

数组中的每个元素可以通过索引值访问,索引从0开始递增。

问题二:如何声明和初始化数组?回答:声明数组的语法为:类型名称[大小];例如,int numbers[5];数组的初始化可以是静态的或动态的。

静态初始化可以在声明数组时同时为每个元素指定初始值,如:int numbers[5] = {1, 2, 3, 4, 5};动态初始化可以在程序执行期间使用循环或其他方式为每个元素赋值。

问题三:如何访问数组元素?回答:数组元素可以通过索引值来访问,索引从0开始。

例如,要访问数组numbers中的第一个元素,可以使用numbers[0]。

问题四:如何计算数组的长度?回答:C语言中的数组没有内置的长度属性。

可以通过sizeof运算符来计算数组的长度,例如:sizeof(numbers) / sizeof(numbers[0])。

问题五:数组和指针之间有什么关系?回答:数组名可以看作是数组第一个元素的地址。

因此,可以使用指针来访问和操作数组。

例如,int* ptr = numbers; 表示ptr指向数组numbers的第一个元素。

问题六:如何在函数中传递数组?回答:可以通过指针来传递数组给函数。

函数参数中的数组形式参数实际上是指针,可以使用指针来操作传递进来的数组。

例如,void myFunction(int* arr)。

问题七:如何在动态内存中创建数组?回答:可以使用malloc函数在堆上动态分配内存来创建数组。

例如,int* arr = (int*)malloc(5 * sizeof(int));问题八:如何在多维数组中访问元素?回答:多维数组是一个数组的数组。

实验报告_数组的应用

实验报告_数组的应用

一、实验目的1. 理解数组的定义和特点。

2. 掌握数组的创建、初始化和赋值方法。

3. 熟悉数组的基本操作,如遍历、排序、查找等。

4. 了解数组在实际编程中的应用。

二、实验环境1. 操作系统:Windows 102. 编程语言:C/C++3. 开发环境:Visual Studio 2019三、实验内容1. 数组的定义和特点数组是一种有序的数据集合,用于存储具有相同数据类型的元素。

数组具有以下特点:(1)数组中所有元素具有相同的数据类型;(2)数组中的元素按照一定顺序排列;(3)数组的大小在创建时确定,一旦创建,大小不能改变;(4)数组可以通过下标访问其中的元素。

2. 数组的创建、初始化和赋值(1)创建数组在C/C++中,可以通过以下方式创建数组:int arr[10]; // 创建一个整型数组,包含10个元素int arr2[3][4]; // 创建一个二维整型数组,包含3行4列的元素(2)初始化数组在创建数组时,可以同时初始化数组元素:int arr[5] = {1, 2, 3, 4, 5}; // 初始化整型数组arr (3)赋值数组在创建数组后,可以对数组元素进行赋值:int arr[5];arr[0] = 1;arr[1] = 2;arr[2] = 3;arr[3] = 4;arr[4] = 5;3. 数组的基本操作(1)遍历数组可以通过循环结构遍历数组元素:for (int i = 0; i < 5; i++) {printf("%d ", arr[i]);}(2)排序数组可以使用冒泡排序算法对数组进行排序:void bubbleSort(int arr[], int n) {for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}(3)查找数组元素可以使用线性查找算法查找数组元素:int linearSearch(int arr[], int n, int x) {for (int i = 0; i < n; i++) {if (arr[i] == x) {return i;}}return -1;}4. 数组在实际编程中的应用(1)实现冒泡排序算法在C/C++中,可以使用数组实现冒泡排序算法,如上述代码所示。

vb6.0实验七习题与答案

vb6.0实验七习题与答案

实验七专业_____________ 班级________年级________姓名______________学号_______________一、实验目的1、掌握数组(动态、静态数组、可变数组、数组初始化、控件数组)的定义方法。

2、正确理解和使用数组的下标,熟练掌握数组的引用、赋值输入和输出。

3、学会会一些实际问题二、实验内容1、按图设计窗体:要求,编写适当的事件过程实现①单击“生成”按钮,随机生成的20个10~100之间的整数存放数组a中并在Text1中显示②单击“显示偶数”按钮,在Text2中显示其的所有偶数③单击“显示奇数”按钮,在Text3中显示其的所有奇数D i m a(1T o20)A s I n t e g e r'因为在各个按钮过程都要用到数组a(),所以要定义为全局数组P r i v a t e S u b C o m m a n d1_C l i c k()R a n d o m i z eF o r i=1T o20a(i)=I n t(R n d*81+10)T e x t1.T e x t=T e x t1.T e x t&a(i)&""N e x t iE n d S u bP r i v a t e S u b C o m m a n d2_C l i c k()F o r i=1T o20I f i M o d2=0T h e n T e x t2.T e x t=T e x t2.T e x t&a(i)&""N e x t iE n d S u bP r i v a t e S u b C o m m a n d3_C l i c k()F o r i=1T o20I f i M o d2<>0T h e n T e x t3.T e x t=T e x t3.T e x t&a(i)&""N e x t iE n d S u b2、按图设计窗体:要求,编写适当的事件过程实现①单击“生成数组”按钮,随机生成的20个10~99之间的整数存放数组a中并在列表框List1的列表项显示②单击“求极值”按钮,在Text1中显示其中的最大数,在Text2中显示其中最小数D i m a(20)A s I n t e g e rP r i v a t e S u b C o m m a n d1_C l i c k()R a n d o m i z eF o r i=1T o20a(i)=I n t(R n d*90+10)L i s t1.A d d I t e m a(i)N e x t iE n d S u bP r i v a t e S u b C o m m a n d2_C l i c k()D i m m a x%,m i n%m a x=a(1):m i n=a(1)F o r i=1T o20I f m a x<a(i)T h e n m a x=a(i)I f m i n>a(i)T h e n m i n=a(i)N e x t iT e x t1.T e x t=m a x:T e x t2.T e x t=m i nE n d S u b3、要求,编写适当的事件过程实现①单击“生成”按钮,随机生成的30个ASCII值为65~122之间的字符存放数组s中并显示在Text1②单击“分类”按钮,在Text2中显示其中的大写字母,在Text3中显示其中小写字母D i m a(1T o20)A s S t r i n gP r i v a t e S u b C o m m a n d1_C l i c k()T e x t1.T e x t=""R a n d o m i z eF o r i=1T o20a(i)=C h r(I n t(R n d*58+65))T e x t1.T e x t=T e x t1.T e x t&a(i)&""N e x t iE n d S u bP r i v a t e S u b C o m m a n d2_C l i c k()T e x t2.T e x t="":T e x t3.T e x t=""F o r i=1T o20I f A s c(a(i))>=65A n d A s c(a(i))<=90T h e n T e x t2.T e x t=T e x t2.T e x t&a(i)&""I f A s c(a(i))>=97A n d A s c(a(i))<=122T h e n T e x t3.T e x t=T e x t3.T e x t&a(i)&""N e x t iE n d S u b4、按图设计窗体:要求,编写适当的事件过程实现①单击“生成”按钮,随机生成的30个值为10~99之间的整数存放数组a中并显示在Text1②单击“处理”,选出其中能被3整除但不能被6整除的数,显示在Text2中,并统计其个数和平均值(保留小数以下一位)显示在Text3和Text4中③单击“退出”,结束运行D i m a(1T o30)A s I n t e g e rP r i v a t e S u b C o m m a n d1_C l i c k()T e x t1.T e x t=""R a n d o m i z eF o r i=1T o30a(i)=I n t(R n d*90+10)T e x t1.T e x t=T e x t1.T e x t&a(i)&""N e x t iE n d S u bP r i v a t e S u b C o m m a n d2_C l i c k()D i m s u m A s I n t e g e rT e x t2.T e x t=""F o r i=1T o30I f a(i)M o d3=0A n d a(i)M o d6<>0T h e nT e x t2.T e x t=T e x t2.T e x t&a(i)&""k=k+1'统计符合条件的个数ks u m=s u m+a(i)'统计符合条件的数的和E n d I fN e x t iT e x t3.T e x t=kT e x t4.T e x t=s u m/kE n d S u bP r i v a t e S u b C o m m a n d3_C l i c k()E n dE n d S u b5、按图设计窗体:要求,十个文本框为控件数组,编写适当的事件过程实现①单击“评委给歌手打分”,随机生成10个9.0~9.9依次显示在文本框控件数组中②单击“评分”,把十个评委中去掉一个最高和一个最低分后,平均分显示的Text2中D i m a(9)A s S i n g l eP r i v a t e S u b C o m m a n d1_C l i c k()R a n d o m i z eF o r i=0T o9T e x t1(i)=F o r m a t(R n d+9,"0.0")N e x t iE n d S u bP r i v a t e S u b C o m m a n d2_C l i c k()D i m m a x!,m i n!,s u m!m a x=T e x t1(0):m i n=T e x t1(0)F o r i=0T o9s u m=s u m+T e x t1(i)I f m a x<T e x t1(i)T h e n m a x=T e x t1(i)I f m i n>T e x t1(i)T h e n m i n=T e x t1(i)N e x t iT e x t2.T e x t=(s u m-m a x-m i n)/8E n d S u b6、打开工程文件7_6.vbp,其窗体中有一个名为Text1的文本框数组,下标从0开始,程序运行时,单击“产生随机数”就会产生10 个3位的整数并放入到Text1数组中;单击“重排数据”,将把其中的奇数移到前,偶数移到后面。

C语言-数组-实验题目及答案

C语言-数组-实验题目及答案

实验六数组程序设计【实验目的】1、掌握使用一维数组编程方法2、掌握使用二维数组进行程序设计【实验内容】一、上机验证程序,并分析结果要求:读懂程序,写出分析结果;上机运行程序,得到运行结果,比较之。

1、#include <stdio.h>int main(){ int a[ ]={1,2,3,4,5} , i, j, s=0 ;j = 1;for ( i = 4 ; i>=0 ; i--){s = s+ a[i] * j ;j = j * 10 ;}printf(" s= %d \n" , s );return 0;}二、程序改错题1.下面程序的功能,是从键盘输入一个数组〔数组长度为10〕,查找数组中正数的个数。

源代码如下,程序中存在错误,请将其改正。

#include <stdio.h>int main(){int a(10);/*定义数组*/int count,i;/* i循环变量 count 正数个数*/for(i=0;i<=10;i++){/*循环输入*/scanf("%d",a[i]);}count=1;for(i=0;i<=10;i++){/*查找正数*/if(a(i)>0)count++;}printf("数组中正数有:%d个\n",count);return 0;}三编写程序1.编写程序要求输入30个学生的单科成绩,输出高于平均分的成绩。

#include <stdio.h>#define N 30int main(){float score[N],sum=0,aver;int i;for(i=0;i<30;i++){scanf("%f",&score[i]);sum=sum+score[i];}aver=sum/30;printf("平均分为:%.2f\n",aver);for(i=0;i<N;i++)if(score[i]>aver)printf("%.2f ",score[i]);printf("\n");return 0;}2.编写程序:假设有13位评委参与评分工作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验七数组的应用(参考答案)[实验任务一]:程序跟踪调试实例7-1:error7_1.c参考答案程序跟踪调试实例7-2:error7_2.c参考答案[实验任务二]:程序填空实例7-1:blank7_1.c参考答案程序填空实例7-2:blank7_2.c参考答案程序填空实例7-3:blank7_3.c参考答案程序填空实例7-4:blank7_4.c参考答案程序填空实例7-5:blank7_5.c参考答案[实验任务三]:编程实例7-1:meld.c参考答案编程实例7-2:DtoB.c参考答案编程实例7-3:match.c参考答案编程实例7-4:matrix.c参考答案编程实例7-5:rewrite.c参考答案编程实例7-6:string.c参考答案编程实例7-7:phalanx.c参考答案编程实例7-8:yanghui.c参考答案[实验任务四]:设计程序实例7-1:学生成绩统计cjtj.c(一维数组和函数综合编程练习)参考答案#include <stdio.h>#define ARR_SIZE 30int ReadScore(int num[], float score[]);int GetFail(int num[], float score[], int n);float GetAver(float score[], int n);int GetAboveAver(int num[], float score[], int n);void GetDetail(float score[], int n);void main(){int n, num[ARR_SIZE], fail, aboveAver;float score[ARR_SIZE];printf("Please enter num and score until score<0:\n");n = ReadScore(num, score);printf("Total students:%d\n", n);fail = GetFail(num, score, n);printf("Fail students = %d\n", fail);aboveAver = GetAboveAver(num, score, n);printf("Above aver students = %d\n", aboveAver);GetDetail(score, n);}/*函数功能:从键盘输入一个班学生某门课的成绩及其学号,当输入成绩为负值时,输入结束函数参数:整型数组num,存储学生学号 ; 实型数组score,存储学生成绩函数返回值:学生总数*/int ReadScore(int num[], float score[]){int i = 0;scanf("%d%f", &num[i], &score[i]);while (score[i] >= 0){i++;scanf("%d%f", &num[i], &score[i]);}return i;}/*函数功能:统计不及格人数并打印不及格学生函数参数:整型数组num,存储学生学号实型数组score,存储学生成绩整型变量n,学生总数函数返回值:不及格人数*/int GetFail(int num[], float score[], int n){int i, count;printf("Fail:\nnumber--score\n");count = 0;for (i=0; i<n; i++){if (score[i] < 60){printf("%d------%.0f\n", num[i], score[i]);count++;}}return count;}/*函数功能:计算全班平均分成绩函数参数:实型数组score,存储学生成绩整型变量n,学生总数函数返回值:平均分*/float GetAver(float score[], int n){int i;float sum = 0;for (i=0; i<n; i++){sum = sum + score[i];}return sum/n;}/*函数功能:统计成绩在全班平均分及平均分之上的学生人数并打印其学生函数参数:整型数组num,存储学生学号实型数组score,存储学生成绩整型变量n,学生总数函数返回值:成绩在全班平均分及平均分之上的学生人数*/int GetAboveAver(int num[], float score[], int n){int i, count;float aver;aver = GetAver(score, n);printf("aver = %f\n", aver);printf("Above aver:\nnumber--score\n");count = 0;for (i=0; i<n; i++){if (score[i] >= aver){printf("%d------%.0f\n", num[i], score[i]);count++;}}return count;}/*函数功能:统计各分数段的学生人数及所占的百分比函数参数:实型数组score,存储学生成绩整型变量n,学生总数函数返回值:无*/void GetDetail(float score[], int n){int i, j, stu[6];for (i=0; i<6; i++){stu[i]=0;}for (i=0; i<n; i++){if (score[i] < 60){j = 0;}else{j = ((int)score[i] - 50) / 10;}stu[j]++;}for (i=0; i<6; i++){if (i == 0){printf("< 60 %d %.2f%%\n", stu[i],(float)stu[i]/(float)n*100);}else if (i == 5){printf(" %d %d %.2f%%\n", (i+5)*10, stu[i],(float)stu[i]/(float)n*100);}else{printf("%d--%d %d %.2f%%\n", (i+5)*10,(i+5)*10+9,stu[i],(float)stu[i]/(float)n*100);}}}程序运行结果如下:Please enter num and score until score<0 for no more than 30 students:99010 90↙99011 66↙99012 78↙99013 88↙99014 45↙99015 100↙99016 97↙99017 87↙99018 76↙99019 83↙99020 -1↙Total students:10Fail:number--score99014-------45Fail students = 1aver = 81.000000Above aver:number--score99010------9099013------8899015------10099016------9799017------8799020------83Above aver students = 6< 60 1 10.00%60-69 1 10.00%70-79 2 20.00%80-89 3 30.00%90-99 2 20.00%100 1 10.00%设计程序实例7-2:成绩排名次cjrank.c(二维数组、函数和常用算法综合编程练习)参考答案#include <stdio.h>#define STU 30#define COURSE 3void Input(long num[],int score[][COURSE],int n);void GetSumAver(int score[][COURSE],int n,int sum[],float aver[]);void Sort(long num[],int score[][COURSE],int n,int sum[],float aver[]);void Print(long num[],int score[][COURSE],int n,int sum[],float aver[]);int Search(long num[], int n, long x);main(){int n, score[STU][COURSE], sum[STU], pos;long num[STU], x;float aver[STU];printf("Please enter the total number of the students(n<=30):");scanf("%d", &n); /*输入参加考试的学生人数*/printf("Enter No. and score as: MT EN PH\n");Input(num, score, n); /*输入学生成绩*/GetSumAver(score, n, sum, aver); /*计算总分和平均分*/printf("Before sort:\n");Print(num, score, n, sum, aver);Sort(num, score, n, sum, aver); /*排名次*/printf("After sort:\n");Print(num, score, n, sum, aver);printf("Please enter searching number:");scanf("%ld", &x); /*以长整型格式输入待查找学生的学号*/pos = Search(num, n, x); /*名次查寻*/if (pos != -1){printf("position:\t NO \t MT \t EN \t PH \t SUM \t AVER\n");printf("%8ld\t%4ld\t%4d\t%4d\t%4d\t%5d\t%5.0f\n", pos+1,num[pos], score[pos][0],score[pos][1],score[pos][2],sum[pos],aver[pos]);}else{printf("Not found!\n");}}/* 函数功能:输入某班学生期末考试三门课程成绩函数参数:长整型数组num,存放学生学号整型数组score,存放学生成绩整型变量n,存放学生人数函数返回值:无*/void Input(long num[], int score[][COURSE], int n){int i, j;for (i=0; i<n; i++){scanf("%ld", &num[i]);for (j=0; j<COURSE; j++){scanf("%d", &score[i][j]);}}}/* 函数功能:计算每个学生的总分和平均分函数参数:整型数组score,存放学生成绩整型变量n,存放学生人数整型数组sum,计算得到的每个学生的总分实型数组aver,计算得到的每个学生的平均分函数返回值:无*/void GetSumAver(int score[][COURSE], int n, int sum[], float aver[]) {int i, j;for (i=0; i<n; i++){sum[i] = 0;for (j=0; j<COURSE; j++){sum[i] = sum[i] + score[i][j];}aver[i] = (float)sum[i] / COURSE;}}/* 函数功能:按总分成绩由高到低排出成绩的名次函数参数:长整型数组num,存放学生学号整型数组score,存放学生成绩整型变量n,存放学生人数整型数组sum,存放每个学生的总分实型数组aver,存放每个学生的平均分函数返回值:无*/void Sort(long num[],int score[][COURSE], int n, int sum[], float aver[]) {int i, j, k, m;int temp1;long temp2;float temp3;for (i=0; i<n-1; i++){k = i;for (j=i+1; j<n; j++){if (sum[j] > sum[k]) k = j;}if (k != i){temp1 = sum[k]; sum[k] = sum[i]; sum[i] = temp1;temp2 = num[k]; num[k] = num[i]; num[i] = temp2;temp3 = aver[k]; aver[k] = aver[i]; aver[i] = temp3;for (m=0; m<COURSE; m++){temp1 = score[k][m];score[k][m] = score[i][m];score[i][m] = temp1;}}}}/* 函数功能:打印出名次表,表格包括学生编号、各科分数、总分和平均分函数参数:长整型数组num,存放学生学号整型数组score,存放学生成绩整型变量n,存放学生人数整型数组sum,存放每个学生的总分实型数组aver,存放每个学生的平均分函数返回值:无*/void Print(long num[], int score[][COURSE], int n, int sum[],float aver[]){int i, j;printf(" NO \t| MT \t EN \t PH \t SUM \t AVER\n");printf("----------------------------------------------------\n");for (i=0; i<n; i++){printf("%4ld\t| ", num[i]);for (j=0; j<COURSE; j++){printf("%4d\t", score[i][j]);}printf("%5d\t%5.0f\n", sum[i], aver[i]);}}/* 函数功能:在学号数组中顺序查找学生的学号函数参数:长整型数组num,存放学生学号整型变量n,存放学生人数长整型变量x,存放待查找学生的学号函数返回值:找到时,返回学生学号再学号数组中的下标位置否则,返回值-1*/int Search(long num[], int n, long x){int i;for (i=0; i<n; i++){if (num[i] == x) return(i);}return (-1);}程序运行结果如下:Please enter the total number of the students(n<=30):5↙Enter No. and score as: MT EN PH99010 80 87 83↙99011 90 95 93↙99012 67 78 87↙99013 76 89 81↙99014 60 56 45↙Before sort:NO | MT EN PH SUM AVER--------------------------------------------------------------99010 | 80 87 83 250 8399011 | 90 95 93 278 9399012 | 67 78 87 232 7799013 | 76 89 81 246 8299014 | 60 56 45 161 54After sort:NO | MT EN PH SUM AVER--------------------------------------------------------------99011 | 90 95 93 278 9399010 | 80 87 83 250 8399013 | 76 89 81 246 8299012 | 67 78 87 232 7799014 | 60 56 45 161 54Please enter searching number:99012↙position: NO MT EN PH SUM AVER 4 99012 67 78 74 232 77。

相关文档
最新文档