linuxC学习第十四天

一、今天主要对一些知识进行了回顾和深入了解。

1、int占4个字节,对于int型它能写入的整数不能超过10个不然编译就会出错。 在编写通讯录一类要超过10个数个的程序时,可以使用long long 。long long 占8个字节,而long可能4个字节,可能8个字节。
2、在写函数时,一定要注意形参列表的检测。如果没有这一步,一旦有用户输入一个完全错误的数,可能会导致系统崩溃。
3、重新回顾了一下指针和函数,和一些变量;
全局变量:在函数外定义的变量,变量可以使用的有效范围,定义的位置开始到文件结束
局部变量:在 {} 中的变量,都是局部变量,有效范围,值当前的 {} 有效
变量使用的时候有就近原则,局部变量会屏蔽全局变量

#include <stdio.h>

void my_swap(int a, int b)									  //形参是整型的情况
{
	int tmp = a;
	a = b;
	b = tmp;
}

void my_swap1(int *pa, int *pb)								//形参是指针的情况
{
	int tmp = *pa;
	*pa = *pb;
	*pb = tmp;
}

int main()
{	
	int a = 10;
	int b = 20;
	
	my_swap(a, b);										//结果a=10,b=20;
	printf ("a = %d, b = %d\n", a, b);
	
	my_swap1(&a, &b);									//结果a=20,b=10;
	printf ("a = %d, b = %d\n", a, b);
	
	return 0;
}

想要对main函数中变量进行操作,要使用指针指向这个变量的地址才能操作这个空间

二、找到一组数中第二大的数

/*-----------------------------找出第2大的数------------------------------*/
#include <stdio.h>

int max2(int a[],int len)				
{	
	if(NULL == a || len < 0)										//形参检查
	{	
		return;
	}
	                                							//功能实现
	int i;				
	int max1 = a[0];
	int max2 = a[0];
	
	for(i=0;i<len;i++)
	{
		if(max1 < a[i])
		{
			if(max1 > max2)
			{
				max2 = max1;
			}
			
			max1 = a[i];
		}
		else if(max1 > a[i])
		{	
			if(a[i] > max2)
			{
				max2 = a[i];
			}
		}
	}
	
	return max2;															//返回参数
}	

int main()
{
	int a[]={12,12,54,65,54,65,54,32,23};
	int len=sizeof(a)/sizeof(a[0]);
	
	printf("%d\n",max2(a,len));
	
	return 0;
}

三、对一个8位或8位以下的整数进行加密,解密。加密要求如下

首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,
最后将第一位和最后一位数字交换

#include <stdio.h>

/*----------------------------------将整数换成数组---------------------------------------*/

int Zhuan(int num,int *pa)									   		//逆序
{	
	if(0 == num || NULL == pa)								   		//判断形参
	{
		return -1;
	}
	
	int len = 0;
	int i=0;
	while(num)																	//整数——数组(逆序)
	{
		pa[i] = num%10;
		num /= 10;  
		++len;
		++i;
	}
	
	return len;
}

/*----------------------------------加密----------------------------------------*/

int JiaMi(int *pa,int len)													//进行加密处理
{	
	if(NULL == pa || len < 0)													//判断形参
	{
		return -1;
	}

	int i;	
	for(i=0;i<len;i++)												        //每位数字都加上5,再用和除以10的余数代替该数字
	{
		pa[i]=(pa[i]+5)%10;
	}
	printf("\n");
	
	int temp  = pa[len-1];												    //最高位和最低位交换
	pa[len-1] = pa[0];
	pa[0]  =    temp;
	
	int s=pa[0];
	for(i=1;i<len;i++)
	{
		s=s*10+pa[i];															 //将数组转换成整型
	}
	
	return s;
}

/*----------------------------------解密----------------------------------------*/

int JieMi(int s)																 //解密处理
{	
	if(s < 0)
	{
		return -1;
	}

	int pa[8]={0};
	int i;
	
	int len=Zhuan(s,pa);													 // 整数转成数组
	
	for(i=0;i<len;i++)														 //解密步骤
	{
		if(pa[i] > 5)
		{
			pa[i] = pa[i]-5;	
		}
		else
		{
			pa[i] = pa[i]+5;
		}
	}
	
	int temp = pa[len-1];													//更换首尾数
	pa[len-1] = pa[0];
	pa[0] = temp;	
	
	int a=pa[0];
	for(i=1;i<len;i++)														//数组转成整型
	{
		//s=s+pow(10,len-1-i)*pa[i];
		a=a*10+pa[i];
	}
	
	return a;													  			  //返回整数s
}

int main()
{
	int number=7554621;
	int a[8]={0};
	
	int len=Zhuan(number,a);
	
	int s=JiaMi(a,len);
	printf("加密后的数:%d\n",s);
	
	printf("解码后的数:%d\n",JieMi(s));
		
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43360263/article/details/84472836