这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 软件与操作系统 » 【学习会】一起学习C语言之多年之后再拾起

共19条 1/2 1 2 跳转至

【学习会】一起学习C语言之多年之后再拾起

院士
2018-05-16 09:25:37     打赏

刚刚毕业那会那时候是单片机兴起的时候,第一份工作就是做的51单片机的电路和编程,用的就是C语言,现在回头想想那时候真的是什么都不懂,但一上手就是直接动手做的方式还是不错的,在做的过程中学习和了解单片机的特性和功能,只是后来,辞职之后好长时间没有做了,现在又重新找了份工作,工作中又接触到了单片机和C语言的内容,所以自己又要重新再学习学习了。



院士
2018-05-19 22:45:18     打赏
2楼

昨天看完第一章,又想起了当年的hello world,那时候觉得自己要进入一个神奇的世界了,结果只是在大门口转了一圈,就出来了,现在回头看怎么都有熟悉的感觉,单片机大部分还是c语言,只有启动文件那部分是汇编,现在连启动文件也省了,就全是c语言了,所以打算好好重头好好再学习下


院士
2018-05-20 10:54:46     打赏
3楼

第一章:初识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”)等同



院士
2018-05-22 12:23:06     打赏
4楼

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);

}

其中需要注意的是%运算,这是计算余数,但有时候规则不同,结果也不同。

单目运算符

取反

赋值运算符 =;表达式和赋值表达式



院士
2018-05-24 12:39:29     打赏
5楼

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);

}

 



院士
2018-05-25 12:20:02     打赏
6楼

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”,&num;

 

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

复合语句(程序块):

判断季节:

逻辑运算符:

&& 逻辑与  || 逻辑或



院士
2018-05-27 10:06:09     打赏
7楼

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后都不一致就跳转到此执行。

switchif语句

选择语句:实现程序流程的选择性分支



院士
2018-05-28 16:08:47     打赏
8楼

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(“要重复一次吗?【Yes0 /No9】:”);

     scanf(“%d”,&cont);

}  while(cont==0);

  return(0);

}

解释:即使读取到的不是9,也会结束循环,因此只有读取到0,才继续循环。

复合语句(程序块)中的声明

逻辑非运算符

!contcont==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(“15的合计值是%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(“15的合计值是%d\n”,sum);

  return(0);

}

对于*/%+-<<>>&^|都有符合赋值运算

后置递增运算符合后置递减运算符

即:a++  操作数a增加1

a--   操作数a减少1

 



院士
2018-05-29 13:10:49     打赏
9楼

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  该表达式的值是减少后的值



院士
2018-05-31 14:12:32     打赏
10楼

4-3for语句

#include<stdio.h>

int main(void)

{

  int i,no;

  printf(“请输入一个整数:”);

  scanf(“%d”,i);

  for(i=0;i<=no;i++)

   printf(“%d”,i);

  putchar(‘\n’);

  return(0);

}

备注:for循环是我个人用的最多的语句,所以应该永远都不会忘了

do while for 统称为循环语句

固定次数的循环

#include<stdio.h>

int main(void)

{

  int i,no;

  printf(“请输入一个整数:”);

  scanf(“%d”,i);

  for(i=1;i<=no;i++)

putchar(‘*’);

  putchar(‘\n’);

  return(0);

}

例:输入几个数求合计值和平均值

#include<stdio.h>

int main(void)

{

  int i;

  int sum=0;

  int num,tmp;

  printf(“输入多少个整数:”);

  scanf(“%d”,num);

  for(i=0;i<=num;i++)

   {

   printf(“No.%d”,i+1);

scanf(“%d”,&tmp);

sum+=tmp;

}

  printf(“合计值:%d\n”,sum);

  printf(“平均值:%.2f\n”,(double)sum/num);

return(0);

}

4-4多重循环

九九乘法表

#include<stdio.h>

int main(void)

{

  int i,j;

  for(i=1;i<=9;i++)

{

for(j=1;j<=9;j++)

  printf(“%3d”,i*j);

putchar(‘\n’);

   }

   return(0);

}

多重循环

#include<stdio.h>

int main(void)

{

  int cont;

  do{

  int num,i;

  do{

     printf(“请输入一个非负整数:”);

     scanf(“%d”,&num);

     if(num<0)

        puts(“\a请不要输入负整数。”);

     } while(num<0);

   for(i=1;i<=num;i++)

      putchar(‘*’);

   putchar(‘\n’);

  

   printf(“是否继续执行?【Yes0/No9】:”);

   scanf(“%d”,&cont);

}while(!cont);

return(0);

}

长方形

#include<stdio.h>

int main(void)

{

  int i,j;

  int width,height;

  puts(“让我们来描绘一个长方形。”);

  printf(“宽:”);    sanf(“%d”,&width);

  printf(“高:”);    sanf(“%d”,&height);

  for(i=1;i<=height;i++){

for(j=1;j<=width;j++)

  putchar(‘*’);

putchar(‘\n’);

  }

  return(0);

}

直角三角形1

#include<stdio.h>

int main(void)

{

  int i,j,ln;

  printf(“三角形有几层:”);

  scanf(“%d”,&ln);

  for(i=1;i<=ln;i++){

for(j=1;j<=i;j++)

  putchar(‘*’);

putchar(‘\n’);

}

  return(0);

}

直角三角形2

#include<stdio.h>

int main(void)

{

  int i,j,ln;

  printf(“三角形有几层:”);

  scanf(“%d”,&ln);

  for(i=1;i<=ln;i++){

for(j=1;j<=ln-i;j++)

  putchar(‘ ’);

for(j=1;j<= i;j++)

  putchar(‘*’);

putchar(‘\n’);

}

  return(0);

}

4-5程序的组成元素和格式

关键字:32

auto          break        case          char          const        contunue

default     do              double      else           enum        extern

float          for             goto          if                int              long

register    return       short         signed      sizeof        long

struct       swith        tupedef    union        unsigned  void

volatile     while

标识符

分隔符

运算符

常量和字符串常量

自由的书写格式

连接相邻的字符串常量

缩进



共19条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]