C语言入门基础day3

1 逗号运算符

逗号运算符将两个表达式连接起来

表达式1, 表达式2

逗号运算符的结合性是“从左至右”:先计算表达式1,后计算表达式2

a = 3;
b = a*2, a+4;
结果: b=7

整个表达式最终的值是表达式2的值

2 条件运算符

条件运算符是通过问号"?“和冒号”:"连接的表达式

表达式1 ? 表达式2 : 表达式3

执行逻辑:

如果表达式1的结果为真,
则整个表达式的结果为表达式2的结果,
否则为表达式3的结果

printf("%d\n", 3>4?3:4);
结果:打印输出4

3 程序结构

C语言支持三种程序运行结构:顺序结构、选择结构、循环结构,概念如下:

顺序结构:按照语句编写的顺序上到下逐句执行。

选择结构:也叫分支结构,依据是否满足条件,有选择的
执行相应功能。

循环结构:依据条件是否满足,重复多次执行某段代码

3.1 选择结构

3.1.1 if语句

语法:

if (表达式)
{
语句
}

执行逻辑:如果表达式的值为真,则执行其后的语句, 否则不执行该语句
在这里插入图片描述

案例:
#include <sdtdio.h>
int main()
{
  int a;
  scanf("%d", &a);
  if (a > 10)
 {
    printf("a > 10 \n");
 }
  return 0;
}

3.1.2 if…else语句语法

语法:

if (表达式)
{
  语句1
}
else
{
  语句2
}

执行逻辑:
如果表达式1成立(表达式1的结果为逻辑真),
则执行语句1,否则执行语句2
在这里插入图片描述

#include <stdio.h>
int main()
{
  int a;
  printf("Input a Integer Number: ");
  scanf("%d", &a);
  if (a > 10)
  {
    printf("a > 10 \n");
  }
  else
  {
    printf("a <= 10 \n");
  }
  return 0;
}

练习:

//在键盘上输入三个整数,输出最大值
int main()
{
	int i,j,k,max;
	scanf("%d%d%d",&i,&j,&k);
	max=i;
	if(max<j)
    {
        max=j;
    }
    if(max<k)
    {
        max=k;
    }
    printf("%d",max);

}

3.1.3 if…else if …else 语句语法

if (表达式1)
{
  语句1
}
else if (表达式2)
{
  语句2
  }
...
else if(表达式n)
{
  语句n-1
}
else
{
  语句n
}

执行逻辑:从“表达式1”开始,从上往下判断,直到某个表达式的结果为逻辑真,则执行对应的语句,并且结束整个选择
结构,如果所有的表达式结果为逻辑假,则执行else逻辑对应的“语句n”
在这里插入图片描述

案例:
#include <stdio.h>
int main()
{
  unsigned int a;
  scanf("%u", &a);
if (a < 10)
  {
    printf("个位\n");
  }
  else if (a < 100)
  {
    printf("十位\n");
    }
  else if (a < 1000)
  {
    printf("百位\n");
  }
  else
  {
    printf("超过了4位数\n");
  }
  return 0;
}

3.1.4 switch语句

语法:
switch (表达式)
{
  case 常量表达式1: 语句1;break;
  case 常量表达式2: 语句2;break;
 ...
  case 常量表达式n-1: 语句n-1;break;
  default : 语句n
}

执行逻辑:
计算"表达式"的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。
注意:每个语句后面都有break

案例:
#include <stdio.h>
int main()
{
  int day;
  printf("Input weekday number: ");
  scanf("%d", &day);
  switch (day)
  {
    case 1:printf("星期一\n"); break;
    case 2:printf("星期二\n"); break;
    case 3:printf("星期三\n"); break;
    case 4:printf("星期四\n"); break;
    case 5:printf("星期五\n"); break;
    case 6:printf("星期六\n"); break;
    case 7:printf("星期日\n"); break;
    default:printf("I don't know \n");
  }
  return 0;
}

总结

  1. switch结构的表达式必须为“常量表达式”
  2. switch结构可以用if … else if … else 结构来实现

3.1.5 选择结构的嵌套

语法:

if (表达式1)
{
	if (表达式2)
  {
    语句1
  }
  else
  {
    语句2
  }
}
else //else if ()
{
  if (表达式3)
  {
    语句3
  }
  else
  {
    语句4
  }
}

执行逻辑

如果表达式1结果为逻辑真,则判断表达式2的结果,如果结果为真则执行语句1,否则执行语句2

如果表达式1结果为逻辑假,则判断表达式3的结果,如果结果为真则执行语句3,否则执行语句4
在这里插入图片描述

案例:
if (体育老师生病了)
{
  if (语文老师没课)
  {
    上语文课
  }
  else
  {
    上自习
  }
}
else
{
  上体育课程
}

3.2 循环结构

3.2.1 while语句

语法:

while (表达式)
{
  语句
}

执行逻辑:如果表达式的结果为逻辑假则执行循环体语句,直到表达式的结果为假
在这里插入图片描述

案例:
#include <stdio.h>
int main()
{
  int x = 10;
  while (x != 0)
  {
    printf("%d\n", x);
    x--;
  }
  return 0;
}

练习:通过while循环计算1~100的和
在这里插入图片描述

代码:
#include<stdio.h>
int main()
{
    int i=1,sum=0;
    while(i<=100)
    {
        sum+=i;
        i++;
    }
    printf("%d",sum);
    return 0;
}

3.2.2 do~while 语句语法

语法

do{
  语句
}while (表达式);

