软件1801-1803班《面向过程程序设计》(5)一维数组

7-1 求最大值及其下标 (10 分)
本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。

输入格式:
输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。

输出格式:
在一行中输出最大值及最大值的最小下标,中间用一个空格分开。

输入样例:
6
2 8 10 1 9 10
输出样例:
10 2
#include<iostream>
#include <stdio.h>
#include<algorithm>
using namespace std;
int main()
{
	int b[20];
	int a[20];
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	cin>>a[i];
	for(int i=0;i<n;i++)
	b[i]=a[i];
	
  	sort(a,a+n);
  	//max=a[n-1]
  	for(int i=0;i<n;i++)
  	{
  		if(b[i]==a[n-1])
  		{
  			cout<<a[n-1]<<" "<<i;
  			break;
		  }
	  }
  	
    return 0;
}
7-2 简化的插入排序 (15 分)
本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。

输入格式:
输入在第一行先给出非负整数N(<10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X。

输出格式:
在一行内输出将X插入后仍然从小到大有序的整数序列,每个数字后面有一个空格。

输入样例:
5
1 2 4 5 7
3
输出样例:
1 2 3 4 5 7 
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int n;
	int a[100];
	cin>>n;
	for(int i=1;i<=n;i++)
	cin>>a[i];
	cin>>a[0];
	sort(a,a+n+1);
	for(int i=0;i<=n;i++)
	cout<<a[i]<<" ";
	
	return 0;
	
}
7-3 交换最小值和最大值 (10 分)
本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。

注意:题目保证最大和最小值都是唯一的。

输入格式:
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。

输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。

输入样例:
5
8 2 5 1 4
输出样例:
1 2 5 4 8 
#include <stdio.h>
#include<iostream>
using namespace std;
int main()
{
	int n,a[10];
	int c,d,min,max,j;
	cin>>n;
	for(int i=0;i<n;i++)
	cin>>a[i];
	min=max=a[0];
	for(int i=0;i<n;i++)
	{
		if(a[i]<=min)
		  {
		  	min=a[i];
		  	j=i;
		  }
	}
	c=a[0];
	a[0]=min;
	a[j]=c;
	for(int i=0;i<n;i++)
	{
		if(a[i]>=max)
		  {
		  	max=a[i];
		  	j=i;
		  }
	}
	d=max;
	a[j]=a[n-1];
	a[n-1]=d;
	for(int i=0;i<n;i++)
	cout<<a[i]<<" ";
	cout<<endl;
}
7-4 二分查找法 (10 分)
用二分法在一个有序数列{1,2,3,4,5,6,7,8,9,10}中查找key值,若找到key则输出其在数组中对应的下标,否则输出not found。

输入格式:
直接输入一个要查找的正整数key。没有其它任何附加字符。

输出格式:
找到则在一行中按照“weizhi:下标”的格式输出其在数组中对应的下标,否则输出not found。

输入样例:
4
输出样例:
weizhi:3
输入样例:
15
输出样例:
not found

// 猥琐写法  不想写二分
#include<stdio.h>
int main()
{
    int a[10]={1,2,3,4,5,6,7,8,9,10};
    int n;
    scanf("%d",&n);
    if(n>10)
    {
        printf("not found\n");
    }
    else
    printf("weizhi:%d",n-1);
    return 0;
}
7-5 计算平均分并输出低于平均分的学生成绩 (10 分)
从键盘上输入若干(<20)个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。

输入格式:
在一行中输入若干(<20)个学生的实型成绩,用输入负数结束输入,数据之间各用一个空格间隔。

输出格式:
在一行中按照“ave=平均成绩(回车)”顺序输出平均成绩,平均成绩保留2位小数,没有列宽控制。 在下一行中输出低于平均分的学生成绩,学生成绩保留1位小数,列宽为6列。

输入样例:
85 65 74 -1
输出样例:
ave=74.67
  65.0  74.0
