知识点的回忆与巩固

一. 条件分支结构

1.if分支语句

2.switch语句

二、循环体部分知识点整理

1.for循环

2.while循环-适合不确定循环次数时使用

三、字符串与数组

数组的操作

memcpy函数(头文件<cstring)

数组不能直接复制,可利用memcpy函数

void *memcpy(void *dest, void *src, unsigned int count);

memcpy 函数用于 把资源内存(src所指向的内存区域) 拷贝到目标内存(dest所指向的内存区域);一个size变量控制拷贝的字节数;

使用方式memcpy(b,a,sizeof(int)*k) 从a中赋值k个元素到b数组。

sizeof(int)*k表示计算int型所占字节数,然后再乘以k。
类比sizeof(int*k),表示计算指向整型的指针变量k所占的字节数。
再浅显讨论sizeof的作用

sizeof(int)*k之所以用sizeof(int)*k而不是用k,因为sizeof(int)*k返回的是字节数,因为数组是int 型的sizeof计算每个元素的字节长度,在乘以k既k个元素的字节,因为memcyp需要知道拷贝内存的字节数。所以拷贝是从开头开始计算,即k个元素是从a[0]开始计算。由此可以推出将a中元素全部拷贝到b数组中,memcpy(b,a,sizeof(a))。

memset函数(头文件<cstring)

void *memset(void *s , int ch , size_t n ) 在一段内存块中填充某一个给定的值,常用于较大的对结构体和数组的清零操作。

memset(结构体/数组名 , "用于替换的字符“ , 前n个字符 );

用法可以参考memcpy,也要用sizeof来计算字节。

总结内存复制需要计算字节。

字符串操作

strcpy(p, p1) 复制字符串

strncpy(p, p1, n) 复制指定长度字符串

strcat(p, p1) 附加字符串

strncat(p, p1, n) 附加指定长度字符串

strlen§ 取字符串长度

strcmp(p, p1) 比较字符串

strcasecmp忽略大小写比较字符串

strncmp(p, p1, n) 比较指定长度字符串

strchr(p, c) 在字符串中查找指定字符

strrchr(p, c) 在字符串中反向查找

strstr(p, p1) 查找字符串

strlwr§将大写字母全部换为小写字母

strupr§将小写字母全部换为大写字母

相对于字符型数组,字符串还可以有以下操作
  1. s.empty(); // s为空串 返回true
  2. s.size(); // 返回s中字符个数 类型应为:string::size_type
  3. s[n]; // 从0开始相当于下标访问
  4. s1+s2; // 把s1和s2连接成新串 返回新串
  5. s1=s2; // 把s1替换为s2的副本
  6. v1==v2; // 比较,相等返回true
  7. !=, <, <=, >, >=

四、函数

概念:组成C语言源程序的基本单位,完成特定功能的代码段.

例如main()为主函数:程序入口

函数定义到使用分三步:

1.声明

2.定义函数

3.调用函数。

一、函数的声明:

在调用函数之前,进行该函数的声明 ,由于程序是由上到下执行,编译器不知道我们是否已经定义了某个函数,为了防止编译器编译的时候报错(函数调用)所以,要告诉编译器,我已经定义了哪些函数。

二、函数的定义:

 返回值类型 函数名(形式参数类型 参数名1,……)

  {

                  函数体;

                  //return (返回值)

	}

目前接触的返回值类型有两种:

有参无返回值:void test(int x,float y){ }

有参有返回值: int max(int x,int y){ return x>y?x:y; }

1.函数的参数
1)形参和实参

形参:在定义函数的时候,函数名后面小括号中的参数 , 格式: 数据类型 变量 如:int x;

形参的作用域:只能在本函数中使用

实参:调用函数的时候传递的参数

2)参数的传递的过程

实参的值拷贝一份放到函数形参中

3)函数传参有三种传参方式:传值、传址、传引用
1°按值传递

(1)形参和实参各占一个独立的存储空间。

(2)形参的存储空间是函数被调用时才分配的,调用开始,系统为形参开辟一个临时的存储区,然后将各实参传递给形参,这是形参就得到了实参的值。

2°地址传递

地址传递与值传递的不同在于,它把实参的存储地址传送给形参,使得形参指针和实参指针指向同一块地址。因此,被调用函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。

3°引用传递

引用传递是以引用为参数,则既可以使得对形参的任何操作都能改变相应数据,又使函数调用方便。引用传递是在形参调用前加入引用运算符“&”。引用为实参的别名,和实参是同一个变量,则他们的值也相同,该引用改变则它的实参也改变。

2、函数的返回值

概念:执行函数体中的程序段,最后获取的值并返回给主调函数,函数的返回值只能通过return 关键字进行返回

格式:return 表达式;/ return (表达式);

返回值类型要与返回值相同。

是否要定义形参看是否有未知内容参与运算,调用时实参必须对应.参数传递的是值。

函数中可以有多个return ,但是只有一个起作用,因为函数会结束后会带回一个值。

三、函数的调用

定义:函数名(实参列表);

1)形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。

2)实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值 。

3)实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配的错误。

零碎知识点的总结

头文件

#include <iomanip>   小数点出入输出
#include<algorithm> STL,主要是用sort
#include <cstdio>     C语言的输入输出及其他c部分

素数的判断

1定义法

除了1与自身外无其他因数。

int main()
{
int a;
char b='y';
cin>>a;
for(int i=2;i<a;i++)
{
if(a%i==0&&a!=i)
{
b='N';
break;
}
}
if(b=='N') cout<<"不是";
else cout<<"是";
return 0;
}

