程序设计入门——C语言笔记(第0周-第3周)
2016-07-28 02:09
417 查看
第0周:概述
本科时期学过一些C++,现在自学数据结构算法的时候感觉需要重新补一下C语言。所用IDE: Dev-C++ 5.11
#include <stdio.h> int main() { 程序 return 0; } //在学习函数之前,代码均在此框架,往后省略框架。
输出
printf("Hello world!\n") //双引号内为字符串。 //\n 表示换行。 printf("23+43=%d\n",23+43) // %d 说明有一个整数要在此位置上输出。
四则运算
C语言 | 意义 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 取余数 |
第1 周:计算
int a=0; //定义变量并初始化,a为名字,即标识符,可由数字、字母、下划线组成,第一个位置不能出现数字。定义a=0的过程为初始化,即给a赋值 int b=0; constant int amount=100;// 定义一个常量,不能修改。 printf("请输入两个整数:"); scanf("%d %d", &a, &b); // 读取输入的两个整数,并赋值给a和b,如果读取到的不是整数,则取整(使用舍去小数部分)。 printf("%d + %d = %d\n", a, b, a + b);
e.g. 计算时间差
int hour1, minute1; int hour2, minute2; scanf("%d %d", &hour1, &minute1); scanf("%d %d", &hour2, &minute2); int t1 = hour1 * 60 + minute1; int t2 = hour2 * 60 + minute2; int t = t2-t1; printf("时间差是%d小时%d分。", t/60, t%60); // 将小时全部转化为分钟来计算, t/60为小时,t%60为分钟。
e.g. 求平均值
int a,b; scanf("%d %d", &a, &b); double c = (a+b)/2.0; //2.0的意义在于,整数与整数之间的运算只会产生整数,因此需要2.0,一个浮点数来精确平均数。 如果使用2,则会平均后取整再将其变成浮点数。例如:(10+11)/2=10.000000 printf("%d和%d的平均值=%f\n", a, b, c);
运算符优先级
优先级 | 运算符 | 运算 | 结合关系 | 举例 |
---|---|---|---|---|
1 | + | 单目不变 | 自右向左 | a*+b |
1 | - | 单目取负 | 自右向左 | a*-b |
2 | * | 乘 | 自左向右 | a*b |
2 | / | 除 | 自左向右 | a/b |
2 | % | 取余 | 自左向右 | a%b |
3 | + | 加 | 自左向右 | a+b |
3 | _ | 减 | 自左向右 | a-b |
4 | = | 赋值 | 自右向左 | a=b |
a=b=6 // a= (b=6),其中b=6为赋值,但其也有结果为6,故a=6。
复合赋值
“+=”, “-=”, “*=”, “/=”, “%=”total*=sum+12 // 等同于 total=total*(sum+12)。
递增递减运算符
“++”,”–”为单目运算符,且配合运算的算子必须为变量。作用即为给这个变量加1或者减1,等同于a++;
a+=1;
a=a+1;
前缀与后缀
表达式 | 运算 | 表达式a的值 |
---|---|---|
a=count++ | 给count加1 | count的原值 |
a=++count | 给count加1 | count+1后的值 |
a=count—— | 给count减1 | count的原值 |
a=–count | 给count减1 | count-1后的值 |
输入一个三位数,倒序输出这个数。
#include <stdio.h> int main() { int a,b,c,n,nn; scanf("%d", &n); a=n/100; b=n%100/10;//剥离中间数的方法 c=n%10; nn=c*100+b*10+a; printf("The number is %d ",nn); return 0; }
第2周:判断
如果
if(条件成立){ ... } else {...}
条件
运算符 | 意义 |
---|---|
== | 相等 |
!= | 不相等 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
printf("The answer is %d",5>3) //关系符合运算符的期望时,输出1,否则输出0。
-关系运算符的优先级比算术运算的优先级低,但比赋值运算的优先级高。
-判断==和!=的优先级比其他关系运算符低,而且关系运算是从左向右的。
另一种形式
if(total>amount) total+=amount+10; // if语句后面没有分号,后面的赋值语句缩进并带有分号,这表明它是if语句中的一部分。
嵌套的判断
if(code==ready) if(count<20) printf("Everything is ok\n"); else printf("Keep waiting\n")
if(code==ready) {if(count<20) printf("Everything is ok\n");} else printf("Keep waiting\n") // else总是会和最近的那个if匹配,所以有特殊需要时候,需要括弧,只靠缩进是不能暗示else与哪个if匹配的。
if(n<1) if(n==0) printf("hello\n"); //虽然输出语句没有缩进,但仍然为嵌套的判断的一部分,只有同时满足两个条件才会输出。
在每一个if与else后面都使用括弧以确保不出错
if-else if 语句
if(exp1) {st1;} else if(exp2) {st2;} else {st3;}
if语句中容易出错的点
有多个语句执行的时候忘了大括号
if(age>60) salary=salary*1.2; bonus=bonus*2; //缺少括弧的话,bonus运算语句则在条件结束后执行。
多路分支
switch ( month ) \\switch 括号内的为控制表达式,只能为整数 { case 1: printf("January\n"); break; case 2: printf("February\n"); break; case 3: printf("March\n"); break; case 4: printf("April\n"); break; case 5: printf("May\n"); break; case 6: printf("June\n"); break; case 7: printf("July\n"); break; case 8: printf("August\n"); break; case 9: printf("September\n"); break; case 10:printf("October\n"); break; case 11:printf("November\n"); break; case 12:printf("December\n"); break; //如果没有匹配的case,则执行default语句,若没有default语句,则什么都不做。 }
int i=1; switch ( i%3 ) { case 0: printf("zero"); case 1: printf("one"); case 2: printf("two"); } //答案为onetwo,因为没有break语句,则一直执行到寻找一个break语句,或者switch结束。
第3周:循环
while循环语句
while(x>0) {x=x/10; n++;} // 循环来计位。
测试程序常使用特殊的数据
个位数,0,负数,有效范围内的边界数
x=x/10; n++; while(x>0) {x=x/10; n++;} // 改进:针对x=0的情况。
do-while语句
do {x=x/10; n++; }while(n>0) // 与while的区别:至少会做一次循环再判断。
random()%n //给出一个在0~n-1之间的随机数。
相关文章推荐
- c++之STL(8)优先级队列 priority_queue
- c/c++ cin>> cout<< scanf() printf() 返回值
- 实习点滴 - 破窗理论、C++ 函数模板静态库
- 优先队列--C语言实现与Java例子
- C++中标准类string常用示例
- c++对象内存模型分析工具
- C++中string和int之间的转换
- leetcode 328. Odd Even Linked List 16ms beats 96.25% c++
- hdoj1879 继续畅通工程
- hdoj1233 还是畅通工程
- hdoj1232 畅通工程
- hdoj 1863 畅通工程
- hdoj1875 畅通工程再续
- hdoj5734 Acperience
- hdoj5742 It's All In The Mind
- hdoj4497
- hdoj5428 The Factor
- 2016多校联训第二场 Keep On Movin hdoj5744
- hdoj3791 二叉搜索树
- C++ 值传递、指针传递、引用传递详解