c语言程序设计

深入理解C语言内存管理

北慕城南 提交于 2019-12-27 02:10:21
之前在学Java的时候对于Java虚拟机中的内存分布有一定的了解,但是最近在看一些C,发现居然自己对于C语言的内存分配了解的太少。 问题不能拖,我这就来学习一下吧,争取一次搞定。 在任何程序设计环境及语言中,内存管理都十分重要。 内存管理的基本概念 分析C语言内存的分布先从Linux下可执行的C程序入手。现在有一个简单的C源程序hello.c 1 #include <stdio.h> 2 #include <stdlib.h> 3 int var1 = 1; 4 5 int main(void) { 6 int var2 = 2; 7 printf("hello, world!\n"); 8 exit(0); 9 } 经过gcc hello.c进行编译之后得到了名为a.out的可执行文件 [tuhooo@localhost leet_code]$ ls -al a.out -rwxrwxr-x. 1 tuhooo tuhooo 8592 Jul 22 20:40 a.out ls命令是查看文件的元数据信息 [tuhooo@localhost leet_code]$ file a.out a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs),

c语言程序设计(19)

≡放荡痞女 提交于 2019-12-26 23:43:30
字符串 字符数组 1、使用字符串初始化字符数组 char ch[]=“hello world” scanf("%s",ch); printf("%s",ch); 2、字符串处理函数 gets(ch); 指针变量指向字符串 char * str=“hello” //使用字符串常量对字符指针进行初始化 str=str+2; str=“world” 等价于 char * str; str=“hello” char ch[]=“hello” char ch[10]; ch=“hello”//错误 char * str=ch; 字符串在c内存中都是以数组的形式存放 char * mystrcat(char ch1[],char * ch2) { int i,j; for(i=0;;i++) { if(ch1[i] ’\0’) break; } for(j=0;;j++) { if(ch2[j] ’\0’) break; } for(y=0,x=i;y<=j;x++,y++) { ch1[x]=ch2[y]; } return ch1; } char * mystrcat(char * ch1,char * ch2) { int i,j; for(i=0;;i++) { if( (ch1+i)==’\0’) break; } for(j=0;;j++) { if( (ch2+j)==’\0’)

C语言程序设计——数据类型

Deadly 提交于 2019-12-25 23:41:12
编程规范 代码缩进 变量,常量命名规范 成员变量 函数的命名规范 注释 标识符 定义:为了在程序运行过程中可以使用变量、常量、函数、数组等,为其形式做一个名称,称为标识符 标识符的命名规则: 1.必须以字母或下划线开头 2.除了开头,其他位置都可以有字母,下划线或数字组成 3.英文字母的大小代表不同的标识符 4.标识符不能是关键字 5.标识符的命令最好具有相关的意义 6.标识符可以为任意长度 C数据类型 基本类型:数值类型 字符类型 数值类型:整形 浮点型 整形:短整型(short int 2个字节) 基本整型(int 4个字节) 长整型(long int 4个字节) 实型:浮点型:单精度型(float) 双精度型(double) 字符类型 变量 变量:代表计算机内存中的某一存储空间,可以存放不同的数据 类型标识符——声明了变量的类型,决定了程序为变量分配的内存单元字节数即变量的取值范围 变量名的命名规则:标识符只能由数字、字母、下划线组成、首位必须是字母或下划线 有效字符最多是31个 变量的“初始化”:定义变量后,程序便在内存中为变量分配相应的存储空间,存储空的数据是随机的,我们需要给变量重新赋值,这个过程称为变量初始化 变量的存储类别 静态存储:程序运行时为其分配固定的存储空间 动态存储:在程序运行期间根据需要动态的分配存储空间 auto变量:用于定义一个局部变量为自动的

C语言I博客作业07

