C语言培训_010

函数

  为了方便思考,把大任务划分成一个个小的可以完成的任务。C语言的程序就是一个个函数组成的。通常包含主函数。
  函数值是传递过去的,并不能改变数据本身。
  函数的类型要和返回值一致。
#include"stdio.h"
#include"stdbool.h"
void a(int b,int c)//空类型函数,参数为两个 int 型。 
{
	printf("%d,%d\n",a,b);
} 

int b(void)//void 可以不写。 
{
	return 1; 
}

bool c(int n)//bool 型函数。 
{
	bool b=true;
	for(int i=2;i<n/2;i++)
	{
		if(n%i==0)
		{
			b=false;
			break;
		}
	}
	return b;
}

double d(double a)//double 型函数。 
{
	a+=1.5;
	return a;
} 

int main()
{
	double x=0;
	printf("%d\n",d(x));
	printf("%d\n",x);// x 依然为 0 . 因为是把 x 的值传入函数,并非改变 x。
	
	double y=0;
	y=d(y);//把 y 的值传入函数,再把得到的值赋给y。 
	 
	return 0;
} 

函数操控数据

  参数传递无法给改变原来的函数值。但是如果需要改变,可以用数据的地址来操控。地址就是数据在内存中存储的位置。地址一般是数据前加上‘&’符号。

#include"stdio.h"

//声明某数据为指针,一般是 类型后加 ‘*’,如 int* a,意思是 a 是一个 int 型指针。
//具体数据前加 “&”,表示该数据的地址。 如 int k=0; &k 就是 k 的地址。 
//指针前加 *,表示 该指针指向的数据。 如 int *a, a是地址。 (*a)是数据 
 
//数组的指针和地址,int b[100],定义100个 int 型数据。 
//此时 b 就表示首地址,即 b[0] 的地址。
// b+1,表示 b[1] 地址。即首地址偏移 1个单位后的地址。
// b+99,表示 b[99] 的地址。即首地址偏移 99 个单位后的地址。
// *(b+99) ,表示 b[99].即 首地址偏移 99个单位后的地址所存的数据。 
void change(int *a,int x)//此函数的意思是让输入值扩大 x 。 
{
	//此时 a 就表示地址。a 为 int* 型,或者说是 int 型的指针。
	// 指针前加 *,表示 该指针指向的具体数据。 
	*a=*a+x;// a 指向的具体数据 被赋值为 ( a 指向的具体数据加上 x)
}

int main()
{
	int a=0;// a 为 int 型数据。
	printf("a的地址为:%#x\n",&a);//数据前加 “&”,表示该数据的地址。 
	change(&a,100);// 此时 第一个参数表示 a 在内存中的地址。
	//再打印 a 的地址看看。
	printf("a的地址为:%#x\n",&a);
	
	//再打印 a,看看值是怎么改变的。 
	printf("%d\n",a);//这里 a 的值被改变了。是通过地址来操控的。 
	
	return 0;
}


递归的再次研究

斐波那契数列:(用递归函数求)(输入值要小,因为递归很浪费电脑资源,40多项就求要很久了)
#include"stdio.h"
int fbnq(int x)
{
	if(x==1||x==2)
	{
		return 1;
	}
	else
	{
		return fbnq(x-1)+fbnq(x-2);
	}
} 

int main()
{
	int n;
	printf("输入要求斐波那契的第几项:\n");
	scanf("%d",&n); 
	printf("斐波那契地 %d 项为 %d \n",n,fbnq(n));
	return 0;
}
斐波那契数列(不用递归,5个一行的输出前50 项)
#include"stdio.h"

int main()
{
	long long int a[50];//定义 50 个 int 型数据 
	a[0]=1;
	a[1]=1;
	for(int i=2;i<50;i++)
	{
		a[i]=a[i-1]+a[i-2];
	}
	for(int i=0;i<50;i++)
	{
		if(i%5==0)
		{
			printf("\n");
		}
		printf("%10lld\t",a[i]);
	}
	
	return 0;
}

汉诺塔进阶


算法的介绍

    算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令 ,算法代表着用系统的方法描述解决问题的策略机制
算法有分治,递归,贪心等。以后都会培训到。

几个算法问题

第一题:

203879 * 203879 = 41566646641
203879是6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
归纳一下筛选要求:
1.6位正整数
2.每个数位上的数字不同
3.其平方数的每个数位不含原数字的任何组成数位
4.答案是一个6位的正整数(639172)

第二题

超市的标价牌倒着贴会导致赔钱和赚钱(6会被误认为9,且数据会整体倒过来,0不能作为末位数)
如8811被误认为1188,699被看成669.
某超市贴反两个四位数的标价牌,第一个多赚200多,第二个少赚800多。综合起来多赚558元。
求少赚钱的那个标价(9088元)

字符串函数 #include"string.h"

strcpy(地址A,地址B)把B拷贝到A
strcat(地址A,地址B)把B加到A后面,切返回A的地址
strcmp(地址A,地址B)比较两者的ASCII码大小
strlen(地址A)返回字符串长度
atoi(地址A)字符串变成整数
itoa(被转化数A,存放S,要转化的进制B)把A转化成B进制存在字符串S里
sprintf(地址A,格式化控制符,数据)把数据按照控制输入到字符串A中

C语言到C++的过度。


计算机二级的C++训练01


扩展

算法
http://baike.baidu.com/link?url=8kFQLQEroxNcfMlczEtUz8uODQWz8xaz_hjRS776lxzhbjOmYBIpfb4k1tD2Gs_tF0bTess_61njjVrhp_B3X_
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值