刚刚毕业那会那时候是单片机兴起的时候,第一份工作就是做的51单片机的电路和编程,用的就是C语言,现在回头想想那时候真的是什么都不懂,但一上手就是直接动手做的方式还是不错的,在做的过程中学习和了解单片机的特性和功能,只是后来,辞职之后好长时间没有做了,现在又重新找了份工作,工作中又接触到了单片机和C语言的内容,所以自己又要重新再学习学习了。
【学习会】一起学习C语言之多年之后再拾起
昨天看完第一章,又想起了当年的hello world,那时候觉得自己要进入一个神奇的世界了,结果只是在大门口转了一圈,就出来了,现在回头看怎么都有熟悉的感觉,单片机大部分还是c语言,只有启动文件那部分是汇编,现在连启动文件也省了,就全是c语言了,所以打算好好重头好好再学习下
第一章:初识C语言
1-1:显示计算结果
#include<stdio.h>
int main(void)
{
printf(“%d”,15+37);
return(0);
}
格式化输出函数printf
%d:以十进制数显示
无格式化输出:
#include<stdio.h>
int main(void)
{
printf(“您好!我叫柴田望洋。\n”);
return(0);
}
转义字符\n:换行操作
\a:响铃
#include<stdio.h>
int main(void)
{
printf(“您好!\a \a \a \n”);
return(0);
}
1-2变量
常量和变量
声明变量
声明多个变量
赋值
1-3输入与显示
通过键盘进行输入
#include<stdio.h>
int main(void)
{
int no;
printf(“请输入一个整数:”);
scanf(“%d”,&no);
printf(“您输入的是%d。\n”,no);
return(0);
}
格式化输入函数scanf
乘法运算
输出函数puts:顺序输出 作为实参的字符串,并在结尾换行。
printf(“ABC\n”)与puts(“ABC”)等同
第2章 运算和数据类型
2-1运算
四则运算
#include<stdio.h>
int main(void)
{
int vx,vy;
puts(“请输入两个整数。”);
printf(“整数vx:”);scanf(“%d”,&vx);
printf(“整数vy:”);scanf(“%d”,&vy);
printf(“vx+vy=%d\n”,vx+vy);
printf(“vx-vy=%d\n”,vx-vy);
printf(“vx*vy=%d\n”,vx*vy);
printf(“vx/vy=%d\n”,vx/vy);
printf(“vx%%vy=%d\n”,vx%vy);
return(0);
}
这里需要注意的是求余数那里用到的%%,是因为%有转化功能,所以需要输出%这个符号的时候需要多写一个。
这段程序里涉及到了运算符+、 - 、* 、/ 、%;然后vx 、vy这两个操作数;后面给个例子取整数最后一位数字如下:
#include<stdio.h>
int main(void)
{
int no;
printf(“请输入一个整数:”);
scanf(“%d”,&no);
printf(“最后一位是%d。\n”,no%10);
return(0);
}
其中需要注意的是%运算,这是计算余数,但有时候规则不同,结果也不同。
单目运算符
取反 –
赋值运算符 =;表达式和赋值表达式
2-2数据类型
求平均值
#include<stdio.h>
int main(void)
{
int na,nb;
puts(“请输入两个整数。”);
printf(“整数A:”);scanf(“%d”,&na);
printf(“整数B:”);scanf(“%d”,&nb);
printf(“它们的平均值是%d。\n”,(na+nb)/2);
return(0);
}
数据类型
int 类型和double 类型
#include<stdio.h>
int main(void)
{
int nx;
double dx;
nv=9.99;
dx=9.99;
printf(“int 型变量nx的值:%d\n”,nx);
printf(“ nx/2:%d\n”,nx/2);
printf(“double 型变量dx的值:%f\n”,dx);
printf(“ dx/2.0:%f \n”,dx/2.0);
return(0);
}
注意:printf函数输出double型值,转换说明用了%f
数据类型和对象
int 只能存整数
double可以存实数
整数常量和浮点数常量
数据类型和运算
类型转换
转换说明:这里我觉得才是最重要的
#include<stdio.h>
int main(void)
{
int na,nb,nc;
int sum;
double ave;
puts(“请输入三个整数。”);
printf(“整数A:”);scanf(“%d”,&na);
printf(“整数B:”);scanf(“%d”,&nb);
printf(“整数C:”);scanf(“%d”,&nc);
sum=na+nb+nc;
ave=(double)sum/3;
printf(“它们的合计值%5d。\n”,sum);
printf(“它们的平均值%5.1f。\n”,ave);
return(0);
}
这里的%5:显示至少5位的十进制整数
这里的%5.1f:显示至少5位的浮点数,但小数点后只显示1位
举例:%09.9f:
a.0表示前面有空位用0补齐位数
b.9表示最少显示宽度为9位,不设定或者超过位数就根据数值显示必要位数,如果设定“-”,数据会显示左对齐,否则右对齐
c.精度:指定显示的最小位数,如果不指定,则整数的时候默认为1,浮点数的时候默认为6
d.转换说明符 d 显示十进制的int型整数 f 显示十进制的double型浮点数
举例如下:
#include<stdio.h>
int main(void)
{ //运行结果
printf(“[%d]\n”, 123); // [123]
printf(“[%.4d]\n”, 123); // [0123]
printf(“[%4d]\n”, 123); // [ 123]
printf(“[%04d]\n”, 123); // [0123]
printf(“[%-4d]\n”, 123); // [123 ]
printf(“[%d]\n”, 12345); // [12345]
printf(“[%.3d]\n”, 12345); // [12345]
printf(“[%3d]\n”, 12345); // [12345]
printf(“[%03d]\n”, 12345); // [12345]
printf(“[%-3d]\n”, 12345); // [12345]
printf(“[%f]\n”, 123.13); // [123.130000]
printf(“[%.1f]\n”, 123.13); // [123.1]
printf(“[%6.1f]\n”, 123.13); // [ 123.1]
printf(“[%f]\n”, 123.13); // [123.130000]
printf(“[%.1f]\n”, 123.13); // [123.1]
printf(“[%4.1f]\n”, 123.13); // [123.1]
return(0);
}
第3章 分支结构程序
3-1 if语句
例:
#include<stdio.h>
int main(void)
{
int vx;
printf(“请输入一个整数:”);
scanf(“%d”,&vx);
if(vx%5)
puts(“输入的整数不能被5整除。”)
return(0);
}
解释if后括号里只有余数不为0,才执行后面puts语句。
例:奇数的判断
#include<stdio.h>
int main(void)
{
int no;
printf(“请输入一个整数:”);
scanf(“%d”,&no);
if(no%2)
puts(“输入的整数是奇数。”)
return(0);
}
if语句(2):if else
#include<stdio.h>
int main(void)
{
int vx;
printf(“请输入一个整数:”);
scanf(“%d”,&vx);
if(vx%5)
puts(“输入的整数不能被5整除。”)
else
puts(“输入的整数能被5整除。”)
return(0);
}
奇数和偶数
#include<stdio.h>
int main(void)
{
int no;
printf(“请输入一个整数:”);
scanf(“%d”,&no);
if(no%2)
puts(“该整数是奇数。”)
else
puts(“该整数是偶数。”)
return(0);
}
判断:指的是if后面括号里的值
非0的判断:
#include<stdio.h>
int main(void)
{
int num;
printf(“请输入一个整数:”);
scanf(“%d”,#
if(num)
puts(“该整数不是0。”)
else
puts(“该整数是0。”)
return(0);
}
相等运算符:==
不等运算符:!=
关系运算符:<、>、< = 、>=
嵌套的if语句:if else if else
计算较大值:
计算三个数的最大值:
条件运算符:属于三目运算符 a?b:c(如果a不为0,则结果是b的值,否则结果是c的值。)
差值计算:(n1-n2)?n1-n2:n2=n1
复合语句(程序块):
判断季节:
逻辑运算符:
&& 逻辑与 || 逻辑或
3-2switch语句
句型:switch(){case ;}
例:
#include<stdio.h>
int main(void)
{ int num;
printf(“请输入一个整数:”);
scanf(“%d”,&num);
switch(num%3){
case 0: puts(“该数能被3整除。”);break;
case 1: puts(“该数除以3的余数是1。”);break;
case 2: puts(“该数除以3的余数是2。”);break;
}
return(0);
}
其中,执行break语句会跳出switch语句。
#include<stdio.h>
int main(void)
{ int sw;
printf(“请输入一个整数:”);
scanf(“%d”,&sw);
switch(sw){
case 1: puts(“A”); puts(“B”);break;
case 2: puts(“C”);break;
case 5: puts(“D”);break;
case 6:
case 7: puts(“E”);break;
default: puts(“F”);break;
}
return(0);
}
default:当控制表达式的值与任何一个case后都不一致就跳转到此执行。
switch和if语句
选择语句:实现程序流程的选择性分支
第4章 程序的循环控制
4-1 do语句
do ……while(条件);
#include<stdio.h>
int main(void)
{
int cont;
do {
int no;
printf(“请输入一个整数:”);
scanf(“%d”,&no);
if(no%2)
puts(“这个整数是奇数。”);
else
puts(“这个整数是偶数。”);
printf(“要重复一次吗?【Yes…0 /No…9】:”);
scanf(“%d”,&cont);
} while(cont==0);
return(0);
}
解释:即使读取到的不是9,也会结束循环,因此只有读取到0,才继续循环。
复合语句(程序块)中的声明
逻辑非运算符
!cont与cont==0含义相同
逆向显示整数值
#include<stdio.h>
int main(void)
{
int num;
do{
printf(“请输入一个非负整数:”);
scanf(“%d”,&num);
if(num<0);
puts(“请不要输入负整数。”);
}while(num<0);
printf(“该整数逆向显示的结果是:”);
do{
printf(“%d”,num%10);
num=num/10;
}while(num>0);
puts(“。”);
return(0);
}
计算整数的位数
#include<stdio.h>
int main(void)
{
int num;
int dig;
do{
printf(“请输入一个非负整数:”);
scanf(“%d”,&num);
if(num<0);
puts(“\a请不要输入负整数。”);
}while(num<0);
dig=0;
do{
num=num/10;
dig=dig+1;
}while(num>0);
printf(“该整数的位数是%d。\n”,dig);
return(0);
}
初始化
#include<stdio.h>
int main(void)
{
int no=1;
int sum=0;
do{
sum=sum+no;
no=no+1;
}while(no<=5);
printf(“1到5的合计值是%d。\n”,sum);
return(0);
}
复合赋值运算符+=
#include<stdio.h>
int main(void)
{
int no=1;
int sum=0;
do{
sum+=no;
no+=1;
}while(no<=5);
printf(“1到5的合计值是%d。\n”,sum);
return(0);
}
对于*,/,%,+,-,<<,>>,&,^,|都有符合赋值运算
后置递增运算符合后置递减运算符
即:a++ 操作数a增加1
a-- 操作数a减少1
4-2 while语句
#include<stdio.h>
int main(void)
{
int no;
printf(“请输入一个整数:”);
scanf(“%d”,&no);
while(no>=0){
printf(“%d”,no);
no--;
}
putchar(‘\n’);
return(0);
}
字符常量
putchar
用递减运算符简化程序
printf(“%d”,no);no--;可以简化为printf(“%d”,no--);
数据递增
#include<stdio.h>
int main(void)
{
int i,no;
printf(“请输入一个正整数:”);
scanf(“%d”,&no);
i=0;
while(i<=no)
printf(“%d”,i++);
putchar(‘\n’);
return(0);
}
限定次数的循环操作
#include<stdio.h>
int main(void)
{
int no;
printf(“请输入一个正整数:”);
scanf(“%d”,&no);
while(no-- > 0)
putchar(‘*’);
putchar(‘\n’);
return(0);
}
前置递增运算符和前置递减运算符
++a 该表达式的值是增加后的值
--a 该表达式的值是减少后的值
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |