作业
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