C语言培训_010
2016-07-22 10:55
218 查看
函数
为了方便思考,把大任务划分成一个个小的可以完成的任务。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 = 41566646641203879是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_相关文章推荐
- Linux C函数参考手册(PDF版)
- C# partial关键字说明
- Lua教程(十七):C API简介
- 简单谈谈lua和c的交互
- C#用链式方法表达循环嵌套
- C#中的委托数据类型简介
- C#编写的艺术字类实例代码
- C#实现打造气泡屏幕保护效果
- 基于C#技术实现身份证识别功能
- 举例讲解C#编程中委托的实例化使用
- 使用C#代码获取存储过程返回值
- C和指针小结(推荐)
- C++中explict关键字用法
- C/C++数据对齐详细解析
- 利用C语言来求最大连续子序列乘积的方法
- 字符串的组合算法问题的C语言实现攻略
- C 语言基础教程(我的C之旅开始了)[三]
- 学习C和C++的9点经验总结
- C++中的extern “C”用法详解