C程序设计基础期末考试复习
总览C语言的程序
C程序的创建过程
- 编辑(源程序——C语言)
- 编译(目标程序——机器语言)
- 链接
- 执行(可执行文件——机器语言)
数据类型及运算
数据类型及其大小(基于机器)
符号属性 | 长度属性 | 基本型 | 所占位数/字节数 | 取值范围 | 输入符举例 | 输出符举例 |
---|---|---|---|---|---|---|
char
|
8/1 | 2^7 ~ 2^7-1 |
%c
|
%c、%d、%u
|
||
unsigned
|
char
|
8/1 | 0 ~ 2^8-1 |
%c
|
%c、%d、%u
|
|
short
|
int
|
16/2 | 2^15 ~ 2^15-1 |
%hd
|
%hd
|
|
unsigned
|
short
|
int
|
16/2 | 0 ~ 2^16-1 |
%hu、%ho、%hx
|
%hu、%ho、%hx
|
int /long
|
32/4 | -2^31 ~ 2^31-1 |
%d
|
%d
|
||
unsigned
|
int/long
|
32/4 | 0 ~ 2^32-1 |
%u、%o、%x
|
%u、%o、%x
|
|
longlong
|
int
|
64/8 | -2^63 ~ 2^63-1 |
%I64d
|
%I64d
|
|
unsigned
|
longlong
|
int
|
64/8 | 0 ~ 2^64-1 |
%I64u、%I64o、%I64x
|
%I64u、%I64o、%I64x
|
float
|
32/4 | +/-3.40282e+038 |
%f、%e、%g
|
%f、%e、%g
|
||
double
|
64/8 | +/-1.79769e+308 |
%lf、%le、%lg%f、%e、%g
|
%lf、%le、%lg%f、%e、%g
|
||
long
|
double
|
96/12 | +/-1.79769e+308 |
%Lf、%Le、%Lg
|
%Lf、%Le、%Lg
|
|
string
|
%s
|
%s
|
||||
pointer
|
%p
|
%p
|
enum
类型
enum _enum
{enum1 = 0/*默认为0*/, enum2, enum3 ...
} en;
C转义字符
\n | 换行 |
---|---|
\t | tab |
\r | 跳至下行行首 |
\a | Alert |
\\ | \ |
\" | " |
变量与内存
- 合法标志符的定义
- 内存
- 最小单位:位(bit)
- 8个位:字节(byte)
- 全局变量(automatic)只能够被初始化一次,未初始化时的默认值为0。
- 局部变量的初始值未初始化时的默认值为一个随机数。
算术运算
优先级与结合性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MNkuWa3y-1641251712284)(/Users/allen/Library/Application Support/typora-user-images/截屏2022-01-02 10.05.17.png)]
取模%
遇到负数时,以分子的符号为准,然后将分子、分母都化为无符号的整型。
math.h
中的公式
floor(x)
ceil(x)
fabs(x)
log(x)
log10(x)
exp(x)
sqrt(x)
pow(x, y)
- 这些函数都是以
double
类型进行运算,注意强制类型转换! - 在末尾加上f或l,可以得到处理float和long double类型的函数版本。
位运算符
~
:按位取反&
:按位取与|
:按位取或^
:按位异或<<
:左移补0/1>>
:右移补0/1
判断与循环结构
判断结构
注意题目里面的if
与else
所在的结构如何匹配成一个完整的判断语句。
switch
:
switch (<#expression#>)
{case <#constant#>:<#statements#>break;default:break;
}
函数
- 函数原型(函数头部)
- 调用其他文件里面的函数:
#include "function.h"
- 警戒实参与形参
extern
:使用外部已经定义的变量,防止重定义static
:静态局部变量,不能在其他文件对其进行访问。一旦初始化,只有在程序消亡时才会消失。
函数指针
int (*p)(int m, int n); //定义函数指针
p = fuction1; //将指针指向函数头部
printf("%d ", (*p)(a, b)); //调用函数指针
数组与指针
整型数组
排序算法
选择排序
void sort(int arr[], int len)
{int i, j;for (i = 0; i < len; ++i){// 初始化最小值int min = arr[i], min_i = i;//寻找未排序的最小元素for (j = i; j < len; ++j){if (arr[j] < min){min = arr[j];min_i = j;}}//将最小元素移到头部swap(arr[i], arr[min_i]);}
}
冒泡排序
void sort(int arr[], int len)
{int i, j;for (i = len - 1; i >= 0; --i) //很容易出错的地方!设置了泡泡最终的去处是数组的末尾。for (j = 0; j < i; ++j) //泡泡的一位位浮起if (arr[j] > arr[j + 1])swap(arr[j], arr[j + 1]);
}
查找算法
线性查找
int search(const int arr[], int len, int target)
{int i;for (i = 0; i < len; ++i)if (arr[i] == target)return i;return -1;
}
二分查找
int search(const int arr[], int len, int target)
{int first = 0, last = len - 1, mid;while (last != first){mid = (first + last) / 2; //初始化midif (arr[mid] > target)last = mid - 1; //修改尾部(-1去除mid本身)else if (arr[mid] < target)first = mid + 1; //修改头部(+1去除mid本身)elsereturn mid; //找到了}return -1;
}
字符串
有长度限制的读取字符串:fgets(str, 10, stdin)
字符串处理函数:
strcpy(str1, const str2)
strlen(const str)
strcat(str1, const str2)
strcmp(const str1, const str2)
\0
到底存在不存在非常重要,否则将会非法读取内存空间!strncpy
,strncat
,strncmp
增加了一个unsigned int
参数来限制长度
指针
指针一定要看清有没有初始化!!!!!
注意指针的类型,不同类型的指针之间不能进行操作
数组与指针
字符指针
字符指针的两种赋值方法
const char* ptr1; //定义了一个字符指针
ptr1 = "2022"; //给字符指针赋值
printf("%s\n", ptr1); //打印字符指针指向的字符串
char str[10] = "2022";
const char* ptr2;
ptr2 = str; //将字符指针指向字符数组的头部
printf("%s\n", ptr2); //打印字符指针指向的字符串,即字符数组的元素
运用指针对字符串操作(以复制为例)
void _strcpy(char* ch1, const char* ch2)
{while (*ch2 != '\0'){*ch1 = *ch2; //单个字符复制ch1++; ch2++; //移向下一个字符}*ch1 = '\0'; //将新生成的字符串封闭
}
指针与整型数组
数组本身就是指针,没有任何本质区别。
以提取一个数组的元素为例:
int a[4];
int* p = a;
a[i] == *(a + i) == p[i] == *(p + i) //注意此处的'[]'自带了寻址的功能
多维数组a[i][j]
的指针:
a[i]
代表的是第i
行的行地址;
提取的等价表达方式有:a[i][j] == *(a[i] + j) == *(*(a + i) + j) == (*(a + i))[j]
指向指针的指针(没什么大的用处)
指针数组
元素均为指针类型
命令行参数
int main(int arc, char* argv[])
动态内存分配(将数据存储在堆内存中)
需要#include <stdlib.h>
int* a; //定义指针
a = malloc(sizeof(int)); //分配堆内存空间int* b; //定义动态数组头
b = calloc(4, sizeof(int)); //分配堆内存空间free(a); free(b); //释放堆内存,防止内存泄漏
a = NULL; b = NULL; //指针接地,防止游走指针
结构化数据
结构体 struct
- 结构体的声明与定义1
struct _struct
{<#type#> <#name#>;
} struct1, struct2;
- 结构体的定义2
struct _struct struct1; // Definition in C
- 访问结构体元素
structure_variable_name.element_name
- 结构体指针
struct point pt; //定义结构体变量
struct point *ptr; //定义结构体指针
ptr = &pt; //绑定结构体指针
pt.x = 0; //成员运算符
ptr -> x = 0; //指向运算符,使用在结构体指针之上
链表初步
struct Node
{int entry;struct Node *next;
}int main()
{struct Node *head = NULL;head = (struct Node*)malloc(sizeof(struct Node));head -> entry = xxx;printf("%d", head -> entry);head -> next = (struct Node*)malloc(sizeof(struct Node));head -> next -> entry = xxx;printf("%d", head -> next -> entry);
}
共用体 Union
类比 struct 但是每次只能使用一个成员
输入输出与文件
C 输入
scanf
函数介绍:scanf("%type", &ptr)
在VS中,
scanf
将被视为不安全的函数,应当使用scanf_s
。不能读取带空格的字符串,当读到空格时,停止读入。
返回值为成功读取的变量个数
sscanf(s, "<#format#>", <#address#>);
:从字符串读取。
getchar()
单个字符输入
gets
函数介绍:gets(str)
- 可以读取带空格的字符串。
- 有长度限制的读取字符串:
fgets(str, len, stdin)
C 输出
printf
格式输出
%a.bs
:a
为占的字符长度,b
为输出字符串的长度。+
右对齐,-
左对齐。sprintf(s, "<#format#>", <#veriable#>);
输出到字符串
头文件
#ifndef Header_h
#define Header_h/*contents here*/#endif /* Header_h */
文件
FILE* fp; //创建文件指针
fp = fopen(<#const char *restrict __filename#>, <#const char *restrict __mode#>); //打开文件,设置模式
/*
可以使用的文件字符操作包括了:fputc(), fgetc(), fputs(), fgets(), fscanf(), fprintf()
fputc(str, fp) :将str写入到文件中;
str = fgetc(fp) :将文件写入str中;
fscanf(fp, "%d%d", &a, &b):将文件中的内容写入a,b;
fprintf(fp,"%d %d",x,y):将x,y写入文件中;
*/
int fclose(fp); //关闭文件指针!!!一定不能忘记!!!
fp = NULL; //指针接地
问答题
C程序设计基础期末考试复习相关推荐
- 用python画竹子_智慧职教moocPython程序设计基础期末考试查题公众号答案
[填空题] 清代孔尚任的传奇<桃花扇>以复社名士侯方域和秦淮歌妓()的爱情故事为线索,展示了南明王朝兴亡的历史. [填空题] 清代影响最大的一个散文流派是(),姚鼐是这一流派的代表. [填 ...
- 程序设计基础(c语言)复习大纲,《程序设计基础-C》复习大纲.doc
<程序设计基础-C>复习大纲.doc <程序设计基础-C>复习大纲 第一部分 期末考核说明 一.期末考试要求 考核学生是否掌握C语言的基本概念,能否较熟练运用Visual C+ ...
- 2018人工智能期末考试复习资料(一):学术篇
机器之心知识委员会 机心通知函[2018]002号 2018 年人工智能专业期末考试复习资料:学术篇 各人工智能研究者.工程师.从业人: 2018 年是人工智能迅猛发展的一年,从技术研究到产业应用都取 ...
- 我们身边的知识产权单元测试答案(期末考试复习)【湘潭大学】
我们身边的知识产权单元测试答案(期末考试复习)[湘潭大学] 第一章 第二章 第三章 第四章 第五章 第六章 第一章 我国历史上第一部以著作权为保护中心的法律是1910年清政府制定颁布的<大清著作 ...
- c语言期末考试复习题,C语言期末考试复习资料 计算机等级考试复习题目
C语言期末考试复习资料 计算机等级考试复习题目 国二国三资料题目 1 C 语言复习题 @复刻回忆 新浪微博账号:http://doc.xuehai.net/panhe14 个人主页 http://do ...
- 河北工程大学c语言期末考试及答案,河北工程大学之数据结构c语言版期末考试复习试题...
河北工程大学之数据结构c语言版期末考试复习试题 <数据结构与算法>复习题 一.选择题. 1.在数据结构中,从逻辑上可以把数据结构分为 C . A.动态结构和静态结构 B.紧凑结构和非紧凑结 ...
- 大学操作系统期末考试复习经典计算题快速回顾
操作系统期末考试复习经典计算题 1.银行家算法 2.计算周转时间 2.1 先来先服务(FCFS) 2.2 短作业优先调度算法(SJF) 2.3 优先级调度算法和高响应比优先调度算法 3.页面置换算法( ...
- 计算机文化基础期末考试复习
计算机文化基础期末考试复习以下是咱们期末考试的复习题,希望大家认真学习: 一.选择题 1. 第一台计算机ENIAC淡生于1946年,是电子管计算机:第二代是晶体管计算机:第三代是中小规模集成电路: ...
- 嵌入式系统设计与开发期末考试复习
嵌入式系统设计与开发期末考试复习 STM32学习笔记 第一章:嵌入式系统概述 1.嵌入式系统概念,应用与特点 2.嵌入式系统的硬件(CPU,外设) 3.主要嵌入式软件系统(应用及OS) 4.嵌入式系统 ...
最新文章
- 为什么 Spring 框架如此流行?
- java--static关键字
- 构造函数与折构函数(c++细节篇五)
- 《我爱拼模型》的背景音乐提取(还没有完成)
- Vue路由开启keep-alive缓存页面
- 北京加密机现场select问题
- markdown使用积累1--$与$$
- 黑龙江高职计算机对口升学,2020年黑龙江中职对口招生录取院校投档分数线
- 优秀PSD电商促销BANNER模板|垂直化内容电商页面设计,需要注意哪些问题?
- 单词计数 soj1076
- 我给曾经暗恋的高中女同学,用Python实现了她飞机上刷抖音
- Compile opencv 2.4.9/2.4.10.1 as static library
- 微信小程序——组件库
- 计蒜客 青出于蓝胜于蓝 【DFS序 + 树状数组】
- 转移APK从手机到PC和PC到手机
- UMLChina公众号文章精选(20210706更新精选)
- 最好用的数学神器Mathpix Snip-公式神器,只要截图就能识别公式,手写的公式都能识别
- win10+node@16 安装特定版本 node-sass
- vue echarts绘制省份地图并添加自定义标注
- 分享一个在线占位图制作工具