知识点的回忆与巩固

一. 条件分支结构

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. php--phpstorm使用正则匹配批量替换

    1.首先勾选正则规则 如图勾选右侧的Match Case和Regex 2.编写正则规则:无须添加//左右分解符,直接写正则表达式,注意应该转义的部分,需要原封不动替换的部分加上括号 3.编写替换规则: ...

  2. 33.1 File 获取目录下的所有文件及子目录

    重要获取功能 String[] list() 返回当前路径下所有的文件和文件夹名称 //注意:只有指向文件夹的File对象才可以调用该方法(指向文件的file对象使用list会报错npe) File[ ...

  3. 数据结构和算法(Golang实现)(29)查找算法-2-3树和左倾红黑树

    某些教程不区分普通红黑树和左倾红黑树的区别,直接将左倾红黑树拿来教学,并且称其为红黑树,因为左倾红黑树与普通的红黑树相比,实现起来较为简单,容易教学.在这里,我们区分开左倾红黑树和普通红黑树. 红黑树 ...

  4. AJ学IOS(27)UI之iOSUIKit字符属性NSAttributedString概述

    AJ分享,必须精品 UIKit字符属性NSAttributedString概述 字符属性 字符属性可以应用于 attributed string 的文本中. NSString *const NSFon ...

  5. 利用opencv实现视频捕捉功能

    import cv2 as cv import numpy as np def video_demo(): capture = cv.VideoCapture(0) #打开摄像头,参数0代表设备ID( ...

  6. 你的网购价格监督利器——python+爬虫+微信机器人

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:风,又奈何 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...

  7. 并发工具——CyclicBarrier

    本博客系列是学习并发编程过程中的记录总结.由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅. 并发编程系列博客传送门 CyclicBarrier简介 CyclicBarrie ...

  8. testlink数据表分析

    创建一个项目test node_types: 节点类型,这是一个固定的表 rights: 权限表,用户的操作权限 role_rights: 角色和权限关系表 roles: 角色表 testprojec ...

  9. APP测试和WEB测试区别

    App测试web测试的区别 单纯从功能测试的层面上来讲的话,APP 测试.web 测试 在流程和功能测试上是没有区别的 根据两者载体不一样,则区别如下: 1.兼容性测试:web端兼容浏览器,app端兼 ...

  10. Blazor WebAssembly 3.2.0 已在塔架就位 将发射新一代前端SPA框架

    最美人间四月天,春光不负赶路人.在充满无限希望的明媚春天里,一路风雨兼程的.NET团队正奋力实现新的突破. 根据计划,新一代基于WebAssembly 技术研发的前端SPA框架Blazor 将于5月1 ...