痴心易碎 提交于 2019-12-25 19:28:32
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/9929 我在这个课程的目标是 学会自己编写程序,熟练掌握switch 这个作业在那个具体方面帮助我实现目标 学习怎么使用switch去编程 参考文献 C语言程序设计教科书 1.PTA实验作业 1.1 计算天数 (15 分) 本题要求编写程序计算某年某月某日是该年中的第几天。 输入格式: 输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。 输出格式: 在一行输出日期是该年中的第几天。 1.1.1 数据处理 数据表达:定义了整型变量day,month,year,i,n=0, 数据处理:运用了if语句,for循环结构,switch语句,使用了函数scanf,printf 1.1.2 实验代码截图 1.1.3 造测试数据 输入数据 输出数据 说明 2000/03/02 62 闰年 2019/06/07 158 非闰年 2020/06/08 160 闰年 1.1.4 PTA提交列表及说明 提交列表说明 1.答案错误:我开始在Dev-c++中编译,老是在结果出问题,经常出现答案错误,但经过不断的调试

C语言程序设计-1022 D进制的A+B

房东的猫 提交于 2019-12-25 10:42:53
# include <iostream> using namespace std ; # include <math.h> int main ( ) { int n1 , n2 , sum , num , a [ 32 ] = { 0 } , i ; int count = 0 ; cin >> n1 >> n2 >> num ; sum = n1 + n2 ; while ( sum > 0 ) { a [ count ++ ] = sum % num ; sum / = num ; } if ( count == 0 ) printf ( "%d" , 0 ) ; else { for ( i = count - 1 ; i >= 0 ; i -- ) { printf ( "%d" , a [ i ] ) ; } } return 0 ; } 题目中说明是两个非负整数,但是给出的输入条件是两个整数,所以一定要考察D等于0 的情况。 对于这个情况,一下代码处理方式更为精巧。 https://blog.csdn.net/qq_37729102/article/details/81711371 # include <iostream> using namespace std ; int main ( ) { int A , B , C , D , num [ 31 ] = { 0

C语言I博客作业04

妖精的绣舞 提交于 2019-12-25 04:44:26
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 C语言I作业004 我在这个课程的目标是 掌握C语言编程,使用for语句 这个作业在那个具体方面帮助我实现目标 灵活变通求和 使用for语句 参考文献 Markdown基本语法 1.PTA实验作业 1.1 计算序列 1 + 1/3 + 1/5 + ... 的前N项之和 1.1.1数据处理: 运用了for(i=1; i<=N;i++)语句 表达式:sum=sum+item 1.1.2实验代码截图 1.1.3 造测试数据 输入数据|输出数据|说明 ---|:--:|:--:| 10|sum=2.133256|前十项数列求和为2.133256 23|sum = 2.549541|前二十三项数列求和为2.549541 1.1.4 PTA提交列表及说明 答案错误:小数点后3位数错写成6位数,而且忘记加了分号。 部分错误的情况:没有正确使用变量flag 1.2本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和。 1.2.1数据处理 数据表达:使用了整形变量denominator,N,i,flag,分别代表第i项的分母,N值,i项,第i项的符号。双精度浮点型变量sum,item,分别表示输出值,第i项的值。 数据处理:使用了 for的语句 ,属于计数型循环。表达式:item=flag*

C语言I博客作业05

ぐ巨炮叔叔 提交于 2019-12-24 19:09:02
一, 本周教学内容&目标 第2章 用C语言编写程序-函数 2.5 生成乘方表与阶乘表。使学生对函数的定义和调用有初步的认识,能模仿编程。 二,本周作业头 这个作业属于哪个课程? C语言程序设计I 这个作业要求在哪里? https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/9826 我在这个课程的目标是 学精C语言,奠定基础 这个作业在哪个具体方面帮助我实现目标? 了解到函数的概念,熟练地运用函数 参考文献 C语言作业评价标准,百度百科 三,本周作业 四,作业格式 1.1 水仙花数判断 本题要求实现一个函数,判断任一整数是否为水仙花数(必须是三位数,且数的每一位上数字的立方和与数本身相等)。例如153=1^3+5^3+3^3=1+125+27=153,而1或155则不是水仙花数。如果是水仙花数,则函数返回1,否则返回0. 1.1.1数据处理 数据表达 本题变量:运用int整型。s,i,N。 数据处理 运用函数,以及while循环语句。 1.1.2实验代码截图 [] 1.1.3造测试数据 1.1.4 PTA提交列表及说明 提交列表说明: 1.编译错误:第六行%用成/ 2.编译错误:while()外面打了;号 1.2 使用函数验证哥德巴赫猜想 本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想

C语言I博客作业11