2.对定义法的改进,若a不是素数则在2到sqrt(a)的范围内一定存在其因数。所以

int main()
{
int a;
char b='y';
cin>>a;
for(int i=2;i<=sqrt(a);i++) //等号必须存在
{
if(a%i==0)
{
b='N';
break;
}
}
if(b=='N') cout<<"不是";
else cout<<"是";
return 0;
}

最大公约数最小公倍数

a,b最小公倍数=a*b/最大公约数

最大公约数用辗转相除法

int main()
{
int a,b;
int mid;
int x,y;
cin>>a>>b;
x=a,y=b;
while(b>0)
{
mid=a%b;
a=b;
b=mid;
}
cout<<a<<x*y/a<<endl;

经验教训

一、基础的语法很重要,只有学好了这些语法,才会写程序,看程序,会修改程序,知道自己程序的流程,以及每一项的操做的结果与作用。

二、要多练习敲代码,只有写过足够多的代码才能熟练的运用,纸上谈兵,眼高手低,马马虎虎,到了自己真正要用到的时候才发现有些东西只是看明白了,自己写的时候根本写不出来。

三、自学很重要。不会的尽量自己思考,百度查,从开始到现在我没有去问过别人代码,有时候有思路没能力实现,就回去查这些东西怎么才能办到,就拿上一篇hash那个题来讲,我最早想到的是哈希算法,我想如果将字符转化为数字,根据数字来存储到数组内,就不会爆内存,可是哈希算法太难实现,我就想怎样才能开出比1000000*100的大的数组,无果而终,知道看到容器是随开随用的,看题要看思路,而不是忙目的做,盲目的问,盲目的抄,不是自己的东西,用一次下次就不会了,就再也想不到了。

C语言基础知识总结的更多相关文章

  1. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  2. 李洪强iOS开发之OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  3. Golang 入门系列(三)Go语言基础知识汇总

    前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...

  4. ios开发学习笔记001-C语言基础知识

    先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...

  5. C语言基础知识-数组和字符串

    C语言基础知识-数组和字符串 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组概述 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来的方式我们称为数组 ...

  6. C语言基础知识-程序流程结构

    C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...

  7. C语言基础知识-运算符与表达式

    C语言基础知识-运算符与表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用运算符分类 1>.算术运算符 用于处理四则运算. 2>.赋值运算符 用于将表达式的 ...

  8. C语言基础知识-数据类型

    C语言基础知识-数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量与变量 1>.关键字 C的关键字共有32个. >.数据类型关键字(12个) char,s ...

  9. 重拾C语言基础知识

    从实习到工作两年多的时间了,虽然感觉学到了很多知识,但是事实上却将立足之本的基础知识给忘了个精光.也许跟自己没有出去找工作有关,没有好好的将C语言的基础牢牢掌握. 从现在开始吧!好好的重温基础,做一名 ...

  10. ZYNQ笔记(0):C语言基础知识复习

    ZYNQ的SDK是用C语言进行开发的,C语言可以说是当今理工类大学生的必备技能.我本科学C语言时就是对付考试而已,导致现在学ZYNQ是一脸懵逼.现在特开一帖,整理一下C语言的基础知识. 一.定义 1. ...

随机推荐

  1. android之间的各项信息传输类型

    首先是activity想fragment怎样动态的传输数据: 一:activity与fragment之间进行数据传递是,在Activity中将要传递的数据封装在一Bundle中,使用setArgume ...

  2. 家庭版记账本app进度之对于按钮的点击事件以及线性布局以及(alertdialog)等相关内容的应用测试

    通过线性布局,制作出连个按钮还有文本输入框以及嘴上放的标题文本进行信息的相关显示,完后最后的信息的输入,之后在屏幕的的下方进行显示 当点击第一个按钮的时候,在下方就会简单的出现你自己刚刚输入的相关信息 ...

  3. 路由与交换,cisco路由器配置,静态路由

    网络是一个大型的拓扑结构,在路由表中,最重要的是管理距离和度量值 管理距离 管理距离用来确定路由的优先级.管理距离的范围是0-255之间的整数值.值越低代表优先级越高.0代表最高优先级.并且只有直连路 ...

  4. 2015蓝桥杯五星填数(C++C组)

    题目:五星填数 如[图1.png]的五星图案节点填上数字:1~12,除去7和11.要求每条直线上数字和相等.如图就是恰当的填法.请你利用计算机搜索所有可能的填法有多少种.注意:旋转或镜像后相同的算同一 ...

  5. .bundle文件如何安装

    1. sudo chmod +x X.bundle 2. sudo X.bundle

  6. "强调内容"组件:<em> —— 快应用组件库H-UI

     <import name="em" src="../Common/ui/h-ui/text/c_tag_i"></import> & ...

  7. python 自动生成model 文件 案例分析

    生成方式 Python中想要自动生成 model文件可以通过 sqlacodegen这个命令来生成对应的model文件 sqlacodegen 你可以通过pip去安装: pip install sql ...

  8. XFS文件系统的备份与恢复

    永久修改主机名:hostnamectl set-hostname oldboy临时修改主机名:hostname xfsdump备份xfsdump -f 备份的文件位置 要备份的分区或者磁盘 免交互备份 ...

  9. 修改vs默认浏览器

    右键你的Html或者网页项目,选择"使用以下工具浏览" 跳出选择框,选择你想要的浏览器作为默认值即可,也可以添加你想要的浏览器.

  10. win10安装docker,VSCode管理docker

    背景 docker:随着技术的不断迭代,开发环境的配置与部署越来越重要.Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linu ...