04 - 字符和循环分支
1.标准数据类型
#include<stdio.h>
#include<stdint.h>//标准数据类型头文化//标准数据类型非库里面的,所有的平台都可以使用的
int main()
{typedef signed char int8_t;typedef short int16_t;typedef int int32_t;typedef long long int64_t;typedef unsigned char uint8_t;typedef unsigned short uint16_t;typedef unsigned int uint32_t;typedef unsigned long long uint64_t;typedef signed char int_least8_t;typedef short int_least16_t;typedef int int_least32_t;typedef long long int_least64_t;typedef unsigned char uint_least8_t;typedef unsigned short uint_least16_t;typedef unsigned int uint_least32_t;typedef unsigned long long uint_least64_t;return 0;
}
2.ASCLL字符码
ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符
备注:需要记住常见的ASCLL码 值
0 ~ 9 0X30 ~ 0X39
A ~ Z 0X41 ~ 0x5A
a ~ z 0x61 ~ 0x7A
空格:0X20
回车:0X0d
换行:0x0a
3.字符
3.1 字符和宽字符
char ch1 = 'a'; //一个字符占一个字节大小
short ch2 = 'b'; //一个字符占2个字节
printf("%C",&ch1) //char
printf("%C",&ch2) //short 大写的Cwchar_t ch1 = L'中'; //一个字符占两个字节大小
wprint(L"%c",ch1); //加上L,小写c
print("%C",ch1); //不加L,大写C
3.2 设置不同国家的语言的设置
#include<locale.h> // 包含头文件
setlocale(LC_ALL, "zh-CN"); // 设置区域 实现宽字符的显示setlocale(LC_ALL, "zh-CN");//wchar_t wch1 = L'中'; //widthwchar_t wch1 = 0x4e2d; //width 0~65535printf("%C %hx\n", wch1, wch1);
4.表达式
4.1运算符
4.1.1一元运算符:
符号 | “属性” | 备注 |
---|---|---|
- ~ - | 求反和补数运算符 | |
\* &
|
间接寻址运算符和 address-of 运算符 | |
sizeof
|
Size 运算符 | 计算数据类型字节数 |
+ | 一元加运算符 | |
++ – | 一元递增和减量运算符 |
代码示例:
#include<stdio.h>
#include<stdint.h>int main()
{//sizeofint a=10;printf("sizeof int =%d",sizeof(a)); //int数据是4字节//++ //前置++ int n1=1;int n2=1;n2=n1++;printf("n1 = %d, n2 = %d ",n1,n2);//n2=1,n1=2 前置++先赋值+1//后置++int n3=1;int n4=1;n3=n4++;printf("n4 = %d, n3 = %d ",n4,n3);//n2=2,n1=2 后置++ 先计算后+1return 0;
}
4.1.2二元运算符
C 提供了以下二进制运算符:
符号 | “属性” |
---|---|
\* / %
|
乘法运算符 |
+ - | 相加运算符 |
<< >> | 移位运算符 |
<><>==< | 关系运算符 |
& | ^ | 位运算符 |
&& || | 逻辑运算符 |
, | 有序评估运算符 |
4.1.3逻辑运算符
逻辑运算符不执行常用算术转换。 相反,它们根据其等效性为 0 计算每个操作数。 逻辑运算的结果不是 0 就是 1。 结果的类型为 int
。
C 逻辑运算符如下所述:
运算符 | 描述 |
---|---|
**&& ** | 如果两个操作数具有非零值,则逻辑“与”运算符产生值 1。 如果其中一个操作数等于 0,则结果为 0。 如果逻辑“与”运算的第一个操作数等于 0,则不会计算第二个操作数。 |
|| | 逻辑“或”运算符对其操作数执行“与或”运算。 如果两个操作数的值均为 0,则结果为 0。 如果其中一个操作数具有非零值,则结果为 1。 如果逻辑“或”运算的第一个操作数具有非零值,则不会计算第二个操作数。 |
== | 判断两个是否相等,要和赋值= 区分开来,第一个操作数等于第二个操作数 |
!= | 第一个操作数不等于第二个操作数 |
! | 取反 真(非0)取反就是假(0),假(0)区分就是真(非0) |
4.1.4 C 运算符的优先级和关联性
符号 1 | 操作类型 | 结合性 |
---|---|---|
[ ] ( ) . -> ++``-- (后缀)
|
表达式 | 从左到右 |
sizeof & * + - ~ ! ++``-- (前缀)
|
一元 | 从右到左 |
typecasts | 一元 | 从右到左 |
* / %
|
乘法 | 从左到右 |
+ -
|
加法 | 从左到右 |
<< >>
|
按位移动 | 从左到右 |
< > <= >=
|
关系 | 从左到右 |
== !=
|
相等 | 从左到右 |
&
|
按位“与” | 从左到右 |
^
|
按位“异或” | 从左到右 |
|
|
按位“与或” | 从左到右 |
&&
|
逻辑“与” | 从左到右 |
||
|
逻辑“或” | 从左到右 |
? :
|
条件表达式 | 从右到左 |
= *= /= %= += -= <<= >>= &= ^= |=
|
简单和复合赋值 2 | 从右到左 |
,
|
顺序计算 | 从左到右 |
1 运算符按优先级的降序顺序列出。 如果多个运算符出现在同一行或一个组中,则它们具有相同的优先级。
2 所有简单的和复合的赋值运算符都有相同的优先级。
5.分支
5.1 if语句
//双支if语句if(括号内为判定的条件 ) { 花括号内为执行的代码} else { 花括号内为执行的代码} //多支if语句if(括号内为判定的条件 ) { 花括号内为执行的代码} else if { 花括号内为执行的代码} else{花括号内为执行的代码}
案例:
if ( i > 0 )y = x / i;
else
{x = i;y = f( x );
}
如果 y = x/i;
大于 0,则执行 i
语句。
如果 i
小于或等于 0,则将 i
赋给 x
,并将 f( x )
赋给 y
。
请注意,构成 if
子句的语句以分号结尾。
if语句多条件(案例如上)
5.2 do……while语句
执行过程如下所示:
- 执行语句体。
- 接着,计算 expression 。 如果 expression 为 false,则 do-while 语句将终止,控制权将传递到程序中的下一条语句。 如果 expression 为 true(非零),则将从第 1 步开始重复此过程。
当 、goto
或 return
语句在语句主体中执行时,do-while 语句也可以终止。
do
{y = f( x );x--;
} while ( x > 0 );
在此 do-while 语句中,无论 x
的初始值是什么, 和 x--;
这两个语句都会执行。 然后将计算 x > 0
。 如果 x
大于 0,则会再次执行语句体并重新计算 x > 0
。 只要 x
保持大于 0,语句主体就会重复执行。 当 变为 0 或负值时,do-while 语句的执行将终止。
将至少执行一次循环体。
5.3 while语句
执行过程如下所示:
计算 expression 。
如果 expression 最初为 false,则绝不执行 语句体,并且控制从
while
语句到程序中下一语句的传递。如果 expression 为 true(非零),则执行语句体,并且此过程从第 1 步开始重复。
当语句主体中的 break
、goto
或 return
执行时,while
语句也可以终止。 使用 continue
语句可以在不退出 while
循环的情况下终止迭代。 continue
语句将控制权传递给 while
语句的下一个迭代。
while ( i >= 0 )
{string1[i] = string2[i];i--;
}
此示例将 string2
中的字符复制到 string1
。 如果 i
大于或等于 0,则 string2[i]
将赋给 string1[i]
,并且 i
将递减。 当 i
达到 0 或小于 0 时,while
语句的执行将终止。
while 和 do …… while 的比较
1、do …… while 一定会执行一次在判断
2、while 先判断在执行
5.5 for语句
for (表达式1; 表达二2; 表达式3)
{循环代码
}
for
语句的执行将按以下方式继续:
- 将计算 init-expression(如果有)。 这将为循环指定初始化。 对表达式1的类型没有限制。
- 将计算 表达式二(如果有)。 此表达式必须具有算法或指针类型。 它在每次迭代前计算。 可能有三个结果:
- 如果 表达式二 为 (非零),则执行语句,然后计算 表达式三(若有)。 在每次迭代之后,将计算表达式三。 对其类型没有限制。 副作用将按顺序执行。 该过程随后从计算 cond-expression 重新开始。
- 如果省略了 表达式二,则 表达二 被视为 true,执行将完全按上一段中所述方式继续。 只有在执行了语句主体中的
break
或return
语句时,或只有在执行了goto
(转到for
语句主体外的带标签的语句)时,没有 cond-expression 参数的for
语句才会终止。 - 如果 cond-expression 为 (0),则
for
语句的执行终止,并将控制权传递给程序中的下一个语句。
//输入10个数,计算出最大的值 int nCount = 0;printf("input count:\n");scanf_s("%d", &nCount);int nMax = 0;printf("please input number:\n");scanf_s("%d", &nMax);for (int i = 0; i < nCount - 1; i++) {int nInput = 0;scanf_s("%d", &nInput);if (nInput > nMax) {nMax = nInput;}}printf("max is %d\n", nMax);
5.4面向过程编程思想
案例一:
/*
项目需求:
比较输入两个整数的大小面向过程编程思想:
1.定义两个变量1)定义整型变量1,初始化为02)定义整型变量2, 初始化位0
2.提示用户输入1)printf
3.接受用户输入两个数1)scanf,判断输入合法性
4.判断两数的大小1)如果第一个数大于第二个数a)显示第一个数大2)如果第一个数小于第二个数a)显示第二个数大3)如果第一个数等于第二个数a)显示两数相等
5.程序结束
*/int main() {int nNumber1 = 0;int nNumber2 = 0;printf("Please Input Numbers:\n");int nRet = scanf("%d %d", &nNumber1, &nNumber2);if (nRet != 2) {printf("Invalid Input\n");return 0;}if (nNumber1 > nNumber2) {printf("nNumber1 Is Max\n");}else if (nNumber1 < nNumber2) {printf("nNumber2 Is Max\n");}else{printf("nNumber1 Equal nNumber2\n");}return 0;
}
案例二:
/*
项目需求:
2.比较输入10个整数的大小面向过程编程思想:
1.定义变量保存最大的数
2.提示用户输入1)如果次数大于10,结束程序2)printf
3.接受用户输入数1)scanf,判断输入合法性
4.判断如果输入的数大于保存的数据1)保存的数据 = 输入的数
5.重复第2步骤
6.程序结束*/int main() {int nCount = 0;printf("input count:\n");scanf_s("%d", &nCount);int nMax = 0;printf("please input number:\n");scanf_s("%d", &nMax);for (int i = 0; i < nCount - 1; i++) {int nInput = 0;scanf_s("%d", &nInput);if (nInput > nMax) {nMax = nInput;}}printf("max is %d\n", nMax);return 0;
}
案例三:
/*
面向过程 =》 分而治之 => 大事化小 小事化了1.定义变量n = 0,
2.保存用户输入的值到n
3.j = 0
4.判断j < n1).i = 02).判断i < n1)输出一个* 2)i = i + 13)重复2)3).输出换行
5.j = j + 1
6.重复3
7.0程序结束
*/unsigned n = 0;scanf_s("%d", &n);for(unsigned j = 0; j < n; j = j + 1) {for (unsigned i = 0; i < n; i = i + 1){printf("* ");}printf("\n");}
案例四:
//闰年:四年一润,百年不润(year % 4 == 0 && year % 100 != 0) 四百年再润(year % 400 ==0)/*1.定义一个无符号unsigned short变量, 初始化为12.输入年份3.判断(year % 4 = 0 && year % 100 != 0)1)满足显示闰年2)不满足a)判断(year % 400 ==0)1.满足显示润年2.不满足显示不是润年*/unsigned short nYear = 1;scanf_s("%hd", &nYear);if ((nYear % 4 == 0 && nYear % 100 != 0) || (nYear % 400 == 0)){printf("Is Leap Year\n");}else {printf("Is Not Leap Year\n");}
案例五:
//15.输入某年某月某日,判断这一天是这一年的第几天?/*某月几天 + 日 = 第几天某月几天 3 = 1 + 2每个月有几天 1=31 2=润年29 非润年28 3 = 31 4 = 305 = 316 = 307 = 318 = 319 = 3010 = 3111 = 3012 = 312000 3 11.定义年月日变量2.输入年月日3.检查年月日4.计算前一个月的总天数days如果月为1 + 0如果月为2 + 314 = 1 + 2 + 35.days + 日6.显示days*/unsigned nDays = 0;for (int i = 1; i <= nMonth - 1; i++){if (i == 2) //如果月份2月份{if ((nYear % 4 == 0 && nYear % 100 != 0) || (nYear % 400 == 0))nDays += 29; //闰年2月份29天elsenDays += 28; //闰年2月份28天}else if (i < 8) //如果月份大于1~7月份 奇数31天 偶数30天{if (i % 2 == 0){nDays += 30;}else {nDays += 31;}}else if (i >= 8) { //如果月份8~12月份 奇数30天 偶数31天if (i % 2 == 0){nDays += 31;}else{nDays += 30;}}}printf("%d", nDays + nDay);
案例六:
//30.编写程序将一个输入的十进制数转换成一个二进制数,并且显示/*int 32次char 8次 0000 00001.定义变量2.输入一个数到变量3.定义变量i = 04.i < sizeof type1).变量除2,显示余数2).变量 = 变量 / 23).i++3).重复31111 11101000 0000 1 0111 11100100 0000*/unsigned long long n = 0;scanf_s("%lld", &n);unsigned i = 0;unsigned long long nShift = 0x8000000000000000;while(i < sizeof(n) * 8){printf("%d", n / nShift);n = n % nShift;nShift = nShift / 2;i++;}
案例六:
//32.以每行5个数来输出300以内能被7或17整除的偶数,并求出其和。/*1.0~300xxx2.每行5个数xxx3.能被7或17整除的偶数xxx4.求出其和xxx*/int nCount = 0;int nSum = 0;for (int i = 1; i <= 300; i++) {if (i % 2 == 0 && (i % 7 == 0 || i % 17 == 0)){printf("%-4d ", i);nCount++;nSum += i;if (nCount % 5 == 0) {printf(" sum:%d\n", nSum);nSum = 0;}}}printf(" sum:%d\n", nSum);return 0;
}
04 - 字符和循环分支相关推荐
- julia有 pytorch包吗_用 PyTorch 实现基于字符的循环神经网络 | Linux 中国
导读:在过去的几周里,我花了很多时间用 PyTorch 实现了一个 char-rnn 的版本.我以前从未训练过神经网络,所以这可能是一个有趣的开始. 本文字数:7201,阅读时长大约: 9分钟 htt ...
- hot编码 字符one_用 PyTorch 实现基于字符的循环神经网络 | Linux 中国
在过去的几周里,我花了很多时间用 PyTorch 实现了一个 char-rnn 的版本.我以前从未训练过神经网络,所以这可能是一个有趣的开始. 来源:https://linux.cn/article- ...
- [转】Ubuntu16.04 字符界面 ifconfig 命令无网络接口 ens33 的解决方法
[转]Ubuntu16.04 字符界面 ifconfig 命令无网络接口 ens33 的解决方法 参考文章: (1)[转]Ubuntu16.04 字符界面 ifconfig 命令无网络接口 ens33 ...
- Python处理txt文件:多句分行+行首尾添加字符+for循环--Python新手自练系列
Python处理txt文件:多句分行+行首尾添加字符+for循环--Python新手自练系列 总体操作提示: 操作流程图: 准备工作 第一步先对luo.txt进行操作 第二步对yes.txt进行操作 ...
- 测试-python筑基1-(变量/类型/输出与输入、循环/分支/运算符)
python基础 python输入与输出 python的运行顺序: 1.print 输出也叫打印 2.输入input(表示输入)--关键字 组合使用 3.程序的开始与结束 --有始有终是程序的基础顺序 ...
- 【MATLAB】流程控制 ( 循环结构 | for 循环 | while 循环 | 分支结构 | if end 分支结构 | if else end 分支结构 | switch case 分支结构 )
文章目录 一.MATLAB 流程控制结构 二.for 循环 1.for 循环 2.嵌套 for 循环 三.while 循环 二.分支结构 1.if end 分支结构 2.if else end 分支结 ...
- javascript-流程控制-循环-分支-三元运算符
for循环语句 for (var i=初始值;条件;i变化){要执行的代码 } while循环语句 分支判断 二路分支 if(条件){代码} 多路分支 python中 elif js中是 else i ...
- Java基础知识 变量 基本类型 类型转换 标识符 关键字 运算符 循环 分支结构 JVM
标题JVM **java语言是跨平台的,之所以跨平台是因为在不同的系统中安装不同的JVM这是Java跨平台的前提** 2.JDK:开发工具包-开发必须安装 JRE:运行时环境 JVM:Java虚拟机, ...
- debug跳出循环_Java基础-第04章:循环结构「云图智联」
免费学习视频欢迎关注云图智联:https://e.yuntuzhilian.com/ 1. 什么是循环结构 1.1 为什么要学习循环结构 生活中,有很多"重复的去作某件事"的例子: ...
最新文章
- 什么是DDOS攻击?怎么防御?
- C# MainWindowHandle为0的解决方法
- Oralce Plsql 中文显示乱码问题无需修改注册表完美解决
- 星晨急便凶多吉少:马云陈显宝无意援手或破产
- 四 Spring的工厂类,xml的配置
- Java中Map的使用
- st官网下载stm32固件库方法
- 九度1377缓变序列
- 草珊瑚理解IFC(inline formatting context)
- 所有C#程序员必须知道的13件事
- mysql适配器_MySQL适配器之PyMySQL的详细介绍
- 聊一聊数学中的基本定理(四)——微积分基本定理
- 在线一键重装Win11系统步骤
- 各种DBCO偶联试剂成为点击化学反应的操控新策略
- 神经网络激活函数及其Katex公式代码模板合集
- webrtc 代码走读六
- 搜狗广告联盟不显示广告的原因
- 三天打鱼两天晒网问题Java解法
- Triloga 的任务 — Satta 系列来袭!
- 9、sysnchronized原理
热门文章
- 餐饮店选址要考虑竞品分布,用户画像等
- DFC Session Management Srinivas Jakkula
- Weisfeiler-Leman test与WL subtree kernel
- 对话姜老师,DBA的职场之路
- Android 简单实现三级列表
- 服务器系统通用串行总线控制器,win7系统usb设备不能用通用串行总线控制器无法启动的解决方法...
- 美团登录获取cookie
- 威尔特拉斯定理_数学大师启示录维尔斯特拉斯.pdf
- 《做自己人生的CEO》总结
- 08:Calling Extraterrestrial Intelligence AgainMOOC程序设计算法基础期末第八题