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)
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
- C语言培训_010
- C语言培训总结
- C语言培训_001
- C语言培训_002
- C语言培训_003
- C语言培训_004
- C语言培训_005
- C语言培训_006
- C语言培训_007
- C语言培训_008
- C语言培训_009
- C语言培训_011
- [C] C程序100例_010
- C语言与算法设计技能培训
- 一次C语言培训的试讲
- 培训 学习总结(C语言)
- java培训之C语言基础
- C语言-10日培训-小结
- html5借助百度地图API来实现地理定位
- 测试用例设计需要注意的几个点
- iOS学习之—— UICollectionViewFlowLayout
- Android studio远程主机强迫关闭了一个现有的连接(夜神模拟器)
- linux 下scandir显示指定目录下文件代码 c 实现
- C语言培训_010
- svn: Invalid authz configuration
- LeetCode(3) Longest Substring Without Repeating Characters
- Eclipse中添加文档注释快捷键
- UVA 10755 Garbage Heap
- 【札记】SUSE Linux(SLES 11为例)下常用维护命令,文件大小、查找内容、统计、打包、远程拷贝、FTP、SSH
- 实例:再按一次返回键退出应用
- PAT-B 1026. 程序运行时间
- HDU 5052 Yaoge’s maximum profit (树链剖分 + 线段树)