1、char类型 

  char c;定义了一个char变量
  'a' ; char常量
  char的本质就是一个整数,一个只有一个字节大小的整数
  char c; 定义一个有符号的char
  unsigned char b; 定义一个无符号的char
  c = 4; //c等于一个整数 -->4
  c = '4';//c等于一个字符4,对应ASCII码的52
  %c 表示是输出一个字符,而不是一个整数
 大写字母转小写的方法:
  例如: char a = 'B';
  a = a + 32;
  printf("%c \n",a);
 例二:
  char a = 127;
  a = a+5;
  printf("%d",a); // -124

  分析:a=127 --> 0111 1111 -->+5-->1000 0100(最高位为1,计算机便认为它是负数,则当做了补码,则转成原码输出)
  补码-->原码 1000 0100 --> 1111 1011 + 1-->1111 1100(最高位表示符号),则输出的二进制是0111 1100,十进制为-124。
  char 和 unsigned char
  char的取值范围 -128到127。
  unsigned char 为0-255

2、不可打印char转义符

  \a 警报 char a = '\a' ; printf("%c",a); 不显示,只有一声警报
  \b 退格
  \n 换行(回车+换行)
  \r 回车(回到头部)
  \t 制表符
  \’ 输出单引号
  \? 输出问号
  \\ 输出 \

3、浮点数float(4bytes)、double(8bytes)、long double类型-->效率低

  其字节数随系统而变化,常用32架构系统如上的所示。
  小数四舍五入的方法:
  float a = 3.6;
  a = a + 0.5;
  printf("%d",a);# 只保留整数部分

4、volatile

  代表变量是一个可能被CPU指令之外的地方改变的,编译器就不会针对这个变量去优化目标代码。例如:volatile int i
  register 变量在CPU寄存器里面,而不是内存里面。但regist是建议型的指令,而不是命令型的指令。例如:register int a

5、字符串格式化输出和输入  

  1、字符串在计算机内部的存储方式
    字符串是内存中一段连续的char空间,以'\0'结尾。
  2、"" 是c语言表示字符串的格式。printf("%s",'hello world' );
  3、printf函数、putchar函数
    输出%,-->printf("%%");
    'l'附加在d,u,x,o前面,表示长整数。
    '-'左对齐-->printf("%-5d");去掉'-'默认右对齐。
    '0'位宽不够0来凑,但不能与'-'混用。
  4、putchar函数是显示一个字符的函数。
    putchar(97) -->输出‘a’

  5、scanf函数
    scanf("%d",&a) //用&取变量的地址。

   常用字符串输入输出函数如下:   

#include<stdio.h>
#include<stdlib.h> // scanf 输入
int main1(void)
{
char a[] = {}; // 输入:hello world
scanf("%s",a); //%s 表示输入一个字符串 ,scanf是以回车作为输入完成标识的,但回车键本身并不会作为字符串的一部分
// 如果scanf参数中的数组长度小于用户在键盘输入的长度,那么scanf就会缓冲区溢出,导致程序崩溃
int i = ;
for(i=;i<;i++)
{
printf("%d\n",a[i]);
}
printf("---------\n"); //输出:hello -->scanf将回车和空格都视为字符串结束标志
printf("%s",a);
return ;
} // gets() 输入 ,不能用类似“%s”或者 "%d"之类的字符转义,只能接受字符串的输入。
int main2(void)
{ char s[] = {};
gets(s); // 输入:hello world ,gets()函数同样是获取用户输入,它将获取的字符串放入s中,仅把回车键视为结束标志 ,但也有溢出问题
int i;
for(i=;i<;i++)
{
printf("%d\n",s[i]);
}
printf("-------\n");
printf("%d\n",s); // 输出:hello world
return ;
} // gets()获取用户输入,atoi() 函数将字符串转为数字
int main3(void)
{
char a[] = {};
char b[] = {};
gets(a); // 获取第一次输入,a的对象只能是数组 ,不能转义(字符串转为数字),需要 使用专门的函数
gets(b);
int i1 = atoi(a); // 将字符串转化为一个整数
int i2 = atoi(b);
printf("%d\n",i1+i2); return ;
} // fgets()函数用法
int main4(void)
{
char c[] = {};
fgets(c,sizeof(c),stdin);//第一个参数是char的数组,第二个参数是数组的大小,单位字节,第三个参数代表标准输入。
// 输入: hello world
printf("%s\n",c);// 输出:hello wor --> 它把字符串尾的 0 也包括在内了,fgets()会自动截断,防止溢出,所以很安全
// 调用fgets()的时候,只要能保证第二个参数小于数组的实际大小,就可以避免缓冲区溢出的问题。
return ;
} // puts() 函数自动会在输出完成后打印一个'\n'出来
int main5(void)
{
char d[] = {};
gets(d);
printf("------\n");
puts(d); //自动输出,附带换行
return ;
} // fputs()函数,是puts的文件操作版
int main(void)
{
char e[] = {};
fgets(e,sizeof(e),stdin); // hello world mylove
printf("----------\n");
fputs(e,stdout); // hello world mylove
return ;
}

  6、getchar函数
    char a ,b;
    a = getchar();//得到用户键盘的按键对应的ASCII码值
    getchar() //获取回车
    b = getchar();//得到用户键盘的按键对应的ASCII码值
    printf("a+b=%d",(a-'0')+(b-'0')); //得到对应的值
  7、左值:表示可以被更改的数据对象。
    右值:能赋给左值的量。

