C语言心悟
知贵待缘
这辈子只能这样吗!!!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
16----swap交换2个数的值
问题描述 编程实现swap交换2个数的值。代码实现:#include<stdio.h>void swap1(int a,int b){ int t; t=a; a=b; b=t;} void swap2(int *pa, int *pb){ int *p; p=pa; pa=pb; pb=p;}void swap3(int *p...原创 2020-04-17 16:03:20 · 2626 阅读 · 0 评论 -
15----矩阵转置
问题描述 编程实现矩阵转置,并求对角线之和。代码实现:#include<stdio.h>#define N 4void main(){ int a[N][N],(*p)[N]; int i,j,t,s=0; //输入读取数据 printf("input a: \n"); for(i=0;i<N;i++){ printf("i...原创 2020-04-09 17:25:19 · 223 阅读 · 0 评论 -
14----统计字符数
问题描述 编程统计输入字符串中的字符数。代码实现:#include<stdio.h>#include<string.h>void main(){ char str[3][100]; int up=0,low=0,space=0,num=0,other=0,i,j; //输入字符串 for(i=0;i<3;i++){ ...原创 2020-04-09 16:58:31 · 272 阅读 · 0 评论 -
13----编程打印最大公约数和最小公倍数(辗转相除法)
问题描述:编写两个函数,分别求两个整数的最大公约数和最小公倍数。分析:1.两个整数的最小公倍数等于它们的乘积除以它们的最大公约数。所以关键是编写最大公约数函数,最小公倍数函数只要调用最大公约数的函数就行了。2.先回顾一下求最大公约数的辗转相除方法,假设求a和b的最大公约数,则(1)a除以b取余得c,若c=0,则b即为两数的最大公约数,输出,结束。(2)若c!=0,...原创 2020-03-19 18:07:05 · 404 阅读 · 0 评论 -
12----编程打印连续数的倍数
问题描述 输入n和m,依次输出n的m倍,n-1的m倍,.........,直到1的m倍。代码实现:#include<stdio.h>void wrt(int n,int m){ if(n){ printf("%3d\n",n*m); wrt(n-1,m); }} main(){ int n,m; printf("input n,m: ...原创 2020-03-19 17:33:08 · 371 阅读 · 0 评论 -
11----编程打印孪生素数
问题描述 编写一个程序,连续输出相邻的15对孪生素数(相邻的两个素数)。代码实现:#include<stdio.h>#include<math.h>int isPrime(int a){ int flag=1,k=2; while(k<=(int)sqrt(a) && flag){ if(a%k==0) ...原创 2020-03-12 18:32:56 · 646 阅读 · 1 评论 -
10----编程分苹果
问题描述: 某幼儿园按如下方法依次给A、B、C、D、E五个小孩发苹果。将全部苹果的一半再加二分之一个苹果发给第1个小孩;将剩下苹果的三分之一再加三分之一个苹果发给第2个小孩;将剩下苹果的四分之一再加四分之一个苹果发给第3个小孩;将剩下苹果的五分之一再加五分之一个苹果发给第4个小孩;将剩下的11个苹果发给第5个小孩。每个小孩得到的苹果数均为整数。求原来共有多少个苹果?每个小孩各得到多...原创 2020-03-12 18:13:04 · 1428 阅读 · 0 评论 -
9----编程抓小偷(逻辑推理)
问题描述: 已知A、B、C、D四个人中有一人是小偷,并且,这四个人中每人要么说真话,要么说假话。在审问过程中,这四个人分别回答如下: A说:B没有偷,是D偷的。 B说:我没有偷,是C偷的。 C说:A没有偷,是B偷的。 D说:我没有偷。 编写程序,确定谁是小偷。分析: 用整型变量a、b、c、d分别...原创 2020-03-12 15:22:27 · 3047 阅读 · 1 评论 -
8----编程打印数字金字塔
问题描述 编程打印数字金字塔代码实现:#include<stdio.h>void main(){ int i,j; for(i=1;i<=9;i++){ //控制打印几行 for(j=1;j<=20-2*i;j++){ //打印空格 printf(" "); } for(j=1;j<=i;j+...转载 2020-03-11 16:29:04 · 1222 阅读 · 0 评论 -
7----编程求完全数
问题描述编写一程序,求出1000以内的所有完全数。(完全数:一个数如果恰好等于它除自身外的所有因子之和,则称该数为完全数。如6=1+2+3,则6是完全数。)代码实现:#include<stdio.h>#include<math.h>void main(){ int t,i,s,a=2; printf("1000以内有以下几个完全数:\n"); whi...原创 2020-02-21 21:43:58 · 826 阅读 · 0 评论 -
6----编程计算个人所得税
问题描述假设公民交纳个人所得税的税率如下(a代表个人收入,r代表税率): r=0(a<2000元) r=5%(2000元≤a<3000元) r=10%(3000元≤a<4000元) r=15%(4000元≤a<5000元) r=20%(5000元≤a)编写程序,要求从键盘上输入个人收...原创 2020-02-19 15:52:58 · 7610 阅读 · 0 评论 -
5----编程打印水仙花数
问题描述 水仙花数,就是一个三位数,其各数字立方和等于其本身。例如,153=1^3+5^3+3^3。算法分析 主要是如何取出数的个,十,百位上的数字。注意区分%(取余运算),/(整除运算)即可。代码实现#include int main(){ int i,j,k,m; printf("water flower's number :\n"); f原创 2017-07-17 14:56:52 · 466 阅读 · 0 评论 -
4----编程判断是某年的第几天
#includevoid main(){ int year,month,day,leap,sum; printf("input year,month,day:\n"); scanf("%d,%d,%d",&year,&month,&day); if(year%400==0 || (year%4==0 && year%100!=0)) leap=1; //是闰年 else l原创 2017-07-11 17:33:15 · 383 阅读 · 0 评论 -
3----编程求解一元二次方程
#include#includevoid main(){ float a,b,c,p,x1,x2,realpart,imagepart; printf("请输入一元二次方程的系数a,b,c的值:\n"); scanf("%f,%f,%f",&a,&b,&c); if(a==0 && b==0) printf("该方程无解!\n"); else if(a==0 && b!=0)原创 2017-07-11 17:07:32 · 2595 阅读 · 0 评论 -
2----编程实现大小写字母的转换
#includeint main(){ char c; do { scanf("%c",&c); if(c>='a' && c<='z') printf("%c\n",c-32); else if(c>='A' && c<='Z') printf("%c\n",c+32); }while(c!='#'); return 0;}原创 2017-07-11 16:29:52 · 12984 阅读 · 0 评论 -
1----编程实现100以内两个随机整数的加法运算练习(rand函数)
问题描述:编程实现100以内两个随机整数的加法运算练习算法分析首先考虑需要定义那些变量。因为是模拟加法a+b=c,所以需要定义a,b,c。接着考虑数据的获取。随机整数可以通过标准库“stdlib.h”中的伪随机函数int rand()来产生,rand()函数每次产生一个0~32767之间的随机数。如果要产生一个0~99之间的随机数,可以用表达式rang%100(取余运算原创 2017-06-30 22:25:44 · 17408 阅读 · 0 评论 -
主题五 内存管理的艺术----29.动态内存的分配
动态内存的分配模拟超市收银的程序:#include #include struct Product { char name[128]; int price;};struct Product pro[1000];struct Product sale;void waitForSale(){ printf("Record Product: ");原创 2017-06-15 22:11:34 · 237 阅读 · 0 评论 -
专题二 符号的技巧---- 12.位运算符的分析
C语言中的位运算符:&按位与,|按位或,^按位异或,~取反,>右移。2&3 010&011->010->2结合律 a&b&c==(a&b)&c==a&(b&c)交换律 a&b==b&a >>右移规则:高位补符号位,低位丢弃1100->4 8>>3 1000->0001->1~8 1000->0111->7 0x1原创 2017-06-12 21:45:38 · 447 阅读 · 0 评论 -
专题二 符号的技巧---- 14.优先级和类型转换分析
仔细阅读如下代码:#include#includetypedef struct _demo{ int* pInt; float f;}Demo;int func(int v,int m){ return (v&m !=0); //((v&m)!=0)}int main(){ Demo* pD=(Demo*)malloc(s原创 2017-06-12 21:57:51 · 371 阅读 · 0 评论 -
主题三 编译过程介绍---- 15.编译过程简介
编译过程:编译器做了什么?1.预编译;2.编译;2.编译。1.预编译:(不会报错) 处理所有注释,以空格代替 将所有的#define删除,并且展开所有的宏定义 处理条件编译指令#if,#ifdef,#elif,#else,#ednif 处理#include,展开被包含的文件 保留编译器需要使用的#pragma指令原创 2017-06-12 22:05:03 · 290 阅读 · 0 评论 -
主题三 编译过程介绍---- 16.宏定义与使用分析
#define定义可以出现在代码的任何地方#define从本行开始,之后的代码都可以使用这个宏常量#define Path1 “D:\xy”#define Path2 D:\xy\test.c#define Path3 D:\xy\Test.c//都正确,Path3中为接续符,和Path2相同 宏定义表达式:#define表达式有一种函数的感觉,但不是函数#原创 2017-06-12 22:12:06 · 312 阅读 · 0 评论 -
主题三 编译过程介绍----18.#error和#line
#error#error用于生成一个编译错误信息,并停止编译。语法: #error message (message不需要用双引号包围)#error用于程序员自定义特有的编译错误信息,对错误信息进行扩展#warning类似地,用于生成编译警告,但不会停止编译。 #include #define CONST_NAME1 "CONST_NAME1"#define C原创 2017-06-12 22:22:31 · 320 阅读 · 0 评论 -
主题三 编译过程介绍----19#pragma的分析与使用
#pragma是编译器指示字,用于指示编译器完成一些特定的动作#pragma在C语言中未统一定义,在很多编译器和操作系统中是特有的#pragma在不同的编译器间是不可移植的.预处理器将不处理它不认识的#pragma指令,留在接下来的编译期处理.两个不同的编译器可能以两种不同的方式解释同一条#pragma指令一般用法:#pragma parameter (不同的parame原创 2017-06-12 22:26:08 · 421 阅读 · 0 评论 -
专题一关键字的剖析----3.if,switch,do,while,for分析
if语句if根据条件选择执行语句(两路,二选一,类似二叉树),else不能独立存在并且和前面离它最近的if匹配。注意:if语句中零值比较要小心。bool类型bool类型的变量应该直接出现在条件中(作为flag或者开关),不要再和其它变量进行比较。C语言本身是没有bool类型的,由编译器厂商自行规定设计,造成相同的代码在不同的编译器环境下得到的结果不一致。C语言只规定了非0为原创 2017-06-12 18:34:44 · 325 阅读 · 0 评论 -
专题二 符号的技巧---- 13.++,--操作符的分析
int i=3;(++i)+(++i)+(++i)=?常规思考:4+5+6=15编译器有2种结果:1.有括号,先运算(++i),i=6,6+6+6=18;2.加法从左到右计算,先算前两个(++i),i=5,5+5+(++i)=10+6=16.3.编程结果:gcc(16),g++(16),VC(16)原因:C语言中只规定了++为自增,并没有规定计算顺序。编译器实现原创 2017-06-12 21:52:46 · 490 阅读 · 0 评论 -
主题三 编译过程介绍----20.#和##运算符的使用分析
#运算符用于在预编译期将宏参数转换为字符串#include#define CONVERS(x) #xint main(){ printf(“%s\n”,CONVERS(Hello Word!)); printf(“%s\n”,CONVERS(while)); printf(“%s\n”,CONVERS(return)); retrun 0;}//原创 2017-06-14 17:45:22 · 270 阅读 · 0 评论 -
主题四 指针和数组(上)----21.指针的基础
程序中变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间呢?int main(){ int i=5; int* p=&i; printf(“%d,%08X\n”,i,p); *p=10; printf(“%d,%08X\n”,i,p); i=20; printf(“%d,%08X\n”,i,p);}//O原创 2017-06-14 17:53:03 · 211 阅读 · 0 评论 -
版权声明
C语言这部分文章为本人观看国嵌的相关视屏整理而成的学习笔记和个人理解,所以版权属于国嵌吧,我算转载。如果各位喜欢,但是请不要用于商业,再次强调版权属于国嵌!原创 2017-06-12 18:04:23 · 688 阅读 · 0 评论 -
专题二 符号的技巧---- 11.逻辑运算符的使用分析
int i=0;int j=0;if(++i>0 || ++j>0){ printf(“%d\n”,i); printf(“%d\n”,j);} //结果:1,0短路规则:||从左向右开始计算,一旦遇到一个条件为真则立即停止运算(后面的条件表达式不再进行计算),整个表达式为真;所有条件为假表达式才为假。&&从左向右开始运算,一旦遇到某个条件为假立即停止运算(后面的原创 2017-06-12 21:41:47 · 375 阅读 · 0 评论 -
专题二 符号的技巧---- 10.单引号和双引号
char* p1=1;char* p2=’a’;char* p3=”b”;printf(“%d,%d,%d”,p1,p2,p3); //error segment error,指针指向操作系统空间,error!printf(‘\n’); //error segment error:‘\n’=10,printf(char* fmt......); C语言中单引号原创 2017-06-12 21:38:44 · 446 阅读 · 0 评论 -
主题六 函数(C语言核心)----35.函数VS宏
#include #define RESET(p, len) while( len > 0) ((char*)p)[--len] = 0void reset(void* p, int len){ while( len > 0 ) { ((char*)p)[--len] = 0; }}int main(){ int array[]原创 2017-06-15 22:49:31 · 248 阅读 · 0 评论 -
主题六 函数(C语言核心)----34.可变参数列表
可变参数列表如何编写一个可以计算n个数平均值的函数?$ Man openInt open(const char*pathname,int flags);Int open(const char*pathname,int flags,mode_t mode);//linux有2个open函数,C语言是不存在函数重载的,怎么回事?可变参数可变参数C语言中可以定义参数可变的函数原创 2017-06-15 22:47:27 · 248 阅读 · 0 评论 -
主题六 函数(C语言核心)----33.初步认识函数
初步认识函数C语言中函数的由来程序=数据+算法C程序=数据+函数函数的意义面向过程的程序设计面向过程是一种以过程为中心的编程思想,将复杂的问题分解成为一个个容易解决的问题,分解过后的问题可以按照步骤一步步完成。函数是面向过程在C语言中的体现,解决问题的每一个步骤可以用函数来实现。 函数声明与函数定义程序中的声明可以理解为预先告诉原创 2017-06-15 22:37:29 · 292 阅读 · 0 评论 -
主题五 内存管理的艺术----32.头疼的野指针
什么是野指针?野指针通常是因为指针变量中保存的值不是一个合法的内存地址而造成的(合法的内存地址有2种:堆空间和栈空间)野指针不是NULL指针,是指向不可用内存的指针。NULL指针不容易用错,因为if语句很容易判断一个指针是不是NULL。C语言中没有任何手段可以判断一个指针是否为野指针!(只有运行到野指针时才能发现异常,但是原因,具体错误代码还是不可知)。 野指针的3种根源:原创 2017-06-15 22:27:18 · 243 阅读 · 0 评论 -
主题五 内存管理的艺术----31.程序文件的一般布局
程序静态内存布局(文件布局) 程序执行时内存布局(进程,内存映射)各个段的作用堆栈段在程序运行后才正式存在(栈最先创立,函数入口main也是函数,需要栈),是程序运行的基础.bss段存放的是未初始化的全局变量和静态变量.text段存放的是程序中的可执行代码.data段存放的是那些已经初始化了的全局变量和静态变量.rodata段存放程序中的常量值(不能原创 2017-06-15 22:24:58 · 228 阅读 · 0 评论 -
主题五 内存管理的艺术----30.内存中的三雄并立
内存中的三雄并立程序中的栈栈是现代计算机程序里最重要的概念之一栈在程序中用于维护函数调用上下文,没有栈就没有函数,没有局部变量(局部原理) 栈保存了一个函数调用所需要的维护信息---函数参数,函数返回地址---局部变量---函数调用上下文程序中的堆 为什么有了栈还需要堆?栈上的数据在函数返回后就会被释放掉,无法传递到函数外部,如:局部数组原创 2017-06-15 22:17:54 · 269 阅读 · 0 评论 -
主题四 指针和数组(下)----28.函数与指针分析
函数类型C语言中的函数也有自己的类型。函数的类型由返回值,参数类型(还有参数顺序)和参数个数共同决定。例: int add(int i,int j)的类型为int(int,int)C语言中通过typedef为函数类型重命名,typedef type name(parameter list)例:typedef int f(int,int); typedef void p(int原创 2017-06-15 22:04:01 · 201 阅读 · 0 评论 -
主题四 指针和数组(下)----27.数组参数和指针参数
为什么C语言中的数组参数会退化为指针?退化意义:本质:C语言中只会以值拷贝的方式传递参数当向函数传递数组时,有2种方式:一是将整个数组拷贝一份传入函数(耗时浪费大量内存)。二是将数组名看做常量指针传入数组首元素地址。C语言以高效为最初设计目标,所以选择了数组参数退化为指针 二维数组参数二维数组参数同样存在退化的问题,二维数组可以看做是一维数组。二维数组中的每原创 2017-06-15 21:59:27 · 240 阅读 · 0 评论 -
主题四 指针和数组(下)----26.多维数组与多维指针
指向指针的指针指针变量在内存中会占用一定的空间可以定义指针来保存指针变量的地址值 int a=0;int* p=NULL;int** pp=NULL;pp=&p;*pp=&a; 为什么需要指向指针的指针?指针本质上也是变量对于指针也同样存在传值调用和传址调用(所有变量都存在这个问题) 多级指针的运用:重置动态空间的大小#include原创 2017-06-15 21:54:02 · 386 阅读 · 0 评论 -
主题四 指针和数组(下)----25.指针数组与数组指针分析
思考:下面这些声明是否合法?Int array[5];Int matrix[3][3];Int* pA=array;Int* pB=matrix;问题:Array代表数组首元素的地址,那么matrix代表什么?Array和&array的地址值相同,但是意义不同,那么指向它们指针的联系相同? 数组类型工作中对话:A:这里定义的数组是什么类型的?原创 2017-06-15 21:46:14 · 304 阅读 · 0 评论
分享