目录
引言
我想把大学期间写的材料挑选一些发上来保存一下,这是本人大学期间做的一次实验作业。
一.实验目的:
- 掌握循环程序设计思路;
- 能熟练使用3种循环结构对问题进行求解;
- 掌握穷举法、递推法等在工程问题中的应用。
二、实验内容和步骤: |
1. 改正下列程序错误,使之完成规定的功能:
错误代码:该程序统计数组元素之和并输出。
#include <stdio.h>
int main(void)
{
int a[5]={5,4,3,2,1};
int i;
for (i=1;i<=5;i++)
{
sum=sum+a[i];
}
printf("sum=%f\n",Sum);
return 0;
}
编译环境中正确代码、运行结果截图及错误原因分析如下:
错误原因:
1.sum未定义。2.数组越界。3.sum输出为整形。
2. 编写程序实现以下功能
(1) 输入N 个不大于100的正整数(Ν ≤10 )存入数组 a 中,输出 a 中的最大值,最小值及求出其平均值(保留两位小数),其中N的值由用户输入。
编译环境中正确代码、运行结果截图如下:
/*
本关任务:用户输入测试集中所给的N 个正整数存入数组 a 中,输出 a 中的最大值,最小值及求出其平均值(保留两位小数)。
测试时请注意:请用平台给的测试集的格式输入,对你编写的代码进行测试,请在输入时,用第一个数代表你要输入几个整数,
后面每一行的值(即每个数据输完即回车占一行)依次为你给的若干正整数。
遇到没输入完毕就结束的情况,可以在scanf语句前加个语句:fflush(stdin);
*/
#include <stdio.h>
int main(void)
{
int n,i,j,max,min,sum=0;
float average;
scanf("%d",&n);
int nums[n];
for(i=0;i<n;i++)
{
scanf("%d",&nums[i]);
sum=sum+nums[i];
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(nums[j]<nums[i])
{
int temp;
temp=nums[j];
nums[j]=nums[i];
nums[i]=temp;
}
}
}
max=nums[0];
min=nums[n-1];
average=(float)sum/n;
printf("%d %d %.2f",max,min,average);
return 0;
}
(2) 餐饮服务质量调查打分
某公司的主管需要了解一年来公司的营业状况,比较一下各月份的销售收入状况。如果仅给出一大堆数据,这显然太不直观了,如果能将这些数据以条形图(直方图)的形式表示,将会大大增加这些数据的直观性,也便于数据的分析与对比。下面以顾客对餐饮服务打分为例,练习这方面的程序编写方法。假设有40个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),试统计调查结果,并用*打印出如下形式的统计结果直方图。
Grade Count Histogram
1 5 *****
2 10 **********
3 7 *******
...
10 3 ***
编译环境中正确代码、运行结果截图如下:
/*
某公司的主管需要了解一年来公司的营业状况,比较一下各月份的销售收入状况。如果仅给出一大堆数据,这显然太不直观了,
如果能将这些数据以条形图(直方图)的形式表示,将会大大增加这些数据的直观性,也便于数据的分析与对比。下面以顾客
对餐饮服务打分为例,练习这方面的程序编写方法。假设有40个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为
1~10这10个等级(1表示最低分,10表示最高分),试统计调查结果,并用*打印出统计结果直方图。
请注意左边题目中对测试集格式的特别说明:每行第一列表示分值,第二列表示该评分的数量,第三列表示结果统计图,每列
数据之间以TAB符分隔,即使该评分值的个数为0,第二列的评分数量值0的后面仍有一TAB符,测试用例的最后一行后面有一回车(\n)
*/
#include<stdio.h>
int main()
{
int score[40];
int i,j;
int score2[10][1]={1,2,3,4,5,6,7,8,9,10};
int nums[10][1]={0,0,0,0,0,0,0,0,0,0};
for(i=0;i<40;i++)
{
scanf("%d",&score[i]);
nums[score[i]-1][0]++;
}
for(i=0;i<10;i++){
printf("%d\t%d\t",i+1,nums[i][0]);
for(j=0;j<nums[i][0];j++){
printf("*");
}
printf("\n");
}
}
3.检验并打印魔方矩阵
在下面的5×5阶魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将这些魔方矩阵中的元素读到一个二维整型数组中,然后检验其是否为魔方矩阵,并将其按如下格式显示到屏幕上。
17 | 24 | 1 | 8 | 15 |
23 | 5 | 7 | 14 | 16 |
4 | 6 | 13 | 20 | 22 |
10 | 12 | 19 | 21 | 3 |
11 | 18 | 25 | 2 | 9 |
编译环境中正确代码、运行结果截图如下:
#include<stdio.h>
int main()
{
int cube[5][5];
int i,j,sum=0,sum2=0,k=0;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
scanf("%d",&cube[i][j]);
}
}
for(i=0;i<5;i++)
{
for(j=0;j<i;j++){
if(cube[i][0]+cube[i][1]+cube[i][2]+cube[i][3]+cube[i][4]==cube[j][0]+cube[j][1]+cube[j][2]+cube[j][3]+cube[j][4])
{
k++;
}
if(cube[0][i]+cube[1][i]+cube[2][i]+cube[3][i]+cube[4][i]==cube[0][j]+cube[1][j]+cube[2][j]+cube[3][j]+cube[4][j])
{
k++;
}
}
}
for(i=0,j=0;i<5,j<5;i++,j++)
{
sum=sum+cube[i][j];
}
for(i=4,j=0;i>=0,j<5;i--,j++)
{
sum2=sum2+cube[i][j];
}
if(sum==sum2)
{
k++;
}
if(k==21)
{
printf("该矩阵为魔方矩阵。\n");
}
else{
printf("该矩阵不为魔方矩阵。\n");
}
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("%d",cube[i][j]);
if(j==4)
{
printf("\n");
}
else{
printf(" ");
}
}
}
}
三、实验小结
本次实验工作量小,难度适中,自我感觉良好。