您的位置:首页 > 编程语言 > C语言/C++

程序设计入门——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
在C语言中,赋值也是一种运算,也有结果

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加1count的原值
a=++count给count加1count+1后的值
a=count——给count减1count的原值
a=–count给count减1count-1后的值
第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之间的随机数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: