《C++程序设计实践》实验6
一、课内实验题(共10小题,100分)
题型得分 100
【描述】
编写程序,以左下三角的形式输出前n行杨辉三角形。
【输入】
输入在一行中给出n(1≤n≤10)。
【输出】
以左下三角的格式输出前n行杨辉三角形。每个数字占固定4位。
【输入示例】
5
【输出示例】
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
【来源】
《程序设计基础——以C++为例》第4章实验7。
(10分)
我的答案:
#include
#include
#include
#include
#include<stdio.h>
#include
#include
5
2
32 3 12 5 89
【输出示例】
32
(10分)
我的答案:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a[100100],k;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
cout<<a[n-k+1];
}
题目得分 10
【描述】
输入一个正整数n(2≤n≤10)和n×n矩阵a中的元素,如果a是上三角矩阵,输出“Yes”,否则输出“No”。
【输入】
第一行为正整数n,表示矩阵大小。
接着n行,每一行n个整数,整数以空格间隔。
【输出】
输出“Yes”或“No”。
【输入示例】
3
3 4 5
1 2 3
1 3 4
【输出示例】
No
【提示】
用二维数组表示n×n矩阵时(i表示行下标,j表示列下标),则:
主对角线i==j,副对角线i + j == n – 1。
上三角矩阵i<=j。
下三角矩阵i>=j。
【来源】
《程序设计基础——以C++为例》第4章实验5。
(10分)
我的答案:
#include <stdio.h>
int main(void)
{
int a[20][20],flag,i,j,n;
scanf(“%d”,&n);
for (i=0;i<n;i++)
for (j=0;j<n;j++)
scanf(“%d”,&a[i][j]);
flag=1;
for (i=0;i<n;i++)
for (j=0;j<i;j++)
if(a[i][j]!=0)
flag=0;
if(flag)
printf(“Yes\n”);
else
printf(“No\n”);
return 0;
}
题目得分 10
【描述】
中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数或最中间两个数据的平均值(如果这组数的个数为奇数,则中位数为位于中间位置的那个数;如果这组数的个数为偶数,则中位数是位于中间位置的两个数的平均值)。
给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可。
【输入】
包含多组测试数据,每一组测试数据的第一行为n,代表该组测试数据包含的数据个数,1≤n≤10000。
接着n行为n个数据。n为0时结束输入。
【输出】
输出中位数,每一组测试数据输出一行。
【输入示例】
4
10
30
20
40
3
40
30
50
4
1
2
3
4
0
【输出示例】
25
40
2
(10分)
我的答案:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
while(cin>>n){
if(n==0)return 0;
int a[100010];
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+n+1);
cout<<(a[(n+1)/2]+a[(n+2)/2])/2<<endl;
}
}
题目得分 10
【描述】
编写程序,创建一个m×n(2≤m、n≤10)的矩阵,输入矩阵的值,找出该矩阵的鞍点,鞍点是指本行最大、本列最小的元素,可能没有鞍点,也可能有多个鞍点。简单起见,只考虑一个鞍点和没有鞍点的情况。且保证矩阵中的值不会全相等。
【输入】
第一行输入矩阵的行列数m和n,以空格间隔。
接着按矩阵的行列数输入矩阵的值。
【输出】
按“行 列 鞍点值”的格式输出鞍点,若不存在鞍点,则输出“No saddle point”。
【输入示例】
3 4
41 89 31 39
96 94 15 20
40 96 86 11
【输出示例】
0 1 89
【来源】
《程序设计基础——以C++为例》第4章实验6。
(10分)
我的答案:
#include
#include
#include
#include
#include<stdio.h>
#include
#include
11 4
15 3 76 67 84 87 13 67 45 34 45
【输出示例】
67 45 34 45 15 3 76 67 84 87 13
(10分)
我的答案:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,a[10010];
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=n-m+1;i<=n;i++)cout<<a[i]<<" ";
for(int i=1;i<=n-m;i++)cout<<a[i]<<" ";
}
题目得分 10
【描述】
输入一指定金额(以元为单位),然后输出支付该金额的各种面额的人民币数量,显示100元,50元,20元,10元,5元,1元各多少张,要求尽量使用大面额的。
【输入】
输入一个小于1000的正整数。
【输出】
分行输出,每行显示一个整数,从上到下分别表示100元,50元,20元,10元,5元,1元人民币的张数。
【输入示例】
735
【输出示例】
7
0
1
1
1
0
【来源】
《程序设计基础——以C++为例》第4章实验2。
(10分)
我的答案:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
cout<<n/100<<endl;
n%=100;
cout<<n/50<<endl;
n%=50;
cout<<n/20<<endl;
n%=20;
cout<<n/10<<endl;
n%=10;
cout<<n/5<<endl;
n%=5;
cout<<n;
}
题目得分 10
【描述】
编写程序,输入10个数,计算这10个数的均值和标准偏差。用下面的公式计算均值mean和标准偏差deviation:
【输入】
在第一行中给出10个数,数间以空格间隔。
【输出】
第一行为均值。
第二行为标准偏差。
【输入示例】
583 566 58 632 244 485 600 432 88 562
【输出示例】
425
216.476
【来源】
《程序设计基础——以C++为例》第4章实验4。
(10分)
我的答案:
double mean(const double x[], int arraySize){
double sum=0;
for(int i=0;i<arraySize;i++){
sum+=x[i];
}
return sum/arraySize;
}
double deviation(const double x[], int arraySize){
double sum=0.0;
for(int i=0;i<arraySize;i++){
sum+=x[i];
}
double mean=sum/arraySize;
double sum2=0.0;
for(int i=0;i<arraySize;i++){
sum2+=(x[i]-mean)*(x[i]-mean);
}
return sqrt(sum2/(arraySize-1));
}
题目得分 10
【描述】
拍摄的一张CT照片用一个二维数组来存储,假设数组中的每个点代表一个细胞。每个细胞的颜色用0到255之间(包括0和255)的一个整数表示。定义一个细胞是异常细胞,如果这个细胞的颜色值比它上下左右4个细胞的颜色值都小50以上(包括50)。数组边缘上的细胞不检测。现在的任务是,给定一个存储CT照片的二维数组,写程序统计照片中异常细胞的数目。
【输入】
第一行包含一个整数n(2<n≤100)。
下面有n行,每行有n个0~255之间的整数,整数以空格间隔。
【输出】
输出一个整数,即异常细胞的数目。
【输入示例】
4
70 70 70 70
70 10 70 70
70 70 20 70
70 70 70 70
【输出示例】
2
(10分)
我的答案:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a[100][100],cnt=0;
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)cin>>a[i][j];
for(int i=2;i<n;i++)
for(int j=2;j<n;j++){
if(a[i][j]+50<=a[i-1][j]&&a[i][j]+50<=a[i+1][j]&&a[i][j]+50<=a[i][j-1]&&a[i][j]+50<=a[i][j+1])cnt++;
}
cout<<cnt;
}
题目得分 10
【描述】
输入10个整数,存放在一维数组中,找出值最大和最小的元素,输出最大值、最小值及它们所在的元素下标。
【输入】
在一行中输入10个整数,整数以空格间隔。
【输出】
第一行输出最大值及其所在的元素下标,最大值和下标以空格间隔。
第二行输出最小值及其所在的元素下标,最小值和下标以空格间隔。
【输入示例】
1 3 5 7 9 6 0 8 2 4
【输出示例】
9 4
0 6
【来源】
《程序设计基础——以C++为例》第4章实验1。
(10分)
我的答案:
#include<bits/stdc++.h>
using namespace std;
int main(){
int x,amax=0,xx,yy,amin=0x3f3f;
for(int i=0;i<10;i++){
cin>>x;
if(x>amax)xx=i,amax=x;
if(x<amin)yy=i,amin=x;
}
cout<<amax<<" “<<xx<<endl<<amin<<” "<<yy;
}
题目得分 10