C语言复习笔记 4

全国计算机二级C语言考试前期复习1(2022年9月份)笔记 计算机二级C语言复习笔记 阅读详情

C语言输入输出和程序结构

C语言输出数据

  1. puts():仅输出字符串
  2. putchar():输出单个字符
  3. printf():多种格式输出

C语言输入数据

  1. gets():获取一行数据,并作为字符串处理。会读取用户输入的整行内容,包括空格。
  2. getchar()、getche()、getch():这三个函数都用于输入单个字符
  3. scanf():多种格式输入字符。需要注意的是,scanf()遇到空格就结束读取,也就是说,使用scanf()读取的字符串中永远不会包含空格。

字符串常量的存储位置

char s1[] = "aaaaaaaaaaaaaaa";  //数组和字符串都在栈
char *s2 = "bbbbbbbbbbbbbbbbb";  //指针在栈,字符串在常量区
aaaaaaaaaaa是在运行时刻赋值的;  
而bbbbbbbbbbb是在编译时就确定的;  
但是,在以后的存取中,在栈上的数组比指针所指向的字符串(例如堆)快。  
//转义字符
\a  响铃
\b 退格,将当前位置移到前一列
\n 换行,将当前位置移到下一行开头
\r 回车,将当前位置移到本行开头

分支结构

//简单的if-else分支语句
if (判断条件) {
   语句块1;
} else {
   语句块2;
}
//多个if-else分支语句
if(判断条件1) {
   语句块1;
} else if (判断条件2) {
   语句块2;
} else if (判断条件3) {
   语句块3;
} else {
   语句块4;
}

意思是从上到下,依次检测判断条件,当某个判断条件成立时,则执行其对应的语句块,然后跳到整个if else语句之外继续执行其他代码,如果所有判断条件都不成立,则之后最后else的语句块4(n),然后继续执行后续代码。

也就是说一旦遇到能够成立的判断条件,则不再执行其他的语句块,所以最终只能有一个语句块被执行。

#include <stdio.h>
int main (void) 
{
    char ch;
    ch = getchar();
    if (ch < 32) {
        puts("ch is a control character.");
    } else if (ch >= 48 && ch <= 57) {
        puts("ch is a number.");
    } else if (ch >= 65 && ch <= 90) {
        puts("ch is a capital character.");
    } else if (ch >= 97 && ch <= 122) {
        puts("ch is a small character.");
    } else {
        puts("ch is other character.");
    }
    return 0;
}

if语句的嵌套调用

#include <stdio.h>
int main (void) 
{
    char ch;
    ch = getchar();
    if (ch < 32) {
        puts("ch is a control character.");
    } else if (ch >= 48 && ch <= 57) {
        puts("ch is a number.");
        if (ch == '9') {
            puts("ch is number nine.");
        } else {
            puts("ch is other number.");
        }
    } else if (ch >= 65 && ch <= 90) {
        puts("ch is a capital character.");
    } else if (ch >= 97 && ch <= 122) {
        puts("ch is a small character.");
    } else {
        puts("ch is other character.");
    }
    return 0;
}

if 语句嵌套时,要注意 if 和 else 的配对问题。C语言规定,else 总是与它前面最近的 if 配对,例如:

if(a!=b)  // ①
if(a>b) printf("a>b\n");  // ②
else printf("a<b\n");  // ③
//③和②配对,而不是和①配对。

运算符——按操作数的个数分:
1. 单目运算符:++,–
2. 双目运算符:+ - * /
3. 三目运算符:?: 比如 a>b?a:b;

逻辑运算符
为什么有了逻辑运算符——前面学到if-else结构,当一个if语句里面嵌套了多个判断条件就需多个if语句,显然这样的代码不够清晰。利用逻辑运算符可以整合判断条件。

各运算符优先级:
赋值= < &&和|| < 关系运算符 < 算术运算符 < 非

switch语句
为什么会有switch语句,主要是当有多个if语句时,代码不够清晰且易错,尝试写下面的代码就能感受的到

#include <stdio.h>
int main (void)
{
    int a;
    scanf("%d", &a);

    if (a == 1) {
        puts("Today is Monday.");
    } else if (a == 2) {
        puts("Today id Tuesday.");
    } else if (a == 3) {
        puts("Today is Wednesday.");
    } else if (a == 4) {
        puts("Today is Thursday.");
    } else if (a == 5) {
        puts("Today is Friday.");
    } else if (a == 6) {
        puts("Today is Saturday.");
    } else if (a == 7) {
        puts("Today is Sunday.");
    } else {
        puts("A illegal number.\nPlease input a number between 1 and 7....");
    }
    return 0;
}

