linuxC学习第二十二天

一、将一组从小到大排列好的数中相同的数去除

/*----------------------------------将一组从小到大排列好的数中相同的数去除-------------------*/

#include <stdio.h>

int  unique1(int *pa,int len)
{
	int i,j;
	int k;
	
	for(i = 0; i < len-1; i++)									//从数组第一个数开始遍历直到最后第二个数 
	{
		for(j = i+1; j < len;)									//在上面便利的前提下去看下一个数 
		{
			if(pa[i] == pa[j])									//如果相同 
			{
				for(k = j; k < len-1; k++)						//用k记下相同数的位置,从这个位置开始将后面的值往前覆盖 
				{
					pa[k]=pa[k+1];
				}
				len--;											//覆盖掉后总长度减1 ,由于是向前覆盖的。因此不需要将j++,这时j的位置就是下一个数的位置 
			}
			else												//没有相同的数就往下继续遍历 
			{
				j++;
			}
		}
	}
	
	for(i = 0; i < len; i++)
	{
		printf("%d ",pa[i]);
	}
	
	printf("\n");
}

int main()
{
	int a[13] = {1,3,4,5,5,5,6,6,7,8,9,9,20};
	int len = sizeof(a)/sizeof(int);
	
	unique1(a,len);   
	
	return 0;
}

二、求复数和

/*---------------------------------------求复数和---------------------------------------------------*/
#include <stdio.h> 
#include <string.h>

typedef struct 											//定义复数的实部和虚部
{
	float real;
	float imaginary;
}Complex;


Complex add(Complex p1,Complex p2)						//分别求实部和虚部
{
	Complex sum;
	sum.real = p1.real+p2.real;
	sum.imaginary = p1.imaginary+p2.imaginary;
	return (sum);
}

int main()
{
	Complex p1;
	Complex p2;
	
	printf("please input the ONE  number's realpart:\n");								//输入第一个复数
	scanf("%f",&p1.real);
	printf("please input the ONE number's:imagpart\n");
	scanf("%f",&p1.imaginary);
	
	printf("please input the TWO number's realpart:\n");								//输入第二个复数
	scanf("%f",&p2.real);
	printf("please input the TWO number's imagpart:\n");
	scanf("%f",&p2.imaginary);

	printf("realpart=%g,imagpart=%g\n",add(p1,p2).real,add(p1,p2).imaginary);		//打印和
	
	return 0;
}

本来想用结构体传地址的,但发现结构体比较小可以直接传结构体。

三、计算一句话中的单词个数

/*----------------------------------------计算一句话中的单词个数--------------------------------------------*/
#include <stdio.h>
#define  N  50

int Statis1(char *pa,int len)
{
	int i;
	int word;
	int num = 0;
	
	for(i = 0; i < len; i++)
	{
		
		if((pa[i] < 'A' || pa[i] > 'Z') && (pa[i] < 'a' || pa[i] > 'z'))						//判断是否是字母	
		{
			word=0;																				//不是字母说明不是单词将标记符word置0
		}
		else if(word == 0)																		//首先至少是英文,看标记符是否是0说明单词的开始,将标记符置1,说明在记这个单词
		{
			word = 1;
			num++;																				//满足上面条件说明是一个单词	
		}
	}
	
	return num;
}
int main()
{
	char a[N] = " 12 32 I am a 43 good boy !";
	int len = sizeof(a)/sizeof(char);

	printf("英语单词的个数是%d\n", Statis1(a,len));
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值