C语言基础-day5

在这里插入图片描述
作业
1.循环输入n个元素,计算最大差值,最小和,最大和 (不允许使用排序)
最大差:最大值-最小值
最小和:最小值+第二小值
最大和:最大值+第二大值

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int n,i,min1,min2,max1,max2;
	printf("Please inout n:");
	scanf("%d",&n);
	int a[n];
	printf("Please input %d number:",n);
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	min1=max1=0;
	for(i=1;i<n;i++){
		if(a[min1]>a[i])
			min1=i;
		if(a[max1]<a[i])
			max1=i;
	}
	min2=max1;
	max2=min1;	
	for(i=0;i<n;i++){
		if(a[min1]==a[i] || a[max1]==a[i])continue;  //这里排除掉与最小值和最大值相等的数,若还是相等,则数组取得是全都相等的元素值
		if(a[min2]>a[i])
			min2=i;
		if(a[max2]<a[i])
			max2=i;
	}
	printf("maximum difference is %d\n",a[max1]-a[min1]);
	printf("minimum sum is %d\nmaximum sum is %d\n",a[min1]+a[min2],a[max1]+a[max2]);
	return 0;
}

Please inout n:5
Please input n number:5 7 2 9 10
maximum difference is 8
minimum sum is 7
maximum sum is 19

2.循环输入n个元素,交换数组中最大值和最小值

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int n,i,min,max,t;
	printf("Please input n:");
	scanf("%d",&n);
	int a[n];
	printf("Please input %d number:",n);
	scanf("%d",&a[0]);
	min=max=0;
	for(i=1;i<n;i++){
		scanf("%d",&a[i]);
		if(a[min]>a[i])
			min=i;
		if(a[max]<a[i])
			max=i;
	}
	if(min!=max){
		t=a[min];
		a[min]=a[max];
		a[max]=t;
		printf("after exchange max and min:");
		for(i=0;i<n;i++)
			printf("%-4d",a[i]);
	}
	else
		printf("min equal to max");
	putchar(10);
	return 0;
}

Please input n:5
Please input 5 number:23 55 2 3 11
after exchange max and min:23 2 55 3 11

3.循环输入n个元素,输入查找元素key,
如果key在数组中出现1次,则输出对应的位置
如果key在数组中出现0次,则提示不存在
如果key在数组中出现多次,则输出出现的次数

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int n,i,key,index,count=0;
	printf("Please input n:");
	scanf("%d",&n);
	int a[n];
	printf("Please input %d number:",n);
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	printf("Please input key:");
	scanf("%d",&key);
	for(i=0;i<n;i++){
		if(key==a[i]){
			index=i;
			count++;
		}
	}
	if(0==count)
		printf("%d is not exist\n",key);
	else if(1==count)
		printf("index of %d is %d\n",key,index);
	else
		printf("time of %d is %d\n",key,count);
	return 0;
}

Please input n:5
Please input 5 number:3 4 2 2 1
Please input key:4
index of 4 is 1

4.循环输入n个元素,输入flag,
如果flag==1,则实现冒泡排序升序并输出

如果flag==0,则实现简单选择排序降序并输出

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int n,i,j,max,t,flag;
	printf("Please input n:");
	scanf("%d",&n);
	int a[n];
	printf("Please input %d number:",n);
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	printf("Please input flag:");
	scanf("%d",&flag);
	if(flag){
		for(i=1;i<n;i++){
			for(j=0;j<n-i;j++){
				if(a[j]>a[j+1]){
					t=a[j];
					a[j]=a[j+1];
					a[j+1]=t;
				}
			}
		}
		printf("bubble sort from small to large:");
		for(i=0;i<n;i++){
			printf("%-4d",a[i]);
		}
		putchar(10);
	}
	else{
		for(i=0;i<n-1;i++){
			max=i;
			for(j=i+1;j<n;j++){
				if(a[max]<a[j])
					max=j;
			}
			if(max!=i){
				t=a[max];
				a[max]=a[i];
				a[i]=t;
			}
		}
		printf("simple select sort from large to small:");
		for(i=0;i<n;i++){
			printf("%-4d",a[i]);
		}
		putchar(10);
	}
	return 0;
}

Please input n:5
Please input 5 number:5 4 7 2 10
Please input flag:1
bubble sort from small to large:2 4 5 7 10

5.循环输入数组元素,实现数组元素逆置
eg:int arr[]={11,22,33,44}
逆置后的结果是44 33 22 11

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int n,i,t;
	printf("Please input n:");
	scanf("%d",&n);
	int a[n];
	printf("Please input %d number:",n);
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	for(i=0;i<n/2;i++){
		t=a[i];
		a[i]=a[n-1-i];
		a[n-1-i]=t;
	}
	printf("inverted order:");
	for(i=0;i<n;i++){
		printf("%-4d",a[i]);
	}
	putchar(10);
	return 0;
}

Please input n:5
Please input 5 number:1 2 3 4 5
inverted order:5 4 3 2 1

6.循环输入n个数组元素,输入key,请删除所有和key相等的元素

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int n,m,i,j,key;
	printf("Please input n:");
	scanf("%d",&n);
	int a[n],b[n];
	printf("Please input %d number:",n);
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	printf("Please input key:");
	scanf("%d",&key);
	m=n;
	i=j=0;
	while(i<n){
		while(key==a[i] && i<n){
			i++;
			m--;
		}
		if(i<n){
			b[j++]=a[i++];
		}
	}
	printf("array after delete all key:");
	for(j=0;j<m;j++){
		printf("%-4d",b[j]);
	}
	putchar(10);
	return 0;
}

Please input n:5
Please input 5 number:5 6 3 2 3
Please input key:3
array after delete all key:5 6 2

7.循环输入n个数组元素,输入变量k的值,将一个一维数组循环右移k位
eg: k=2
int arr[]={11,22,33,44,55};
移动的结果是:44 55 11 22 33

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int n,k,t,i;
	printf("Please input n:");
	scanf("%d",&n);
	int a[n];
	printf("Please input %d number:",n);
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	printf("Please input k:");
	scanf("%d",&k);
	for(i=0;i<n/2;i++){
		t=a[i];
		a[i]=a[n-1-i];
		a[n-1-i]=t;
	}
	for(i=0;i<k/2;i++){
		t=a[i];
		a[i]=a[k-1-i];
		a[k-1-i]=t;
	}
	for(i=k;i<(n+k)/2;i++){
		t=a[i];
		a[i]=a[k+n-1-i];
		a[k+n-1-i]=t;
	}
	printf("new order:");
	for(i=0;i<n;i++){
		printf("%-4d",a[i]);
	}
	putchar(10);
	return 0;
}

Please input n:5
Please input 5 number:1 2 3 4 5
Please input k:3
new order:3 4 5 1 2

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值