总览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

判断与循环结构

判断结构

注意题目里面的ifelse所在的结构如何匹配成一个完整的判断语句。

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.bsa为占的字符长度,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程序设计基础期末考试复习相关推荐

  1. 用python画竹子_智慧职教moocPython程序设计基础期末考试查题公众号答案

    [填空题] 清代孔尚任的传奇<桃花扇>以复社名士侯方域和秦淮歌妓()的爱情故事为线索,展示了南明王朝兴亡的历史. [填空题] 清代影响最大的一个散文流派是(),姚鼐是这一流派的代表. [填 ...

  2. 程序设计基础(c语言)复习大纲,《程序设计基础-C》复习大纲.doc

    <程序设计基础-C>复习大纲.doc <程序设计基础-C>复习大纲 第一部分 期末考核说明 一.期末考试要求 考核学生是否掌握C语言的基本概念,能否较熟练运用Visual C+ ...

  3. 2018人工智能期末考试复习资料(一):学术篇

    机器之心知识委员会 机心通知函[2018]002号 2018 年人工智能专业期末考试复习资料:学术篇 各人工智能研究者.工程师.从业人: 2018 年是人工智能迅猛发展的一年,从技术研究到产业应用都取 ...

  4. 我们身边的知识产权单元测试答案(期末考试复习)【湘潭大学】

    我们身边的知识产权单元测试答案(期末考试复习)[湘潭大学] 第一章 第二章 第三章 第四章 第五章 第六章 第一章 我国历史上第一部以著作权为保护中心的法律是1910年清政府制定颁布的<大清著作 ...

  5. c语言期末考试复习题,C语言期末考试复习资料 计算机等级考试复习题目

    C语言期末考试复习资料 计算机等级考试复习题目 国二国三资料题目 1 C 语言复习题 @复刻回忆 新浪微博账号:http://doc.xuehai.net/panhe14 个人主页 http://do ...

  6. 河北工程大学c语言期末考试及答案,河北工程大学之数据结构c语言版期末考试复习试题...

    河北工程大学之数据结构c语言版期末考试复习试题 <数据结构与算法>复习题 一.选择题. 1.在数据结构中,从逻辑上可以把数据结构分为 C . A.动态结构和静态结构 B.紧凑结构和非紧凑结 ...

  7. 大学操作系统期末考试复习经典计算题快速回顾

    操作系统期末考试复习经典计算题 1.银行家算法 2.计算周转时间 2.1 先来先服务(FCFS) 2.2 短作业优先调度算法(SJF) 2.3 优先级调度算法和高响应比优先调度算法 3.页面置换算法( ...

  8. 计算机文化基础期末考试复习

      计算机文化基础期末考试复习以下是咱们期末考试的复习题,希望大家认真学习: 一.选择题 1. 第一台计算机ENIAC淡生于1946年,是电子管计算机:第二代是晶体管计算机:第三代是中小规模集成电路: ...

  9. 嵌入式系统设计与开发期末考试复习

    嵌入式系统设计与开发期末考试复习 STM32学习笔记 第一章:嵌入式系统概述 1.嵌入式系统概念,应用与特点 2.嵌入式系统的硬件(CPU,外设) 3.主要嵌入式软件系统(应用及OS) 4.嵌入式系统 ...

最新文章

  1. 为什么 Spring 框架如此流行?
  2. java--static关键字
  3. 构造函数与折构函数(c++细节篇五)
  4. 《我爱拼模型》的背景音乐提取(还没有完成)
  5. Vue路由开启keep-alive缓存页面
  6. 北京加密机现场select问题
  7. markdown使用积累1--$与$$
  8. 黑龙江高职计算机对口升学,2020年黑龙江中职对口招生录取院校投档分数线
  9. 优秀PSD电商促销BANNER模板|垂直化内容电商页面设计,需要注意哪些问题?
  10. 单词计数 soj1076
  11. 我给曾经暗恋的高中女同学,用Python实现了她飞机上刷抖音
  12. Compile opencv 2.4.9/2.4.10.1 as static library
  13. 微信小程序——组件库
  14. 计蒜客 青出于蓝胜于蓝 【DFS序 + 树状数组】
  15. 转移APK从手机到PC和PC到手机
  16. UMLChina公众号文章精选(20210706更新精选)
  17. 最好用的数学神器Mathpix Snip-公式神器,只要截图就能识别公式,手写的公式都能识别
  18. win10+node@16 安装特定版本 node-sass
  19. vue echarts绘制省份地图并添加自定义标注
  20. 分享一个在线占位图制作工具

热门文章

  1. Apollo在有赞的实践
  2. 代码人生之《掌控习惯》分享
  3. 如何加快疫苗生产?答案在技术领域而非医学领域
  4. 推荐一款webstorm的主题,类似vscode的黑色主题,习惯vscode的用户可以试试
  5. ElementUi中轮播图走马灯如何实现添加图片
  6. n级阶梯,每次走一步或两步,问最多有多少种走法
  7. Floyd (弗洛伊德)算法简述
  8. 4511或74LS48来实现BCD转7段数码管及逻辑状态输入演示
  9. python3字典详解_Python3字典操作详解 Python3字典操作大全
  10. Kali-msfdb-Postgresql报错排查处理