6、运算符

  + - * / % += -= *= /= %=
  a+=1 <-> a++ //自加1 ++(后缀)从左到右;++(前缀)从右到左
  a-=1 <-> a-- //自减1
  例如:
    int a,i;
    i = 3;
    a = ++i; //a=4
    //a = i++; // a=3
  总结:i++先计算表达式的值;++i先自身++,再计算表达式的值。
  例如:
    int i = 6;
    int a = i++ + ++i;
    printf("%d\t%d",a,i); // 14   8
  分析:实际分以下三步
    i = i+1;
    int a = i+i;
    i = i+1;

7、逗号表达式

  int a,b,c;
  a = 1;
  b = 2;
  c = (a=b,a+b) //先算括号内逗号左边的,再算逗号后边的,表达式取逗号右边的值
  printf("%d",c) //4

8、空语句,只有一个 ; 号表示

  强制类型转换
  double f = 3/2; //c语言两个整数相除的结果自动转化为一个整数
  double d = (double)3/2; //(double)3将整数3强制转化为double型
  printf("%f\t%f",f,d); // 1.000000 1.500000

9、关系运算(从左到右)

  > < >= <= 为一类,优先级相同
  == != 为一类,优先级相同,上一类的优先级高于这一类。

10、逻辑运算符(从左到右) 

  与(&&) 一假则假
  或(||) 一真则真
  非(!) 真变假,假变真

11、int main() 在c里面,代表这个函数可以有参数,也可以没有参数

  int main(void) 明确表示没有参数

12、if..else(if、if...else 、 if...else if...else if...else..)

13、switch 多重选择 

  int main()
  {
    int i = 1;
    switch(i)
    {
    case 0:
      printf("i = 0\n")
      break
    case 1:
      printf("i = 1\n")
      break
    case 2:
      printf("i = 2\n")
      break
    case 3:
      printf("i = 3\n")
      break
    default: # 以上情况都不满足时执行
      printf("error\n")
    }
  }
  说明:不加break时,上述程序会执行case1、case2、case3,输出i=1,i=2,i=3
  加break后,只会执行case1,输出i=1(加reak才是正确用法)

14、if 和 switch 的比较: 

  当条件很复杂,分支中包含&&、||、!等时,用if语句
  当条件很简单,但分支很多,适合用switch语句。

15、条件运算符 ?  

  int c = (a>b) ? a:b
  先求?左边的表达式值,如果表达式成立,冒号左边的值为整个表达式的值,反之为冒号右边的值

16、goto语句与标号  

  无条件跳转goto,不建议使用,使代码可读性变差。

17、while  

  while(条件) 条件为真时执行循环,条件为假,退出循环。
  while(1) //死循环
  {
  printf('hello');
  }

18、continue 和 break 

  continue会导致循环语句直接回到循环的开始(终止当前循环,继续下一次循环)。
  break 终止当前循环,退出循环。

19、do...while循环  

  do{

  复合语句;

  }while(条件); //分号一定不能少
  do...while和while的区别:do...while中的复合语句至少执行一次,而while语句中复合语句可能一次都不执行。

20、for循环 

  for(i = 0;i<10;i++)
  {
    语句;
  }
  //i=0只执行一次,就是第一次for循环,此时不执行i++.
  for(;;) // 死循环 for(;1;) 死循环 for(;0;) 不执行
  {
    printf('hello');
  }

  实例:打印三角形 

    #include<stdio.h>
int main(void)
{
int i,j; for(i=;i<;i++) //行数
{
for(j=;j<-i;j++) //空格
{
printf(" ");
}
for(j=;j<(*i-);j++) // *
{
printf("*");
}
printf("\n");
} return ;
}

   扩展:打印倒三角形,打印钻石