#include<stdio.h>
int main()
{
	int  i = 0;
	float sum = 0, average;
	float str[30];
	while (scanf("%f", &str[i])&&str[i]!=-1)
	{
		sum += str[i];
		i++;
		
	}
	
	average = sum / i;
	printf("ave=%.2f\n", average);
	for (int t = 0; t < i; t++)
	{
		if (str[t] < average)
		{
			printf("%6.1f", str[t]);
		}
	}
	
	return 0;
}
7-6 删除重复的数据 (5.7) (15 分)
将输入的n个(n≤10)数据中重复的数据删除,即重复的数据只保留1个。

输入格式:
首先输入整数n,然后在下一行输入n个整数。

输出格式:
在一行中输出去掉了重复数据后的值 ,数据之间用一个空格分隔,最后一个数据后面无空格。

输入样例:
10
81 78 85 67 85 40 85 82 90 78
输出样例:
81 78 85 67 40 82 90
#include <stdio.h>
int main()
{
        int n,i,b;
        int a[10];
        scanf("%d",&n);
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
        for(b=0;b<n-1;b++)
		{
            for(i=b+1;i<n;i++)
            {
                if(a[b]==a[i])
				            {
                        a[i]=0;
                    }
            }
    }
            int c=0,d[10];
            for(i=0;i<n;i++)
                {
                  if(a[i]!=0)
			       	     {
                    d[c]=a[i];
                    c++;
			           	}
                }
            for(i=0;i<c;i++)
                { 
                   printf("%d",d[i]);
                   if(i!=c-1)
                       printf(" "); 
                }
}
7-7 找出不是两个数组共有的元素 (15 分)
给定两个整型数组,本题要求找出不是两者共有的元素。

输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。

输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。

输入样例:
10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1
输出样例:
3 5 -15 6 4 1
#include <stdio.h>
int main()
{
	int m, n, i, j, k = 0;;
	int a[20], b[20], c[20];
	//int b[20];
	//int c[20];
 
	scanf("%d", &m);
	for (i = 0; i<m; i++)
		scanf("%d", &a[i]);
	scanf("%d", &n);
	for (i = 0; i<n; i++)
		scanf("%d", &b[i]);
 
	for (i = 0; i<m; i++)
	{
		for (j = 0; j<n; j++)
		{
			if (a[i] == b[j])
				break; 
		}
		if (j >= n) 
		{
			c[k] = a[i];
			k++;
		}
	}
	for (i = 0; i<n; i++)
	{
		for (j = 0; j<m; j++)
		{
			if (b[i] == a[j])
				break; 
	}
		if (j >= m) 
		{
			c[k] = b[i];
			k++;
		}
	}
	printf("%d", c[0]); 
	for (i = 1; i<k; i++) 
	{
		for (j = 0; j<i; j++) 
		{
			if (c[i] == c[j])
				break;
		}
		if (j >= i) 
			printf(" %d", c[i]); 
	}
	printf("\n");
	return 0;
}
7-8 数组中能被5整除的数的和 (5 分)
在一维数组中有10个整数,求出其中能被5整除的所有数的和。

输入格式:
在一行中输入10个整数,数据之间用1个空格间隔。

输出格式:
直接输出运算结果,没有任何附加字符。

输入样例:
5 6 8 15 98 45 71 2 3 1
输出样例:
65
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int n = 1;
	int a;
	int sum = 0;
	while (n <= 10)
	{
		cin >> a;
		if (a % 5 == 0)
			sum += a;
		n++;
	}
	cout << sum << endl;
	//while (1);
}
7-9 将下标为偶数的元素值赋值给数组n (10 分)
从键盘上输入10元素的值存入一维数组m中,然后将下标为(0. 2. 4. 6. 8)的元素值赋值给数组n,最后输出数组n的内容。

输入格式:
在一行中输入10个整数,数据之间各用一个空格间隔。

输出格式:
在一行中直接输出结果,每个数据输出占4列列宽。

输入样例:
1 4 7 8 5 2 6 9 3 1
输出样例:
   1   7   5   6   3

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int n = 1;
	int a;
	int sum = 0;
	while (n <= 10)
	{
		cin >> a;
		if (n % 2 != 0 && n < 10)
			printf("%4d", a);
		n++;
	}
	//cout << sum << endl;
	//while (1);
}
发布了55 篇原创文章 · 获赞 9 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_42612338/article/details/89387299