关于switch语句
switch结构1:

switch(表达式){
    case 整型数值1: 语句 1;
    case 整型数值2: 语句 2;
    ......
    case 整型数值n: 语句 n;
    default: 语句 n+1;
}

它的执行过程是:
1) 首先计算“表达式”的值,假设为 m。

2) 从第一个 case 开始,比较“整型数值1”和 m,如果它们相等,就执行冒号后面的所有语句,也就是从“语句1”一直执行到“语句n+1”,而不管后面的 case 是否匹配成功。

3) 如果“整型数值1”和 m 不相等,就跳过冒号后面的“语句1”,继续比较第二个 case、第三个 case……一旦发现和某个整型数值相等了,就会执行后面所有的语句。假设 m 和“整型数值5”相等,那么就会从“语句5”一直执行到“语句n+1”。

4) 如果直到最后一个“整型数值n”都没有找到相等的值,那么就执行 default 后的“语句 n+1”。
需要重点强调的是,当和某个整型数值匹配成功后,会执行该分支以及后面所有分支的语句。

break是C语言的一个关键字,专门用于跳出switch语句,所谓跳出,是指一旦遇到break,就不再执行,switch中的任何语句,包括当前分支中的语句和其他分支中的语句;也就是说,整个switch执行结束了,接着会执行整个switch后面的代码。

switch语句结构2:

switch(<条件>)
{
case 1:<语句体>;break;
case 2:<>;break;
......
default:<>;break;
}

需要注意的是:
1. 只能针对基本数据类型使用;其他类型必须用if
2. case 标签必须是常量表达式(整数或字符)
3. 由于 default 是最后一个分支,匹配后不会再执行其他分支,所以也可以不添加break;语句。
4. default 不是必须的。当没有 default 时,如果所有 case 都匹配失败,那么就什么都不执行。

条件运算符
表达式1?表达式2:表达式3
首先判断表达式1,若为真,则将表达式2的值作为整个条件表达式的值;若为假,则将表达式3的值作为整个条件表达式的值。条件表达式通常用于赋值语句中。
需要注意的是:
1. 条件运算符的优先级是小于关系运算符和算术运算符的,高于赋值运算符:max = (a>b)?a:b等价于 max = a>b?a:b
2. 条件运算符的结合方向是自右向左的,条件表达式嵌套的理解:
a>b?a:c>d?c:d;等价 a>b?a:(c>d?c:d)


在C语言中,共有三大常用的程序结构:
顺序结构:代码从前往后执行,没有任何“拐弯抹角”;
选择结构:也叫分支结构,重点要掌握 if else、switch 以及条件运算符;
循环结构:重复执行同一段代码。

循环结构

循环结构
while 循环

while(表达式) {
   语句块;
}

执行过程是:先计算表达式的值,若为真,执行语句块;再计算表达式的值,若为真,继续执行语句块,再计算表达式的值,直到表达式的值为假,就退出循环,执行while后面的代码。

while 循环的整体思路是这样的:设置一个带有变量的循环条件,也即一个带有变量的表达式;在循环体中额外添加一条语句,让它能够改变循环条件中变量的值。这样,随着循环的不断执行,循环条件中变量的值也会不断变化,终有一个时刻,循环条件不再成立,整个循环就结束了。

for循环的产生

#include <stdio.h>
int main(){
    int sum = 0;
    int i = 1;  //语句①
    while(i <= 100 /*语句②*/ ){
        sum += i;
        i++;  //语句③
    }
    printf("%d\n", sum);
    return 0;
}

可以看到,语句①②③被放到了不同的地方,代码结构较为松散。为了让程序更加紧凑,可以使用 for 循环来代替,如下所示:

#include <stdio.h>
int main(){
    int sum = 0;
    for(int i = 1/*语句①*/; i <= 100/*语句②*/; i++/*语句③*/){
        sum += i;
    }
    printf("%d\n", sum);
    return 0;
}

for循环的一般形式是

for (表达式1; 表达式2; 表达式3) {
    语句体;
}

运行过程:先计算表达式1,再计算表达式2,若表达式2的值为真,则执行语句体,再计算表达式3,再计算表达式2的值,若为真,执行语句体;若为假,结束整个for循环语句。

“表达式1”仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句。“表达式2”一般是一个关系表达式,决定了是否还要继续下次循环,称为“循环条件”。“表达式3”很多情况下是一个带有自增或自减操作的表达式,以使循环条件逐渐变得“不成立”。

C语言跳出循环
使用while和for循环时,如果想提前结束循环(在不满足结束条件的循环下结束循环),可以使用break或continue关键字

break关键字:

之前有学到,用于跳出switch语句;

用于while 、 for循环时,会终止循环而执行整个循环语句后面的代码,break关键字通常和if语句一起使用,即满足条件时,便跳出循环。

在多层循环中,一个while语句只跳出一层循环

continue关键字:
continue 语句的作用是跳过循环体中剩余的语句而强制进入下一次循环。continue语句只用在 while、for 循环中,常与 if 条件语句一起使用,判断条件是否成立。

break与continue的对比:break 用来结束所有循环,循环语句不再有执行的机会;continue 用来结束本次循环,直接跳到下一次循环,如果循环条件成立,还会继续循环

循环结构的嵌套

//输出一个4x4的矩阵
#include <stdio.h>
int main(void) 
{
    for (int j = 1; j <= 4; j++) {
        for (int i = 1; i <= 4; i++) {
            printf("%d ", i*j);
        }
        printf("\n");
    }
    return 0;
}
//输出九九乘法表
#include <stdio.h>
int main(void) 
{
    for (int i = 1; i <= 9; i++) {
        for (int j = 1; j <= i; j++) {
            printf("%d*%d=%-4d", i, j, i*j);
        }
        printf("\n");
    }
    return 0;
}

这里写图片描述

