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、关键字

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

4、运算符和分隔符

5、常量和变量

基本数据类型及运算

数据类型

基本数据类型

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

常量

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

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

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

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

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

变量

参考:链接

运算符与表达式

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

结合方向:自左向右

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

结合方向:自右向右左

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

结合方向:自左向右

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

结合方向:自左向右

5、位运算符和位表达式

结合方向:自左向右

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

三目运算符:

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

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

运算的优先级与结合性

数据的输入输出

参考:链接

控制语句

程序的三种基本结构

顺序

分支

循环

循环嵌套

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

数组和结构

一维数组

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

int n = ;
int score[n];

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

二维数组

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

字符数组

1、单个字符赋初值

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

3、输入和输出

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

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

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

或者:

gets(字符数组名)

puts(字符数组名)

字符串处理函数

参考:链接

结构

结构数组

指针

参考:链接

函数

模块化程序设计方法

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

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

函数参数

参考

1、传值调用

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

int sum(int x,int y){
return x+y;
}
int mian(){
int result=sum(,);//通过直接对sum传递参数
printf("%d",result);
return ;
}

2、传址调用

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

  #include<stdio.h>

  int sum(int *x,int *y){

    return *x+*y;//表示获取x中的内容+y中内容

  }

  int main(){

    int a,b;

    a=;b=;

    int result=sum(&a,&b);//通过地址对sum传递参数

    printf("%d\n",result);

    return ;

  }

3.引用传递

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

  int sum(int &x,int &y){     //定义引用类型

    return x+y;

  }

  int  main(){

    int a,b;

    a=;b=;

    int result=sum(a,b);//通过引用对sum传递参数

    printf("%d\n",result);

    return ;

  }

例题:

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

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

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

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

函数与数组

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

函数与指针

1、返回指针的函数

举例:

#include <stdio.h>
#include <stdlib.h>
int count;
int main()
{
char s[],ch,*p,*match(); gets(s);
ch = getchar();
p = match(ch,s);
if(p)
printf("%s %d\n",p,(count + ));
else
printf("no match found\n");
return ;
} char *match(c,s)
char c, *s;
{
count = ;
while(c != s[count] && s[count] != '\0')
{
count++;
}
if(s[count])
return (&s[count]);
return ();
}

2、指向函数的指针

 例子:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h> int main()
{
int strcmp(),numcmp();
char s1[],s2[]; printf("请输入两个字符串:\n");
gets(s1);
gets(s2);
if(isalpha(*s1)) // isalpha(*s1)用于检测数组s1中是否是字符串,
check(s1,s2,strcmp); // strcmp()字符串比较库函数
else // 若是数字字符串
check(s1,s2,numcmp); // numcmp() 使用库函数atoi(),把以字符串的方式输入的数字转换为整型数
} check(a,b,cmp)
char *a,*b;
int (*cmp)();
{
printf("检测结果为:\n");
if(!(*cmp)(a,b)) //返回不为0时
printf("相同!\n");
else
printf("不相同!\n");
} numcmp(a,b)
char *a,*b;
{
if(atoi(a) == atoi(b))
return ;
else
return ;
}

递归函数

参考:链接

预处理功能

宏定义

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. python3爬虫 爬取动漫视频

    起因 因为本人家里有时候网速不行,所以看动漫的时候播放器总是一卡一卡的,看的太难受了.闲暇无聊又F12看看.但是动漫网站却无法打开控制台.这就勾起了我的兴趣.正好反正无事,去寻找下视频源. 但是这里事 ...

  2. [YII2] 文件上传类

    //测试文件上传类 public function actionCreate() { $model = new Lvyou(); $upload_model = new \app\models\Upl ...

  3. 实例讲解Springboot以Template方式整合Redis及序列化问题

    1 简介 之前讲过如何通过Docker安装Redis,也讲了Springboot以Repository方式整合Redis,建议阅读后再看本文效果更佳: (1) Docker安装Redis并介绍漂亮的可 ...

  4. INDIRECT函数实现动态图表的跨数据抓取

    涉及函数: indirect函数:通常有两种用法.直接指定单元格地址和隐式指定单元格地址.直接指定:=indirect("A4"),则会返回A4单元格所显示的内容.参数给定的既是字 ...

  5. js 一维数组,转成嵌套数组

    // 情况一: // 数据源var egs = [ {name_1: 'name_1...'}, {name_2: 'name_4...'}, {name_3: 'name_3...'}, {name ...

  6. 5. 配置项:rule_files

    prometheus配置文件内容: global: # 默认情况下抓取目标的频率. [ scrape_interval: <duration> | default = 1m ] # 抓取超 ...

  7. office 365 激活

    将以下代码复制到记事本 @echo off title Activate Microsoft Office ALL versions &echo - Microsoft Office Prof ...

  8. linux 之学习路线

    原文地址:https://www.oschina.net/question/587367_156024 推荐的发行版如下: UBUNTU 适合纯菜鸟,追求稳定的官方支持,对系统稳定性要求较弱,喜欢最新 ...

  9. 剑指offer---05---用栈实现队列

    题意 给了两个栈去实现队列   分析 两个栈如下情况       1       2 4    3 这个时候就不能够把4插入到第二个弹出栈了否则弹出顺序出错. 所以这个时候就应该等第二个栈空了的时候再 ...

  10. Node.js中的express框架,修改内容后自动更新(免重启),express热更新

    个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教! 以前node中的express框架,每次修改代码之后,都需要重新npm s ...