C语言程序设计基础知识

C语言特点

1、是一种兼有高级语言和汇编语言优点的语言

2、是一种结构化程序设计语言

3、数据类型丰富

4、具有丰富的运算符

5、具有预处理功能

合理算法的特点

1、有输入

2、有输出

3、有穷性

4、确定性

5、高效性

C语言程序的特点

1、对大小写是有区分的

2、不存在行概念

3、充分利用注解

4、把程序中的语句根据其功能和嵌套关系进行缩进编排,使程序的模块和复合关系都变得明显

5、一对花括号标志一个程序功能模块的开始与结束

6、在程序适当使用空格和空行会是程序变得更加清晰

程序结构

C语言程序为函数模块结构,每一个C语言程序都是由一个或多个函数组成,其中至少一个main函数,程序从main函数开始执行,在执行过程中可以调出有编译系统提供的各种彼岸准库函数和自定义函数

基本形式:

  1. 类型定义符 函数名(形式参数)
  2. {
  3. 数据说明部分;
  4. 语句部分;
  5. }

基本语法单位

1、字符集

2、标识符 :只能由数字、下划线和数字组成,且第一个字符必须是字母或下划线

3、关键字

存储类型关键字:auto、extern、register、static

4、运算符和分隔符

5、常量和变量

基本数据类型及运算

数据类型

基本数据类型

整型、字符型、单精度浮点型、双精度浮点型

常量

1、整型常量:十进制整常量、八进制整常量、十六进制整常量、无符号型后缀(U)、长型后缀(L)

2、浮点型常量:十进制数形式、指数形式

3、字符型常量:【单括号括起】 简单转义字符、八进制转义字符、十六进制转义字符

4、字符串常量:【双括号括起、后自动加上 '\0'】

5、符号常量:宏定义【#define】 、const类型定义符

变量

参考:链接

运算符与表达式

1、算术运算符和算术表达式

结合方向:自左向右

2、赋值运算符和赋值表达式

结合方向:自右向右左

3、关系运算符和关系表达式

结合方向:自左向右

4、逻辑运算符和逻辑表达式

结合方向:自左向右

5、位运算符和位表达式

结合方向:自左向右

6、条件运算符和条件表达式

三目运算符:

7、逗号运算符和逗号表达式

逗号用途:运算符【优先级最低】、分隔符

运算的优先级与结合性

数据的输入输出

参考:链接

控制语句

程序的三种基本结构

顺序

分支

循环

循环嵌套

循环嵌套时内层循环必须完全包含在外层循环内,不允许循环结构交叉

数组和结构

一维数组

1、常量表达式中不允许包含变量

  1. int n = ;
  2. int score[n];

2、数组先定义【即分配存储空间】后使用

二维数组

1、可以省略第一维的长度,不能省略第二维的长度

字符数组

1、单个字符赋初值

2、字符串赋初值:自动在后加上一个终止符,即数组长度加一

3、输入和输出

(1)逐个字符输出和输入

由循环次数控制字符长度,不检测字符串结束标志

(2)字符串整体输入输出

或者:

gets(字符数组名)

puts(字符数组名)

字符串处理函数

参考:链接

结构

结构数组

指针

参考:链接

函数

模块化程序设计方法

在求解一个问题时,采样逐步求解、分而治之的方法,就是把一个大问题分解成若干比较好求的小问题,然后分别求解。

在处理一个复杂的应用程序也是如此,把整个程序划分为若干功能较为单一的程序模块。然后分别寄予实现,最后爱吧所有的程序模块像搭积木似的一起装配起来。

函数参数

参考

1、传值调用

把实参的值传递给形参,而被调用函数中形参的改变对调用函数的实参没有影响,这相当于把实参赋值一份给形参,然后调用内存回收。

  1. int sum(int x,int y){
  2. return x+y;
  3. }
  4. int mian(){
  5. int result=sum(,);//通过直接对sum传递参数
  6. printf("%d",result);
  7. return ;
  8. }

2、传址调用

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

  1.   #include<stdio.h>
  2.  
  3.   int sum(int *x,int *y){
  4.  
  5.     return *x+*y;//表示获取x中的内容+y中内容
  6.  
  7.   }
  8.  
  9.   int main(){
  10.  
  11.     int a,b;
  12.  
  13.     a=;b=;
  14.  
  15.     int result=sum(&a,&b);//通过地址对sum传递参数
  16.  
  17.     printf("%d\n",result);
  18.  
  19.     return ;
  20.  
  21.   }

3.引用传递

