C语言集训-邓晓宇-第三次作业

117 阅读3分钟
  • 笔记部分

1. 运算符

  1. 算术运算符 + - * /(除)%(取余数)
  2. 关系运算符 > >= < <= !=(不等于) ==(等于)
  3. 逻辑运算符 !(非)&&(并)||(或)
  4. 赋值运算符 = += *= /= -= 优先级:算术>关系>逻辑 >赋值

特别之处:除法的运算结果与运算对象类型有关

1. int相除商为int 商有小数则截取小数部分
2. 除数与被除数有一个为浮点型数据,则商也为浮点型,不截取小数部分
3. 取余%的运算对象必须是整数,结果是整除后的余数,符号与被除数相同

# include <stdio.h>
int main(void)
{
printf("%d\n", 13%-3);
return 0;
}

image.png

逻辑运算符的应用 真用1表示
假用0表示

# include <stdio.h>
int main(void)
{
  int i = 10;
  int k = 20;
  int m;
  m = (1>2) && (k=5) ;
  printf("m = %d, k = %d\n", m, k);
  return 0;
}

image.png

  1. ||:左边表达式为假时,右边不再执行
  2. &&:左边表达式为真时,右边不再执行

2.流程控制

1. 程序代码运行的顺序叫流程控制
2. 流程控制的分类

  1. 顺序执行 按一定顺序运行
  2. 选择执行 选择性运行代码
  3. 循环执行 多次执行

if

  1. if的最简单用法
# include <stdio.h>
int main(void)
{
 if(4 > 2)
 printf("aaaa\n");
 return 0;
}

image.png

为零不运行 为真运行 为假不运行


# include <stdio.h>
int main(void)
{
   if(4 > 2)
   printf("aaaa\n");
   if(0)
   printf("bbbb\n");
   if(0==0)
  printf("cccc\n");
   return 0;
}

image.png 2. if的范围问题
若为
if (表达式)
语句A;
语句B;
则A由if真假决定是否执行
B一定执行

image.png

# include <stdio.h>
int main(void)
{
  if(1> 2)
  printf("aaaa\n");
  printf("bbbb\n");
  return 0;
}

若为if (表达式)
{
语句A;
语句B;
}
则两者都由if真假决定是否执行 如图b执行 a不执行

image.png

# include <stdio.h>
int main(void)
{
   if(4> 2)
   
  {
    printf("aaaa\n");
   printf("bbbb\n");
   return 0;
  }
  
}

  1. if else的用法 若if真则运行a 否则运行b

image.png

#include <stdio.h>
int main(void)
{
   if(1>2)
   printf("aaaa\n");
   else
   printf("bbbb\n");
   return 0;
}
  1. if else if else的用法

image.png

# include <stdio.h>
int main(void)
{
  double delta = -1
  if (delta>0)
  printf("有不同的两解\n");
  else if (delta == 0)
  printf("有唯一的一个解\n");
  else  (delta<0)
  printf("无解\n");
   return 0;
  
  
}

注意:最后一个else后不加条件
4. 求分数的等级带代码

image.png 这个代码不知道为啥运行不出来


   #include <stdio.h>

int main(void)
{
    float score;

    printf("请输入考试成绩");
    scanf ("%f" , &score);

    if (score > 100)
    printf("这是做梦\n");
    else if (score>=90 && score<=100)
    printf("优秀\n");
    else if (score>=60 && score<90)
    printf("良好\n");
    else if (score>=0 && score<60)
    printf("不合格\n");
    else
    printf("分数过低\n");
    return 0;
}

循环

  1. for 的应用

image.png

#include <stdio.h>
int main(void)
{
    int i;
    int sum = 0;

    for(i = 1;i <10; i+=2)
        sum = sum + i;
    printf("sum = %d\n",sum);

    return 0;
}

for和if的合并应用

image.png

#include <stdio.h>
int main(void)
{
    int i;
    int sum = 0;
   for(i = 1;i <=10; ++i)
        if(i%3 == 0)
        sum = sum + i;
    printf("sum = %d\n",sum);
    return 0;
}

for的多次执行

image.png

#include <stdio.h>
int main(void)
{
    int i , j;
    for(i=0;i<3;++i)
        for(j=2;j<5;++j)
        printf("aaaa\n");
    printf("bbbb\n");    
    return 0;
}

3.自增自减

  1. 前自增 ++i 表达式加1后的值
  2. 后自增 i++ i加1前的值
  3. 自增使得代码更加精炼,自增的速度更快

image.png

#include <stdio.h>
int main(void)
{
    int i, j, k, m;
    i = j = 3;
    k = i++;
    m = ++j;
    printf("i = %d,j = %d,k = %d, m = %d\n", i, j, k, m);
    
    return 0;
}

注意点:

  1. 尽量屏蔽前自增和后自增的差别
  2. 自增的表达式最好不要作为一个更大的表达式的一个部分
  3. ++i和i++单独成一个语句 不要当成一个完整的复合语句来使用
  4. int m = i++ + ++i + i + i++这样写不正确

补充运算符

1.三目运算符 A?B:C
等价于if (A)
B;
else
C;

逗号表达式

(A,B,C,D)
从左向右执行 最终表达式是最后一项的值

image.png

#include <stdio.h>
int main(void)
{
    int i;
    i = (3,2,5,6);
    printf("%d\n",i);
    return 0;
}

while

  1. 执行顺序
    while (表达式)
    语句
  2. while与for的相互比较
    for(1;2;3)
    A;
    等价于1;
    while(2)
    {
    A; 3;
    }