第4周:循环控制

for循环

阶乘

int fact=1;int i=1;
for(i=1; i<=n;i++)
{fact*=fact*i;}
//阶乘 n!=1*2*3*...*n

-for循环做求和,初始值为0;for循环求乘积,初始值为1。
-for(初始值;条件;每轮动作),其中任意项均可省略,并且for循环等同于while循环

Tips:
-如果有固定次数,采用for循环
-如果必须执行一次,采用do-while循环
-其他情况使用while循环

for ( int i=10; i> 1; i /=2 ) {printf("%d ", i++);
}
//输出结果为 10 5 3 2。 先判断条件,执行括弧内的语句,再进行 i/=2。
break和continue
break:跳出所在的那层循环
continue:跳过这一轮循环剩下的部分,进入下一个循环
for ( one = 1; one < x*10; one++ ) {for ( two = 1; two < x*10/2; two++ ) {for ( five = 1; five < x*10/5; five++ ) {if ( one + two*2 + five*5 == x*10 ) {printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n", one, two, five, x);exit = 1;break;}}if ( exit == 1 ) break;}if ( exit == 1 ) break;}
//接力break,因为一个break只能跳出所在的那层循环。在每一层添加break,并增加标签exit来确保在有一个解后再break 。
int origa = a;int origb = b;while ( b != 0 ) {t = a%b;a = b;b = t;}printf("%d和%d的最大公约数是%d.\n", origa, origb, a);
//辗转相除法求最大公约数

第4周练习题1:

while(1)
{ ...if(...){break;}
}
// 当无法准确描述迭代情况的时候,可以写一个循环直到满足情况后跳出。

第5周:数据类型

C语言的变量:在使用前定义,并且确定类型

sizeof(int)
sizeof(x)
// sizeof是一个运算符,它给出类型或者变量在内存中所占据的字节数。sizeof是静态运算符,不能再其括弧内做运算。

C语言的类型

  • 整数

    • char:1个字节(8个比特),-128~127
    • short:2个字节(16个比特),-32768~32767
    • int:取决于CPU,通常是”1个字”
    • long:取决于CPU,通常是”2个字”
    • long long(只存在C99中):8个字节

整数的内部表达
计算机内一切都是2进制

负数的表示
0 —> 00000000
1 —> 00000001

补码:补码的意义上在于,拿补码和原码相加可得到一个溢出的0。
故在补码中:
11111111~10000000 —> -1~-128
00000001~01111111 —> 1 ~ 127

(1)00000000-00000001=11111111
故11111111当做纯二进制看是255,当做补码来看则是-1。

Unsigned:在整数类型前面加上unsigned让其成为无符号的整数。11111111对于char代表-1,而对于unsigned代表255。

整数的输出,只有两种形式int和long
- %d : int
- %u:unsigned int
- %ld:long long
- %lu:unsigned long long

8进制与16进制
- 以0开始的数字字面量是8进制
- 以0x开始的数字字面量是16进制
- %o用于8进制,%x用于16进制
- 8进制与16进制只是将数字表达为字符串,与内部如何表达无关

如何选择整数类型
没有特殊需求就选择int,现在CPU字长普遍为32或者64字节,一次内存读写就是一个int,一次计算也是一个int。选择更短的类型不会更快,甚至会慢。

  • 浮点数
类型 字节 范围 有效数字
float 4个字节 ±\pm(1.20*10^-38~3.40*10^38),0,±\pminf,nan 7
double 8个字节 ±\pm(2.20*10^-308~1.79*10^308),0,±\pminf,nan 15
类型 scanf printf
float %f %f,%e
double %lf %f,%e

其中%e代表输出科学计数法,例如 5.67E+10。

输出精度

printf("%.3f\n",-0.0049);
//在%和f之前.n可以指定输出小数点后几位,四舍五入。

如果printf输出inf表示超过范围的浮点数,输出nan表示不存在的浮点数

float a, b, c;
a=1.123f;
b=1.345f;
//带小数点的字面量是double而不是float,如果要表明是float需要用f或者F后缀表明身份。

如何选择浮点数类型
没有特殊需求,选用double

  • 字符

char是一种整数类型,也是一种字符类型,用单引号 ‘a’, ‘1’ 来表示。在输入输出中用 %c来代表字符。

字符计算
- 一个字符加一得到那个字符在ASCII码表中那个字符之后的那个字符
大小写转换
- 大写字母与小写字母是分开排列的,’a’- ‘A’ 可以得到两列之间的距离。X+ ‘a’ - ‘A’可以将大写变成小写,而 x+ ‘A’ - ‘a’可以将小写变成大写

逃逸字符

字符 意义 字符 意义
\b 回退一格 \” 双引号
\t 到下一个表格位 \’ 单引号
\n 换行 \ 反斜杠本身
\r 回车
printf("1\t1\n");
printf("12\t1\n");
// 输出结果为:
//  1   1
//  12  1
// 能够使得上下对齐,\t到底跳过几个空格是没有规定,也没有标准的,每个输出设备会规定自己设备上\t会定位到某个整数单位倍数处,比如有的设备规定\t定位到8字符整数倍数处,假定某个字符串在制表符\t的前面有n个字符,那么\t将跳过8-n%8个空格。

类型转换

当运算符的两边出现不一致的类型,会自动转化成能表示更大范围的数的类型
- char < short < int < long < long long

自动类型转换
- 对于printf,任何小于int类型都会被转化成int;float都会被转化被double。
- 对于scanf,要输入short,需要%hd。


强制转换
把一个变量从较大的类型转化成较小的类型
(类型)值
- (int)10.2
- (short)32

但是小的变量不是总能表达大的变量的
- (short)32768: 超出short的范围

强制转换的优先级高于四则运算

第5周:其他运算

逻辑运算

与或非:!非,&&与,||或
优先级:!>&&>||

逻辑运算时自左向右的,如果已经能决定结果,就不会继续运算
- 对于 &&,如果左边是false,则不运算右边
- 对于||,如果左边是true,则不运算右边

####条件运算符

count=(count>20)?count-10:count+10;
// 等同于 if(count>20) count-10;
//         else count+10;

条件运算符的优先级高于赋值运算符的优先级,低于其他的运算符。

逗号运算符

逗号运算符用于连接两个表达式,并以右边表达式的结果作为它的结果。其优先级是最低的,因此会依次进行左、右两边表达式的运算,再取右边的值为结果。
可用于for循环

for(i=0,j=0;i<j;i++,j--)
//对于i做完运算后,取j的值

测验:

int x=1, y=012;
printf(“%d”,y*x++);
// 012为8进制,而x++的结果为x的值
//a = ++i,相当于 i=i+1; a = i;
//a = i++,相当于 a = i; i=i+1; 
int i=10;
long long t = sizeof(i++);
printf("%d", i);
// sizeof是静态运算,故i仍为10。

程序设计入门——C语言笔记(第4周-第5周)相关推荐

  1. MOOC程序设计入门——C语言(翁恺)第五周编程作业“念整数”

    MOOC程序设计入门--C语言(翁恺)第五周编程作业"念整数" ****念整数 题目内容: 你的程序要读入一个整数,范围是[-100000,100000].然后,用汉语拼音将这个整 ...

  2. 程序设计入门-C语言基础知识-翁恺-第六周:数组-详细笔记(六)

    目录 第六章:数组 6-1 数组 6-2 数组计算 6.3 课后习题 第六章:数组 6-1 数组 题目:让用户输入一组整数以-1结束输入,算出这组数的平均值,并且输出大于平均值的数. 我们需要记录用户 ...

  3. 中国大学MOOC课程《程序设计入门——C语言》翁恺老师 第六周测试题 高精度小数(习题记录)

    1高精度小数(10分) 题目内容: 由于计算机内部表达方式的限制,浮点运算都有精度问题,为了得到高精度的计算结果,就需要自己设计实现方法. (0,1)之间的任何浮点数都可以表达为两个正整数的商,为了表 ...

  4. 笔记:中国大学MOOC课程《程序设计入门——C语言》编程练习

    笔记:中国大学MOOC课程<程序设计入门--C语言>编程练习 第7周 数组运算 1 多项式加法 第8周 指针与字符串 2 GPS数据处理 第7周 数组运算 1 多项式加法 题目内容: 一个 ...

  5. c语言编程题素数和,程序设计入门——C语言 第4周编程练习 1 素数和(5分)

    题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0 输入格式: 两个整数,第一个表示n,第二个表示m. 输出格式: 一个整数,表示第n个素数到 ...

  6. [笔记][mooc]《程序设计入门—C语言》

    程序设计入门-C语言 (幕课课程笔记) Mac环境搭建 terminal > "gcc" >确认,安装 > gcc || gcc --version 本课程程序的 ...

  7. 编写一个分奇偶的c语言程序,程序设计入门——C语言 第3周编程练习 1 奇偶个数(5分)...

    1 题目内容: 你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据.程序输出读到的数据中的奇数和偶数的个数. 输入格式: 一系列正整数,整数的范围是(0,100000).如果 ...

  8. 程序设计入门——C语言 习题汇总

    <img width="108" height="40" alt="浙江大学" src="http://imgsize.ph ...

  9. 程序设计入门——C语言(翁恺老师)我的作业

    程序设计入门--C语言(翁恺老师)我的作业 第一周 程序设计与C语言 1 输出"Hello World"(5分) 题目内容: 请输出一行,内容为 Hello World 请注意大小 ...

  10. 翁恺c语言程序设计入门期末,程序设计入门-C语言 翁恺.doc

    第 PAGE \* MERGEFORMAT 39 页 共 NUMPAGES \* MERGEFORMAT 39 页 程序设计入门-C语言 浙大 翁恺循环类型编程源代码1.#include int ma ...

最新文章

  1. 知乎点赞工具使用教程
  2. 密码界“女杀手”,破译世上最安全密码系统,获 771 万奖金!
  3. 【Hadoop】Hadoop MR异常处理
  4. 洛谷 P1013 进制位
  5. LInux下装jdk
  6. Date、DateFormat、Calendar日期类
  7. linux系统给jvm分配来多少内存
  8. 解耦,未解耦的区别_幂等与时间解耦之旅
  9. 利用opencv添加mask
  10. 凭什么老程序员被裁,应届生却能月薪 1.3 万?
  11. linux急救模式_抢救Linux! Windows XP支持今天终止
  12. jQuery学习之八---文档处理
  13. 这可能是迄今为止对大前端最好的解释
  14. Alibaba Druid 源码阅读(一) 数据库连接池初步
  15. 不显示删除回复显示所有回复显示星级回复显示得分回复 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。...
  16. [Sciter] 资源引用
  17. Java多线程系列 基础篇04 线程中断
  18. NV21数据的镜像算法
  19. 软件设计原则(六) 合成复用原则
  20. com.sun.mirror的jar包

热门文章

  1. 南京商品住宅全装修新政:毛坯、装修价格分别备案
  2. oracle表级附加日志视图,Oracle 附加日志(supplemental log)
  3. Attention-guided Context Feature Pyramid Network for Object Detection
  4. 【单片机毕业设计】【mcuclub-jj-037】基于单片机的电热毯的设计
  5. 【蓝桥杯备战】 Day02
  6. 【JAVA】JSR、JCP是什么?
  7. asp毕业设计——基于asp+access的会员管理系统设计与实现(毕业论文+程序源码)——会员管理系统
  8. 【组合数学】 卢卡斯定理详解(证明+模板)
  9. 器件选型-温度传感器
  10. AR技术应用 の 如何做一个Pokemon GO丢出精灵球抓住皮卡丘吧!(2)