以引用为参数,则既可以使得对形参的任何操作都能改变相应的数据,又使得函数调用显得方便,自然。引用传递方式是在函数定义时在形参前面加上引用运算符“&”。引用相当于实参的别名,他和实参是同一个变量或数值,它的改变就是实参的改变。

  1.   int sum(int &x,int &y){ //定义引用类型
  2.  
  3.     return x+y;
  4.  
  5.   }
  6.  
  7.   int main(){
  8.  
  9.     int a,b;
  10.  
  11.     a=;b=;
  12.  
  13.     int result=sum(a,b);//通过引用对sum传递参数
  14.  
  15.     printf("%d\n",result);
  16.  
  17.     return ;
  18.  
  19.   }

例题:

在调用函数时,如果形参和实参分别是下列情况,则相应的调用方式是什么?(5分)   【见2012年笔试题2.3】

(1) 实参和形参都是数组元素   //传值调用(值传递)

(2) 形参是指针  //传地址调用(地址传递)

(3) 实参和实参都是数组  //传地址调用(地址传递)

函数与数组

数组元素作函数实参,数组名作为函数参数

函数与指针

1、返回指针的函数

举例:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int count;
  4. int main()
  5. {
  6. char s[],ch,*p,*match();
  7.  
  8. gets(s);
  9. ch = getchar();
  10. p = match(ch,s);
  11. if(p)
  12. printf("%s %d\n",p,(count + ));
  13. else
  14. printf("no match found\n");
  15. return ;
  16. }
  17.  
  18. char *match(c,s)
  19. char c, *s;
  20. {
  21. count = ;
  22. while(c != s[count] && s[count] != '\0')
  23. {
  24. count++;
  25. }
  26. if(s[count])
  27. return (&s[count]);
  28. return ();
  29. }

2、指向函数的指针

 例子:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4.  
  5. int main()
  6. {
  7. int strcmp(),numcmp();
  8. char s1[],s2[];
  9.  
  10. printf("请输入两个字符串:\n");
  11. gets(s1);
  12. gets(s2);
  13. if(isalpha(*s1)) // isalpha(*s1)用于检测数组s1中是否是字符串,
  14. check(s1,s2,strcmp); // strcmp()字符串比较库函数
  15. else // 若是数字字符串
  16. check(s1,s2,numcmp); // numcmp() 使用库函数atoi(),把以字符串的方式输入的数字转换为整型数
  17. }
  18.  
  19. check(a,b,cmp)
  20. char *a,*b;
  21. int (*cmp)();
  22. {
  23. printf("检测结果为:\n");
  24. if(!(*cmp)(a,b)) //返回不为0时
  25. printf("相同!\n");
  26. else
  27. printf("不相同!\n");
  28. }
  29.  
  30. numcmp(a,b)
  31. char *a,*b;
  32. {
  33. if(atoi(a) == atoi(b))
  34. return ;
  35. else
  36. return ;
  37. }

递归函数

参考:链接

预处理功能

宏定义

1、简单地字符替换

2、带参数的宏定义和宏调用

文件包含

条件编译

令源程序中其中一部分内容安装在满足一定条件时才进行编译,这就是条件编译

#if条件编译

#ifdef条件编译

#ifndef 条件编译

变量的存储类型

内部变量

又叫“局部变量

外部变量

又叫“全局变量

总结:

静态变量

举例:

寄存器变量

变量的初始化

动态内存分配函数

动态内存分配的优点:

1、在程序执行过程中,同一内存空间能用于几个不同的目的,即在程序晕死那个的不同阶段,同一内存能为程序的不同部分服务,这个内存区域就是堆区

2、允许建立链表

1、malloc()

使用原理:在调用该函数时,它将在内存中分配size个字节的存储空间,返回指向分配的存储区起始地址的指针;若不能获得需要的存储空间,则返回null。

由于malloc()的返回值是无类型void的指针,即返回的地址值可以指向任何合法的数据类型,因此将返回值赋予一定数据类的指针变量时,应该对返回值实行强制类型转换

2、free()

输入、输出及文件管理

流和文件

1、文本流

一行行的字符,换行符表示结束

2、二进制流

由一系列字节组成的

文件

通常指存放在外部存储器上的一批数据的集合,如:磁盘文件,磁带文件等,外部设备也被成为文件,因此,文件表示从磁盘、光盘文件到所有的外部设备

C语言的文件系统:

1、缓冲型文件

提供的函数叫做“流式I/O函数”,采用缓冲存储区域

2、非缓冲型文件

提供的函数叫做“低级I/O函数”,直接调用系统的输入输出功能

字符输入输出:getchar、putchar

字符串输入输出:gets、puts

参考:链接

文件管理

参考:链接

C程序应用

排序算法

参考:链接

递归算法

参考:链接

文件相关算法

线性链表算法

图的基本算法

树的基本算法