执行逻辑:这个循环与 while 循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此, do-while 循环至少要执行一次
循环语句。其执行过程可用下图表示
在这里插入图片描述

案例:
#include <stdio.h>
int main()
{
  int sum = 0;
  int i = 1;
  do
  {
    sum += i;
    i++;
  }
  while (i <= 100);
  return 0;
}

总结:do~ while和while的区别在于:do~while至少会执行一次循环体语句

3.2.3 for语句

语法:

for(表达式1; 表达式2; 表达式3)
{
  语句
}

执行逻辑

1. 先求解表达式12. 求解表达式2,若其值为真(0),则执行for语句中指定的内嵌语句,然后执行下面第3)步;若其值为假(O),则结
束循环,转到第5)步。

4. 求解表达式35. 转回上面第2)步继续执行。

6. 循环结束,执行for语句下面的一个语句

在这里插入图片描述

案例:
#include <stdio.h>
int main()
{
  int sum = 0;
  int i;
  for (i = 1; i <= 100; i++)
  {
    sum += i;
  }
  return 0;
}

练习:

//求5的阶乘
#include<stdio.h>
int main()
{
    int i=1,sum=1;
    for(i=1;i<=5;i++)
    {
        sum*=i;
    }
    printf("%d",sum);
}

//输出100~999之间的所有的水仙花数(水仙花数是一个三
//位数满足如下条件:水仙花数 = 个位的立方+十位的立方
//+百位的立方)
#include<stdio.h>
int main()
{
    int i=100,g=0,s=0,b=0;
    for(i=100;i<999;i++)
    {
        b=i/100;
        s=i%100/10;
        g=i%10;
        if(i==g*g*g+s*s*s+b*b*b)
        {
            printf("%d\n",i);
        }
    } 
}
//在键盘上输入两个数字,分别存储到a和n中,自动计算
//表达式 a + aa + aaa + ...+ a...a(n个a)的结果, 例如,在键盘上
//输入 3 和5 ,表达式为: 3+33+333+3333+33333
#include <stdio.h>
int main() {
    int a,n;
    int i=0,b=10,c=0;
    printf("请输入两个数:");
    scanf("%d%d",&a,&n);
    for(i=0;i<n;i++)
    {
        c=c*b+a;
        printf("%d\n",c);
    }
    return 0;
}

3.2.4 循环的嵌套

所谓的循环结构就是“循环逻辑中有循环逻辑”

#include<stdio.h> 
int main()
{
  int i,j;
  for(i=1;i<=9;i++)
  {
    for(j=1;j<=i;j++)
    {
      printf("%d*%d=%d\t",i,j,i*j);
    }
  printf("\n");
  }
return 0;
}

案例:

//求:2~100之间的所有的质数
#include <stdio.h>

int main() {
    int i, j;
    for (i = 2; i <= 100; i++) 
    {
        int flag = 1; // 假设 i 是质数
        for (j = 2; j < i; j++)
        {
            if (i % j == 0) 
            {
                flag = 0; // 如果能整除,则不是质数
                break;
            }
        }
        if (flag) 
        {
            printf("%d\n", i); // 只有在确定是质数的情况下才输出 i
        }
    }
    return 0;
}

3.3 流程控制

3.3.1break语句

break用于switch中时,可使程序跳出switch,如果没有break语句,
则会继续执行下一个case逻辑中的语句(不论case后面的表示
式结果与switch后的表达式结果是否相等),直到遇到break
才会跳出switch

案例:

switch(x)
{
  case 1:printf("1\n");break;
  case 2:printf("2\n");
  case 3:printf("3\n");break;
  case 4:printf("4\n");break;
}
结果:当x=2,输出 2 3

练习:

//使用switch语句实现在键盘上输入一个月份,然后
//输出该月份对应的天数
#include<stdio.h>
int main()
{
    int month;
    scanf(" %d",&month);
    switch (month)
    {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        printf("该月有31天\n");
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        printf("该月有30天\n");
        break;
    case 2:
        printf("该月有28/29天\n");
        break;
    default:
        break;
    }
}

break在循环语句中的使用

break语句用于do-whileforwhile循环语句中时,
可使程序终止循环而执行循环后面的语句,
通常break语句总是与if语句联在一起。即满足条件时便跳出循环

案例:

int m, n;
for (m = 0; m < 5; m++)
{
  for (n = 0; n < 5; n++)
  {
    if (n == 3)
    break;
    printf("%d\n", n);
  }
}

3.3.2continue语句

continue语句用于循环结构中,作用是结束本次循环,继续下次循环
案例:

int m, n;
for (m = 0; m < 10; m++)
{
  for (n = 0; n < 10; n++)
  {
    if (n == 3)
    	continue;
    printf("%d\n", n);  //if语句成立,该条语句不执行
  }
}

当执行到continue语句时,此次循环结构中continue语句后的其他所有语句都不会被执行到。

4 总结

  1. 输入输出函数,是c语言中为数不多的形参列表可变的函数,在实际工作中尽量不要自己定义形参列表可变的函数。输入函数为阻塞性函数:系统会停留在输入函数处,直到用户输入数据或者程序结束。
  2. 通过运算符和操作数的结合形成表达式。运算符有不同的优先级决定操作数的计算顺序,同优先级的运算符计算顺序由结合性决定,
  3. 运算符的优先级不用死记硬背,在实际工作中使用的多了就熟练了。
  4. 在使用选择结构的程序时注意要把最特殊的判断放在前面,后面的放在else里面就行了。这样可以更加快速的判断,去掉不必要的时间。
  • 37
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值