笔记4之C语言复习和寄存器地址名称映射分析 位操作 define宏定义关键词 ifdef条件编译 extern变量声明 typedef类型别名 结构体 static关键字 1.位操作 按位与,有0为0;按位或,有1为1;左移低位补零,右移高位补零;按位异或,异1同0; 要操作的位先用&清零,再用|置位,不影响其他位 有BSRR的话可以直接操作GPIOA->BSRR=0xFFFF00F0(https://blog.youkuaiyun.com/qq_33430730/article/details/108189986); ... 阅读详情

相关推荐

C语言期末复习|最后的总结

在 C 语言中,自定义标识符是由程序员为变量、函数、结构体、联合体、枚举、宏、标签等命名时使用的名称。1.大小写字母含义不同。APH 和 aph 代表不同的变量。2.C语言的标识符由字母、数字和下划线组成。3.第一个字符必须是字母或下划线。4.第一个字符不能是数字。9ab是非法的用户标识符。5.C语言中的变量名属于标识符。6.C 语言的关键字(保留字)是具有特殊含义的标识符,它们被 C 语言的编译器保留,不能用作变量名、函数名等普通标识符。7.main。

WLYCTT的博客 2254

C语言数组初始化及逆向输出

C语言数组初始化及逆向输出

weixin_60646723的博客 886

C语言期末考试-复习错题

东莞城院的C语言考试复习资料和考试样题 https://pan.baidu.com/s/18xDvW1DM6z-Wt16rheHeZw hwv0 1:(F)计算机能直接执行机器指令和汇编指令但不能直接执行高级语言中的语句 机器只能运行机器语言 2:(F)一个C语言程序由一个或多个函数组成,其中至少必须包含一个main函数 ...

菜鸟大佬的博客 5677

【C语言】 知识点汇总--基础知识点梳理(超全超详细)

目录一、从源代码到exe二、基本数据类型三、字符在屏幕上的显示原理四、溢出现象五、类型转换规律六、短路问题七、指针变量类型的作用 八、指针类型的扩展——多级指针九、指针类型的扩展——指针数组十、指针类型的扩展——数组指针十一、一维数组-名-特性十二、二维数组-名-特性十三、大端存储-小端存储十四、函数在源代码中的三种状态十五、堆区与栈区的区别十六、函数的执行原理十七、枚举类型十八、typedef二十、const二十一、全局/局部变量生命周期与作用域二十二、static静态变量二十三、extern二十四、宏d

jia_03的博客 2万+

C语言复习笔记4----for循环

C语言复习笔记4---for循环知识点补充

m0_72900498的博客 708

C语言学习笔记

C语言学习笔记,C语言学习笔记,qsort排序。。。。。。。。。。。。。。。。。。。。。。。。。。。。

图及其应用c语言实现(数据结构复习最全笔记)(期末复习最新版)

图 一.图的基本概念 1.图的定义 图是由顶点(vertex)集合及顶点间的关系组成的一种数据结构。Graph=(V,E)Graph=(V,E)其中,顶点集合 V={x|x∈某个对象数据集}V={x|x∈某个对象数据集} 是有穷非空集合;E={(x,y)|x,y∈V}E={(x,y)|x,y∈V} 是顶点间关系的有穷集合,也叫边(edge)集合。Path(x,y)Path(x,y)表示从顶...

markconca的博客 1万+

C语言复习笔记

C语言复习笔记,比较全面,有助于C语言的学习。

C语言复习笔记--指针(4)

在经过前几篇的复习后我们已经了解了大部分指针的类型,今天让我们继续复习指针的其他内容吧.

2301_80159237的博客 1028

C语言学习笔记基础完整

C语言基础部分学习笔记全部

Excel炒股党必备:手把手教你用Power Query免费获取并刷新股票历史数据

本文详细介绍了如何利用Excel中的Power Query工具免费获取并自动刷新股票历史数据,特别适合Excel炒股党。从环境配置、数据源选择到实战操作,手把手教你建立智能数据管道,实现高效投资分析。通过参数化股票代码和定时刷新功能,大幅提升数据更新效率。

weixin_26767391的博客 654

C语言复习笔记4

for循环:会出现死循环,注意i的地址会跟越界的arr[i]相等,所以出现死循环。getchar需要清空缓冲区的情况。continue跳过本轮循环。goto语句造成的死循环。while循环 死循环。只打印10个haha。

hou19975418的博客 284

AJ-Report开源数据大屏存在远程命令执行漏洞

该平台可以通过post方式在validationRules参数对应值中进行命令执行,可以获得服务器权限,登陆管理后台接管大屏。如果被攻击者利用,危害后果十分严重。

swordheart的博客 387

C语言复习笔记(4.21更新)

虽然一直有在使用C语言,但是由于C语言是大一学的,一些不常用的功能基本都忘记了,因此来复习一下。 c 环境配置 c语言的环境之前都有配置好,同时这方面也不是我想要复习的重点,因此直接略过去。 c 数据类型/变量/常量 算是用的很多的了,写一些不怎么用到的。 void使用方法: 函数返回空值 void fun(){} 函数参数为空 int fun(void){} 指针指向void 类型为 void * 的指针代表对象的地址,而不是类型。例如,内存分配函数 void *malloc( size_t

weixin_44020754的博客 165

Sony DPT RP1/CP1破解攻略

前言 自己有一台Sony DPT CP1和一台kindle,两个都已经用了很多年。直到最近发现微信读书上经常可以找到一些免费而且不错的书,所以就萌生了在两台机器上使用微信读书的想法。kindle比较容易实现,直接打开内置浏览器,进入微信读书网页版就行了,而Sony的电纸书则只能通过破解+安装微信读书的方式实现。大概弄了两三个小时吧,也遇到了一些问题,所以这里记录一下整个过程,希望能方便后来的使用者。 首先感谢HappyZ, osc_t5nbj8ds。前者是提供公开破解的方法的大神,后者则是解决了我遇到的问题

weixin_43467572的博客 1万+

Dynamics 365 F&O新手必看:Visual Studio 2019搭建项目框架全流程(含Model避坑指南)

本文详细介绍了如何在Visual Studio 2019中为Dynamics 365 Finance and Operations搭建企业级项目框架,包括Model分层策略、Solution管理及开发工作流优化。特别提供了Model避坑指南和实用配置建议,帮助新手快速上手并避免常见错误。

weixin_30505225的博客 381

C: 笔记整理4: C语言中各语句及其程序设计(总复习)

笔记整理4: C语言中各语句及其程序设计 常用的控制语句: 控制语句 说明 if()…else… 选择语句 switch() 多分支选择语句 for()… 循环语句 while()… 循环语句 do…while() 循环语句 break 退出switch或循环 continue 退出本次循环 return 从函数返回 (1),IF语句及程序设计 形...

qq_45810848的博客 270

用scons编译STM32F103工程

想用vscode来实现代码的编辑与调试代码,原先这个工程是用STM32CUBEIDE建立的,参照STM32CUBEIDE的编译过程,编写了下面的scons脚本,scons是初次了解,既然是python脚本,那么会什么就怎么写吧。 import os import sys import glob cross_compiler_prefix = 'arm-none-eabi-' CC = cross_compiler_prefix+'gcc' CXX = cross_compiler_prefix+'g+

cylinc的专栏 1623

STM32学习笔记【4.C语言基础再复习】

在C语言中,宏定义是一种预处理指令,用于将一个标识符(宏名)替换为指定的字符串。这个过程称为“宏展开”或“宏替换”。宏定义是通过使用#define预处理命令来完成的。# define 宏名 字符串宏定义作用提升易读性:比如便于批量修改:比如支持复杂操作,如算术运算和逻辑运算等在这个例子中,我们定义了一个名为AREA的宏,它接受一个参数x,并返回x * x的结果。当程序中出现AREA(5)时,它会被替换为(5 * 5)。注意:宏定义只进行简单文本替换,不做计算或求值。

weixin_57606185的博客 257

BRepNet与图神经网络融合:提升3D CAD加工特征识别的精度与泛化能力

本文探讨了BRepNet与图神经网络(GNN)融合技术如何显著提升3D CAD加工特征识别的精度与泛化能力。通过将CAD模型视为图结构,利用GNN的消息传递机制增强对复杂拓扑关系的理解,并结合BRepNet的局部特征提取,该融合方法在MFCAD++数据集上实现了高达99.53%的准确率,有效解决了传统方法在处理复杂相交特征时的局限性,为智能制造提供了关键技术支撑。

android的专栏 775

Arduino 系列:Arduino Due 系列 (基于 ATSAM3X8E)_(5).电源管理与电压调节

电源管理与电压调节是确保嵌入式系统稳定性和可靠性的关键环节。通过合理选择电源输入方式、使用高效的电压调节器、设计适当的滤波电路和实施动态电源管理,可以有效提高系统的性能和寿命。同时,使用电源调试工具和编写调试代码,可以帮助开发者及时发现和解决问题。希望本文档能为使用 Arduino Due 的开发者提供有用的信息和指导。

2401_87715305的博客 1309

C语言学习及复习笔记-【4】C 存储类型

这意味着变量的最大尺寸等于寄存器的大小(通常是一个词),且不能对它应用一元的 ‘&’ 运算符(因为它没有内存位置)。寄存器只用于需要快速访问的变量,比如计数器。还应注意的是,定义 ‘register’ 并不意味着变量将被存储在寄存器中,它意味着变量可能存储在寄存器中,这取决于硬件和实现的限制。

文斗士的专栏 315

Ubuntu零基础教学-如何把Ubuntu20.04界面从英文修改为中文?| 超级详细,建议收藏

带你如何把Ubuntu20.04界面从英文修改为中文?| 超级详细,建议收藏

**My Coding Family** 5340

c语言复习笔记

指针部分:  1.指针类型说明 main(){ int *pa[10]; /* 定义指针数组pa,它由n个指向整型的指针组成 */ int (*pb)[10]; /* pb为指向含10个元素的一维数组的指针变量 */ int f(); /* f为返回整型的函数 */ int *pf(); /* pf为返回指针的函数,该指针指向整型数据 */ int...

yulchaochow的专栏 207

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C语言复习笔记(一)C语言概论初识

从今天开始没有复习c语言的要抓紧时间了哦,如果不会复习的话,不妨跟着我一起来复习吧,现在小编已经结课了,反正闲着也是闲着,所以小编想用五天时间对c语言做一个系统性复习。欢迎大家一起来学习,互相指正,互相进步哦!加油,干就完了,奥利给!!! 不bb了,直入正题 第1章 C语言概论初识 (温馨提示,如果你看起来毫不费力,你就已经是大佬了哦,如果有些吃力,那就赶紧抓紧时间再学一遍吧,这个复习不针对小白哦) 最简单的C语言程序 【例1.1】要求在屏幕上输出:机械电子工程 解题思路: 在主函数中用printf函数原样

royal_77QAQ的博客 1588

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: C语言内存、进制、ASCII码易混知识点
下一篇: C语言循环结构简单练习1——输出九九乘法表
henhaoji_123
博客等级 码龄10年 260粉丝 283原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值