C:复试的更多相关文章

  1. 硕士研究生入学考试复试试卷答案.tex

    %该模板用于数学答题 \documentclass[UTF8]{ctexart}%[中文编码 UTF8] \usepackage{fancyhdr}%{页眉页脚页码} \pagestyle{fancy ...

  2. Twin Prime Conjecture(浙大计算机研究生保研复试上机考试-2011年)

    Twin Prime Conjecture                                            Time Limit: 2000/1000 MS (Java/Othe ...

  3. 九度OJ1486 /POJ 1029/2012北京大学研究生复试上机

    wa到死!wa到死!这是一个看着简单,坑及其多的题! 坑一:POJ上是单组输入,九度上是多组输入,妈蛋要是研究生复试遇到这种大坑肯定死掉啊!而且对于codeforces比较习惯的 同学肯定会觉得巨坑无 ...

  4. 应用留数定理计算实积分 $\dps{I(x)=\int_{-1}^1\frac{\rd t}{\sqrt{1-t^2}(t-x)}\ (|x|>1,x\in\bbR)}$ [华中师范大学2010年复变函数复试试题]

    应用留数定理计算实积分 $\dps{I(x)=\int_{-1}^1\frac{\rd t}{\sqrt{1-t^2}(t-x)}\ (|x|>1,x\in\bbR)}$ [华中师范大学2010 ...

  5. HDU 1234 (浙大计算机研究生复试上机考试-2005年) 开门人和关门人 (水)

    开门人和关门人 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  6. GCT英语口语复试中的常见问题总汇

    英语口语复试中常见的问题: 1. Where do you come from? 2. What kind of landscape surrounds your hometown? 3. What ...

  7. ZOJ问题(2010浙江大学研究生复试上机题目[找规律] hdoj 3788)

    ZOJ问题 pid=3788">点击打开链接 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  8. 大厂面试题:今天复试百度PHP工程师

    今天下午来到北京百度科技园进行复试PHP工程师岗位. 面试官问了很多问题,我大概整理回忆下: 1.Redis秒杀实现? redis队列解决抢购高并发的原理: 在程序跟数据库之前呢我们可以利用redis ...

  9. HDU 1874 畅通工程续 2008浙大研究生复试热身赛(2)

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  10. 计算机考研复试 A+B

    题目描述 读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的每一位数字由对应的英文单词给出. 输入描述: 测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B ...

随机推荐

  1. web测试流程

    1.立项后测试需要拿到文档(需求说明书,原型图,接口文档,) 2.需求评审 3.用例编写(主流程,备流程,异常流,业务规则,正常类,异常类,页面检查) 测试用例编写方法(等价类划分,边界值分析法,错误 ...

  2. 【山外问道】Linux UUID的查询方法

    本文打印版下载地址 [山外问道]Linux_UUID的查询方法-打印版.pdf 一.查询存储设备的UUID 1.使用blkid命令查看 (1)查询所有存储设备的UUID:blkid. (2)查询指定设 ...

  3. C# 基础知识系列- 12 任务和多线程

    0. 前言 照例一份前言,在介绍任务和多线程之前,先介绍一下异步和同步的概念.我们之间介绍的知识点都是在同步执行,所谓的同步就是一行代码一行代码的执行,就像是我们日常乘坐地铁通过安检通道一样,想象我们 ...

  4. VUE前端项目配置代理解决跨域问题

    VUE前端项目配置代理解决跨域问题 问题如下,经常在本地调试接口出现这种问题 解决方式1:Chrome 的扩展插件 以前使用Chrome 的扩展插件,但是有时候还是会出现莫名其妙的问题. 需要梯子才行 ...

  5. SpringBoot项目集成Redis

    一.在pom文件中添加依赖 <!-- 集成redis --> <dependency> <groupId>org.springframework.boot</ ...

  6. Bat 脚本 删除某一行

    findstr /v /i /c:"kiwi" /c:"oranges" myfile.txt >newfile.txt

  7. 【linux题目】第三关

    1. 解释下什么是GPL,GNU,自由软件? 2. 如何选择Linux操作系统版本? 3. 安装系统时如何给Linux操作系统分区? 4. 描述Linux系统的启动过程? 5. 简要说出20个Linu ...

  8. Azkaban3.81.x部署+坑

    一.前提安装 1.1 Java1.8环境搭建 1) 下载jdk1.8并解压: # tar -zxvf jdk-8u201-linux-i586.tar.gz -C /usr/local 2) 添加Ja ...

  9. 带权并查集--hdu3047 ZJnu stadium

    题意:给出一个n,m,n表示的是有n 个人,m表示的是 有m 对关系: 接下来输入的就是这m对关系,a,b,x:表示的是a,b相距x个距离:然后判断输入的是否与这个数的上面的数信息一致, 输出不一致的 ...

  10. ASP.NET Core 包管理工具(4)

    之前忘记介绍ASP.NET Core静态文件wwwroot了.再来补充一下.步骤比较简单在项目上右击添加文件夹输入文件名称 wwwroot就搞定了.这个文件主要是放置一些静态文件的,比如css.js. ...