C语言基础题

  •  简化的插入排序

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

#include <stdio.h>

int main()
{
	int n,i,x,t,j;
	int index;
	int a[100];
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);			
	}
	scanf("%d",&x);
	for(j=n-1;j>=0;j--)	//从数组后面开始判断大小 
	{
		if(x>a[j])	//如果插入数遇到比他小的,则该数插入在比他大的这个数的后一位 
		{
			a[j+1] = x;
			break;	//插入完毕即退出循环 
		}
		else		//若插入数遇到比他大的,则该数不插入 
		{
			a[j+1] = a[j];		//比他大的数后退一位 
		}
		
	}
	if(j<0)
		a[0] = x;	//若上面for循环中一直未遇到比他小的,则他为最小,为a[0] 

	for(i=0;i<=n;i++)
	{
		printf("%d ",a[i]);	//从小到大排序输出 
	}
	
	return 0;
}
  • 交换最小值和最大值

本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。

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

#include <stdio.h>

int main()
{
	int n,i,j,k,t,max,min;
	int a[100];
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	max = min =  a[0];	//对最大值与最小值赋初值 
	for(i=0;i<n;i++)
	{
		if(a[i]<=min)	//寻找最小值 
		{
			k = i;
			min = a[k];
		}
	} 
	t = a[k];		//a[k]不能直接写为min 若这样,则会变成min与第一个数的值交换 
	a[k] = a[0];	//而数组里的那个最小值并没有跟第一个数交换 
	a[0] = t;
	for(i=0;i<n;i++)
	{
		if(a[i]>=max)	//寻找最大值 
		{
			j = i;
			max = a[j];
		} 
	}
	t = a[j];		//最大值与最后一个数交换 
	a[j] = a[n-1];
	a[n-1] = t;
	for(i=0;i<n;i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
}
  • 找出不是两个数组共有的元素

给定两个整型数组,本题要求找出不是两者共有的元素

#include <stdio.h>

int main()
{
	int n1,n2,i,x,j,k=0;
	int a[20],b[20],f[20];
	
	scanf("%d",&n1);
	for(i=0;i<n1;i++)
		scanf("%d",&a[i]);
	scanf("%d",&n2);
	for(i=0;i<n2;i++)
		scanf("%d",&b[i]);
		
	for(i=0;i<n1;i++)		//存放a数组独有的数字在f中 
	{
		for(j=0;j<n2;j++)
		{
			if(a[i]==b[j])
				break;
		}
		if(j>=n2)
			f[k++] = a[i];	//一开始k=0,此处首先让f[k]=a[i],然后让k++  
	}
	for(i=0;i<n2;i++)	//存放b数组独有的数字在f中  
	{
		for(j=0;j<n1;j++)
		{
			if(b[i] == a[j])
				break;		
		}
		if(j>=n1)
			f[k++]=b[i];	//此处的k为上一个for循环逐增后的k 
	}
	 
	printf("%d",f[0]);
	for(i=1;i<k;i++)	//遍历f数组 
	{
		for(j=0;j<i;j++)
		{
			if(f[i]==f[j])//遍历i以前的数字,看看有没有重复的 
				break;		//如有重复,则跳出循环,不输出 
		}
		if(j>=i)		//非重复,已遍历完时j>=i,打印出这个数 
			printf(" %d",f[i]);
	}
	return 0;
}
  • 求整数序列中出现次数最多的数

本题要求统计一个整型序列中出现次数最多的整数及其出现次数

#include <stdio.h>

int main()
{
	int n,i,k,t,max=0;
	int a[100];
	int b[100]={0};		//用来保存数字出现的次数,初始化为0 
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]); //输入的数直接保存 
	}
	int j;
	for(j=0;j<=n;j++)	//遍历与第n个数相等的数值 
	{
		for(k=j;k<n;k++)	//k=j,即出现了一次,b[j]++ 
		{
			if(a[k] == a[j])
				b[j]++;	//出现的数值的次数 
		}
	}
	for(i=0;i<n;i++)
	{
		if(b[i]>max)	//寻找最大次数 
		{
			max = b[i];		
			t = i;	//获得的数字的最大次数对应的下标 ,a[t]即对应的那个数字 

		}
					
	}
	printf("%d %d",a[t],max);
	return 0;
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值