北城余情 提交于 2019-12-24 14:12:51
一、表格 问题 答案 这个作业属于哪个课程? C语言程序设计II 这个作业要求在哪里? http://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/10132 我在这个课程的目标是什么? 学习并掌握函数使用及函数定义 这个作业在哪个具体方面帮助我实现目标? 更熟练代码的技巧性 参考文献 百度 C语言程序设计 作业要求 二、PTA作业 1、PTA实验作业 1.1 题目名 1.1.1 数据处理 数据表达:整型变量有i,n,a,双精度浮点型有m 数据处理: int num[10]={0}; 利用数组将其转换 n=(int) sqrt(N); m=sqrt(N); 采用数学函数 a=N; if(a==m*n) 1.1.2 实验代码截图 1.1.3 造测试数据 输入数据 输出数据 说明 0 0 cnt = 0 输入零进入 3 100 cnt = 1 随机输入一个数 1 10000 cnt = 42 输入一个较大的数 1.1.4 PTA提交列表及说明 编译错误:粗心造成一点点失误,导致单词打错 1.2 题目名 1.2.1 数据处理 数据表达:定义了a,b,c.作为一元二次方程的系数,还有x1,x2等答案变量 数据处理: if(b!=0){ x=-c/b; printf("x = %g",fabs(x)); 利用if

第一次随笔之寒假作业一

℡╲_俬逩灬. 提交于 2019-12-24 12:11:42
2017寒假作业一 前言 这是我第一次接触此类博客,也是第一次写博客,个人处于比较懵逼的状态。加之家里没有网络,不能边写边参考同学和老师的博客,更糟糕的是不能学习什么markdown,什么个git啊,对于我这个误入计算机的小白来说,写随笔的时候字字皆辛苦。不过,越艰苦的环境下,越是能激发人的潜能。好几天下来,去到网吧学习,也算是网吧的一股清流了。最终还是有所获。 你有什么技能比大多人(超过70%以上)更好?针对这个技能的获取你有什么成功的经验? (阅读参考 北京电子科技学院 娄嘉鹏 老师的博客,关于“做中学”获得高超技能 http://www.cnblogs.com/rocedu/p/5826362.html/ 、 http://www.cnblogs.com/rocedu/p/6124349.html/xinz ) 其实想来想去,自己学习上好像没有比别人好的。也只有篮球算是自己的专长了,打篮球会有不自主的热血豪情,球场上整个人是极为放松的,是我最享受的时候。当初开始学打球的时候,而自己一开始并没有多勤奋的练球,球技也只是一般甚至比较菜。真正有改变的是后来看了科比的一本专辑,有一句话让我受益匪浅“第二名意味着头号输家”,我不想打球打球打不过别人,当时自己下定决心一定要成为年段里面打球最好的,给自己制订了很多计划 打球计划 空闲的时间每天用左右手拍球,保持手对球的感觉 看高年级的打球

C语言I博客作业06

余生颓废 提交于 2019-12-24 10:54:35
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 C语言I作业006 我在这个课程的目标是 学会编程语言和设计程序并能够利用所学知识解决这方面的一些问题 这个作业在那个具体方面帮助我实现目标 熟悉多分支结构、字符型数据类型和逻辑运算符 参考文献 百度知道 , C语言作业评价标准 1.PTA实验作业 1.PTA实验作业 1.1 题目名 1.1.1数据处理 数据表达:定义整型变量n,i,count和双精度浮点型变量a,average,sum。 数据处理:表达式:count+=1,sum=sum+a,average=sum/n;首先输入学生人数,通过for循环实现多组数据的输入,然后通过if条件判断及格人数并将输入的数据进行相加除以人数求出平均分以及及格人数,再通过第二个if语句,表示没有学生和无学生成绩输入时输出的及格人数和平均分。 1.1.2实验代码截图 1.1.3 造测试数据 输入数据 输出数据 说明 0 average = 0 count = 0 验证当无学生时是否输出正确 9 50 50 50 50 50 50 50 50 50 average = 50 count = 0 验证当无学生及格是输出是否符合要求 5 77 54 92 73 60 average = 71.2 count = 4 验证输出是否题目所给样例一致 1.1.4 PTA提交列表及说明 部分正确