BUPT2021秋季计算导论第九次实验

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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

影不在遗忘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值