BUPT2021秋季计算导论第九次实验
平均成绩
实验7_1_平均成绩 (100 分)
已知某个学生n门课的成绩,求平均成绩。
输入格式:
共两行,第一行为一个整数n,代表课程数,n不会超过100。第二行为n个用空格分隔的整数,代表该学生的n门课成绩,每门成绩的取值范围是0-100。要求这n个成绩必须使用数组存储。
输出格式:
只有一行,为该同学的平均成绩,保留两位小数。为了提高精度,求出的平均成绩建议使用double类型存储。
输入样例:
5
80 75 67 90 97
输出样例:
81.80
#include<stdio.h>
int main()
{
int n ;
scanf("%d", &n);
int score[100]= {0};
int i ;
double sum = 0.0000000 ;
for ( i= 0 ;i < n ; i++)
{
scanf("%d", &score[i]);
sum = sum + score[i];
}
double average = 0.000000 ;
average = sum / n ;
printf("%.2lf", average );
return 0;
}
数组查找
实验7_2_数组查找 (100 分)
有n个互不相同的整数,存储在数组中。在这n个整数中查找m个整数,如果存在,则打印出与之相邻的整数;否则就显示无此数。
输入格式:
共4行,第一行为一个整数n(0<n<=1000),第二行为用空格分隔的n个整数。第三行为一个整数 m(0<m<=100),代表查询次数。第四行为用空格分隔的m个整数。测试用例保证所有整数可以用int存储。
输出格式:
共m行,依次对应输入m次查询结果,每次的查询结果中可能有一个数、两个数或没有数。若没有数则输出“NULL”。具体见样例。
输入样例:
5
89 7890 22 56 87
6
89 7890 22 56 87 999
输出样例:
7890
89 22
7890 56
22 87
56
NULL
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
int a[1000] = {0};
int i ;
for ( i = 0 ; i< n ; i++)
{
scanf("%d", &a[i]);
}
int m ;//查询次数
scanf("%d", &m);
int b[100] = {0} ;
int j ;
for ( j = 0 ; j<m ; j++)
{
scanf("%d",&b[j]);
}
for ( j = 0 ;j < m ; j++)
{
int key = 0 ;
for ( i = 0; i < n ; i++)
{
if (b[j]==a[i])
{
if ( i == 0)
{
printf("%d\n", a[i+1]);
key = 1;
break;
}
else if ((i <= n - 2 )&&(i >= 1 ))
{
printf("%d %d\n",a[i-1], a[i+1]);
key = 1;
break;
}
else if ( i == n-1)
{
printf("%d\n", a[i-1]);
key = 1;
break;
}
}
}
if(key == 0)
{
printf("NULL\n");
}
}
return 0;
}
/*#include<stdio.h>//这是我同学的写法,提供另一种思路QAQ
int main() {
int n;
scanf("%d", &n);
int a[n];
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
int m;
scanf("%d", &m);
int b[m];
for (int i = 0; i < m; i++) {
scanf("%d", &b[i]);
}
int k = 0;
if (n == 1) {
for (int i = 1; i <= m; i++) {
printf("NULL\n");
}
return 0;
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (b[i] - a[j] == 0) {
k = 1;
if (j == 0) {
printf("%d\n", a[j + 1]);
k = 1;
break;
} else if (j > 0 && j < n - 1) {
printf("%d %d\n", a[j - 1], a[j + 1]);
k = 1;
break;
} else if (j == n - 1) {
printf("%d\n", a[j - 1]);
k = 1;
break;
}
}
if (j == n - 1) {
printf("NULL\n");
break;
}
}
}
return 0;
}
*/
奇数偶数
实验7_3_奇数偶数 (100 分)
已知一个长度为n的整数数组,在保证原顺序的前提下,将该数组中所有的偶数放到所有的奇数之前,存到一个新数组中,并将新数组输出。
输入格式:
共2行,第一行为一个整数n(0<n<=200),代表输入整数个数,第二行为n个用空格分隔的整数,需保存在待处理数组中。测试用例保证所有整数可以用int存储。
输出格式:
只有一行,为新数组中的元素,数与数之间用一个空格分隔,第n个数后是换行符。
输入样例:
10
3 9 4 5 8 7 10 2 6 1
输出样例:
4 8 10 2 6 3 9 5 7 1
#include<stdio.h>
int main()
{
int n ;
scanf("%d", &n);
int i ;
int num[200] = {0};
int new_num[200]= {0};
for (i = 0 ; i< n ; i++)
{
scanf("%d", &num[i]);
}
int count = 0;
for ( i= 0 ;i < n ; i++)
{
if(num[i]%2 == 0)
{
new_num[count]= num[i];
count ++ ;
}
}
for ( i = 0; i < n ; i++)
{
if((num[i]+1)%2 == 0)
{
new_num[count]= num[i];
count ++ ;
}
}
int j ;
for ( j = 0 ; j <count-1 ; j++)
{
printf("%d ", new_num[j]);
}
printf("%d\n", new_num[j]);
return 0;
}
向量的内积
实验7_4_向量的内积 (100 分)
请写程序计算并输出向量的内积。
输入格式:
共两行,第一行一个整数n,1<=n<=10,第二行2Xn个整数(以空格分隔),即两个长度为n的一维数组(向量)。
输出格式:
只有一个整数,为计算结果。测试用例保证所有整数(包括计算过程中的)可以用int存储。
输入样例:
3
1 2 3 4 5 6
输出样例:
32
#include<stdio.h>
int main()
{
int n ;
scanf("%d", &n);
int m = 2* n ;
int i ;
int p = 0 , q = 0 ;
int num[m] = {0};
int a[n] = {0}, b[n] = {0};
for (i = 0 ; i< m ; i ++ )
{
scanf("%d", &num[i]);
if ((i <= n-1)&&(i >= 0))
{
a[p] = num[i];
p++;
}
if((i>n-1))
{
b[q]= num[i];
q++ ;
}
}
int sum = 0;
for ( i = 0 ; i < n ; i++)
{
sum = sum + a[i] * b[i] ;
}
printf("%d", sum);
return 0;
}
发工资
实验7_5_发工资 (100 分)
每到月底,公司就要给员工发工资。每个员工的工资都是由(100,50,20,10,5,2,1) 7种面值的钞票组成的。为了发工资的简便,公司会尽量给员工发较大面值的钞票,例如某个员工的工资为1260,那么公司会给员工12张100元的、1张50元的、1张10的钞票。你的任务是,告诉你某员工的工资,你来计算如何给员工发工资。
输入格式:
为一个正整数n(可以用int存储),代表某位员工的工资。
输出格式:
为给该员工发的钞票面值与数量。具体格式见样例。
输入样例:
2352
输出样例:
100:23
50:1
2:1
#include<stdio.h>
int main() {
int n, c, a;
scanf("%d", &n);
c = n / 100;
a = n - c * 100;
if (c != 0) {
printf("100:%d\n", c);
}
c = a / 50;
a = a - c * 50;
if (c != 0) {
printf("50:%d\n", c);
}
c = a / 20;
a = a - c * 20;
if (c != 0) {
printf("20:%d\n", c);
}
c = a / 10;
a = a - c * 10;
if (c != 0) {
printf("10:%d\n", c);
}
c = a / 5;
a = a - c * 5;
if (c != 0) {
printf("5:%d\n", c);
}
c = a / 2;
a = a - c * 2;
if (c != 0) {
printf("2:%d\n", c);
}
c = a;
if (c != 0) {
printf("1:%d\n", c);
}
}
最长平台
实验7_8_最长平台 (100 分)
给定一个长度为n的整数数组,数组中连续的相等元素构成的子序列称为平台。试设计算法,求出数组中最长平台的长度。
输入格式:
共2行,第一行为一个整数n(0<n<=1000),代表输入整数个数,第二行为n个用空格分隔的整数。测试用例保证所有整数可以用int存储。
输出格式:
只有一行,为一个整数,代表输入数组的最长平台长度。
输入样例:
15
1 1 2 2 4 5 7 7 7 7 7 7 3 3 9
输出样例:
6
#include<stdio.h>
int main()
{
int n ;
scanf("%d", &n);
int i;
int a[1000]= {0};
for (i = 0 ;i < n ; i++)
{
scanf("%d", &a[i]);
}
int Max= 1;
int temp = 0 ;
for ( i =0 ; i< n ; i++)
{
if ((a[i] == a[i+1])&&(i <=n-2))
{
Max = Max +1;
}
else {
if ( Max >temp )
{
temp = Max ;
}
Max =1;
}
}
printf("%d", temp);
return 0;
}