C语言培训_010

来源:互联网 发布:济南市网络举报电话 编辑:程序博客网 时间:2024/04/28 05:04

函数

  为了方便思考,把大任务划分成一个个小的可以完成的任务。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拷贝到Astrcat(地址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
原创粉丝点击