C语言语法目录二的更多相关文章

  1. R语言语法基础二

    R语言语法基础二 重塑数据 增加行和列 # 创建向量 city = c("Tampa","Seattle","Hartford"," ...

  2. c语言语法目录一

    1.#include<stdio.h> include 是要告诉编译器,包含一个头文件 在c语言中,任何库函数调用都需要提前包含头文件 <头文件> 代表让c语言编译器去系统目录 ...

  3. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  4. PL真有意思(二):程序设计语言语法

    前言 虽然标题是程序语言的语法,但是讲的是对词法和语法的解析,其实关于这个前面那个写编译器系列的描述会更清楚,有关语言语法的部分应该是穿插在整个设计当中的,也看语言设计者的心情了 和英语汉语这些自然语 ...

  5. JS基础语法(二)

    目录 JavaScript基础语法(二) 八. 函数 1. 函数的概念 2. 函数的使用 声明函数 调用函数 3. 函数的封装 4. 函数的参数 函数的参数匹配问题 5. 函数返回值 6. argum ...

  6. Go语言语法汇总(转)

    Go语言语法汇总 分类: 技术2013-09-16 14:21 3007人阅读 评论(0) 收藏 举报 go语言golang并发语法   目录(?)[+]   最近看了看GoLang,把Go语言的语法 ...

  7. 黑马程序员_ C语言基础(二)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概览 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述):   1.Hello W ...

  8. 苹果新的编程语言 Swift 语言进阶(二)--基本数据类型

    一  .   常量和变量 Swift语言 对常量和变量的声明进行了明确的区分 Swift语言的常量类型比C 语言的constants类型更加强大,语义更加明确. 常量和变量的区别是常量在设置或初始化后 ...

  9. Ruby语法基础(二)

    Ruby语法基础(二) 继续ruby的学习,这次主要把目光放到运算符,条件判断,循环,方法,以及其他ruby特有的基本概念上 运算符 算术运算符:+,-,/,%,**,值的注意的是,ruby中一切皆为 ...

随机推荐

  1. jQuery中this与$(this)的区别

    起初以为this和$(this)就是一模子刻出来.但是我在阅读时,和coding时发现,总不是一回事,这里就谈谈this与$(this)的区别. jQuery中this与$(this)的区别 $(&q ...

  2. cannot be read or is not a valid ZIP file

    在eclipse下创建 maven 项目,运行 flowable 6.1.2 配置maven之后,下载相应的依赖库. 发现报错: Archive for required library: '/Use ...

  3. Intellij IDEA带参数启动Springboot注意事项

    问题 不同版本的spring-boot-maven-plugin的jvm参数配置有所不同,同时与通过main方法启动springboot程序传递参数也有所不同. 分析 在运行main方法时,可以通过j ...

  4. hihocoder-1483区间价值 (二分+尺取法)

    题目链接: 区间价值 给定n个数A1...An,小Ho想了解AL..AR中有多少对元素值相同.小Ho把这个数目定义为区间[L,R]的价值,用v[L,R]表示. 例如1 1 1 2 2这五个数所组成的区 ...

  5. (四)java基本语法

    关键字 被java赋予了特殊意义的单词: class,new,private,protected,public,static,final,abstract,interface,this,super,I ...

  6. Android UI之LinearLayout详解

    ※※※摘自http://www.cnblogs.com/salam/archive/2010/10/20/1856793.html LinearLayout是线性布局控件,它包含的子控件将以横向或竖向 ...

  7. bzoj 4465 游戏中的学问

    Written with StackEdit. Description 大家应该都见过很多人手拉手围着篝火跳舞的场景吧?一般情况下,大家手 拉手跳舞总是会围成一个大圈,每个人的左手拉着旁边朋友的右手, ...

  8. LA4992 Jungle Post

    题意 PDF 分析 炸连续的比炸单独的好. 二分答案,每种炸连续的构成一些半平面,判断半平面交是否为空. 时间复杂度\(O(T n \log^2)\) 代码 这题卡常,排序的时候必须事先算出幅角,不然 ...

  9. Spring Aware接口---BeanNameAware BeanFactoryAware ApplicationContextAware

    前言 对于应用程序来说,应该尽量减少对spring api的耦合程度,然后有时候为了运用spring提供的一些功能,有必要让bean了解spring容器对其管理的细节信息,如让bean知道在容器中是以 ...

  10. UNION和UNION ALL关键字

    UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同. 1.对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,Union All不会去除重复 ...