学习C的好日子--语句(判断+循环)

一.》语句

条件判断语句也叫分支语句:if语句、switch语句;
循环执行语句:do while语句、while语句、for语句;
转向语句:break语句、goto语句、continue语句、return语句。

二.》C-分支语句(选择结构)判断

在C 语言中 把任何非零非空的值假定为 true,把null 假定为 false

在高中的知识点 用框表示的示意图

  1. 单独的if构成的语句

1.1-if 语句

一个 if 语句 由一个布尔表达式后跟一个或多个语句组成


1.2-代码

我们经常写的 三数比大小
#include <stdio.h>
int main()
{
    int a,b,c,t;    /*定义4个基本整型变量a、b、c、t*/
    printf("Please input a,b,c:\n");    /*双引号内的普通字符原样输出并换行*/
    scanf("%d,%d,%d",&a,&b,&c);    /*输入任意3个数*/
    if(a>b)    /*如果a大于b,借助中间变量t实现a与b值的互换*/
    {
        t = a;
        a = b;
        b = t;
    }
    if(a>c)    /*如果a大于c,借助中间变景t实现a与c值的互换*/
    {
        t = a;
        a = c;
        c = t;
    }
    if(b>c)    /*如果b大于c,借助中间变量t实现b与c值的互换*/
    {
        t = b;
        b = c;
        c = t;
    }
    printf("The order of the number is:\n");
    printf("%d,%d,%d",a,b,c);    /*输出函数顺序输出a、b、c的值*/
    return 0;
}
如果 条件满足--》 过一遍if里的代码块内容(有printf就打印,有什么工作就做前提:条件满足

#include <stdio.h>
int main (){
   int a = 15;
   if( a < 56 ){ /* 如果条件为真,则输出下面的语句 */
       printf("a 小于 56\n" );//a 小于 56
   }
   printf("a 的值是 %d\n", a);//a 的值是 15
   return 0;
}


  1. if..else

一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。

闰年判断

#include<stdio.h>
int main(){
    int year;
    scanf("%d",&year);
    //是真的返回1
    //不是    返回0
    year=(year%100==0)?(year%400==0?1:0):(year%4==0?1:0);
    printf("%d",year);
    if(year){
        printf("是闰年");
    }
    else if(!year){
        printf("不是闰年");
    }
}

1. 其中 if(year){}里面不写成year==1的原因是默认为“1”。在计算机中1就是真就进入

2.三目运算符 其实是if..else的简写形式

Exp1 ? Exp2 : Exp3;
? 表达式的值是由 Exp1 决定的。如果 Exp1 为真,则计算 Exp2 的值,结果即为整个表达式的值。如果 Exp1 为假,则计算 Exp3 的值,结果即为整个表达式的值。

3.C 嵌套 if 语句

if 或 else if 语句内使用另一个 if 或 else if 语句

示意图如下

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if (a == 1123)
        if (b == 23333)
            printf("hehe\n");
    else
        printf("haha\n");
    return 0;
}

值得注意的是:else 会和最近的那个if 自动匹配


总结if注意事项:if 关键字之后均为表达式。通常是逻辑表达式或关系表达式,也可以是一个变量

4.switch

一个 switch 语句允许测试一个变量等于多个值时的情况

下方的示意图 和上面if的嵌套的图相似

switch 语句必须遵循下面的规则:
· switch 语句中的 expression 是一个常量表达式,必须是一个整型或枚举类型。
· 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
· case constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
· 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
· 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
· 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
· 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。
 case '+':
case '-':
字符类型case说没有问题的

4.1-需要break的情况

利用switch我们可以做一下蓝桥杯里的一道题

题目链接:日期格式 - 蓝桥云课 (lanqiao.cn)

解答:

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int a,b;
  scanf("%d %d",&a,&b);
  switch(a){
    case 1:printf("Jan");break;
    case 2:printf("Feb");break;
    case 3:printf("Mar");break;
    case 4:printf("Apr");break;
    case 5:printf("May");break;
    case 6:printf("Jun");break;
    case 7:printf("Jul");break;
    case 8:printf("Aug");break;
    case 9:printf("Sep");break;
    case 10:printf("Oct");break;
    case 11:printf("Nov");break;
    case 12:printf("Dec");break;
  }
  printf("%02d",b);
  return 0;
}
/*C语言中输出格式%m.nf的意思

m:表示宽度
.n:表示精度*/

4.2-不需要break的

#include <stdio.h>
 
int main ()
{
   /* 局部变量定义 */
   char grade = 'B';
 
   switch(grade)
   {
   case 'A' :
      printf("很棒!\n" );
      break;
   case 'B' :
   case 'C' :
      printf("做得好\n" );
      break;
   case 'D' :
      printf("您通过了\n" );
      break;
   case 'F' :
      printf("最好再试一下\n" );
      break;
   default :
      printf("无效的成绩\n" );
   }
   printf("您的成绩是 %c\n", grade );
 
   return 0;
}

//default子句放在语句项的最后一行,是可以省略break的

4.3-注意

  • 当我们输入了一个switch语句中没有的常量值,需要default

  • case后跟的是冒号:

  • 没有break的case是会进入下一个case

三.》C-循环

循环(程序中处理过程)_百度百科 (baidu.com)

循环是程序设计语言中反复执行某些代码的一种计算机处理过程,常见的有按照次数循环和按照条件循环。

  1. while循环

while是计算机的一种基本循环模式。当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环。while语句的一般表达式为:while(表达式){循环体}。

while(计算机循环语句)_百度百科 (baidu.com)

只要给定的条件为真,C 语言中的 while 循环语句会重复执行一个目标语句。

//看看有几位数
#include<stdio.h>
int main(){

//可以先将count=1,就可以少一部分
    int x,count=0;
    scanf("%d",&x);

    //0也是一位数
    count++;
    x/=10;

   while(x>0){
    count++;
    x/=10;}
    printf("%d",count);
    
}

1.1-公约数求法

01》

#include <stdio.h>
int main(){
    int m=24;
    int n=18;
    int r;
    while(m%n){
        //也可以在while直接赋值给r
        r=m%n;
        m=n;
        n=r;
    }printf("%d",n);
}

02》

#include <stdio.h>
int main()
{
    int n1, n2;
    
    printf("输入两个数,以空格分隔: ");
    scanf("%d %d",&n1,&n2);
 
    while(n1!=n2)
    {
        if(n1 > n2)
            n1 -= n2;
        else
            n2 -= n1;
    }
    printf("GCD = %d",n1);
 
    return 0;
}

03》通过for循环的 for可以是while的简写形式

#include <stdio.h>
 
int main()
{
    int n1, n2, i, gcd;
 
    printf("输入两个正整数,以空格分隔: ");
    scanf("%d %d", &n1, &n2);
 
    for(i=1; i <= n1 && i <= n2; ++i)
    {
        // 判断 i 是否为最大公约数
        if(n1%i==0 && n2%i==0)
            gcd = i;
    }
 
    printf("%d 和 %d 的最大公约数是 %d", n1, n2, gcd);
 
    return 0;
}

04》递归

#include <stdio.h>
int hcf(int n1, int n2);
int main()
{
   int n1, n2;
   printf("输入两个正整数: ");
   scanf("%d %d", &n1, &n2);
 
   printf("%d 和 %d 的最大公约数为 %d", n1, n2, hcf(n1,n2));
   return 0;
}
 
int hcf(int n1, int n2)
{
    if (n2 != 0)
       return hcf(n2, n1%n2);
    else 
       return n1;

1.2-注意代码块

执行’{}‘之中的

while得给一个条件终止循环 才能结束

如:EOF

#include <stdio.h>
int main(){
    //EOF---END OF  FILE 本质是-1
    char ch;
    while((ch=getchar())!=EOF){
    putchar(ch);
    }
}

  1. for循环

for循环是编程语言中一种循环语句,而循环语句循环体及循环的判定条件两部分组成,其表达式为:for(单次表达式;条件表达式;末尾循环体){中间循环体;}

2.1-C 语言中 for 循环的语法:

for ( init; condition; increment ){   statement(s);}
//   初始条件 ,循环条件,   循环动作

2.2-注意事项

1.for循环中的变量可以是一个也可以是多个。
2.for循环中语句可以为语句体, 语句体外加大括号"{}"将参加循环的语句括起来。
3. for循环中的"单次表达式"、"条件表达式"和"循环体语句"都是选择项, 即可以缺省成只剩下“;”的空语句,。

2.3-我们的阶乘写法:

//阶乘  n!   而for=对于
//for(count=10;count>0;count--)


//求和应该让初始化变量为0
// 积        1
#include<stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    int fact=1;
    
    int i=1;
 // for(i=2;i<=n;i++){
    for(i=1;i<=n;i++){//初始条件,循环条件,循环动作
        fact*=i;
        printf("%d\t",fact);
    }
    printf("%d!=%d\n",n,fact);
}

来源于:技能树https://edu.csdn.net/skill/c/c-bc001e483b8c41a8a7ccc369393d636a?category=112&typeId=18467

(63条消息) 循环语句-语句与控制流-CSDNC技能树

2.4例子--素数

素数(两种办法)开平方sqrt +试除法 :

sqrt原型:来源:<math.h>

double sqrt( double x );
//The sqrt function returns the square-root of x. If x is negative, sqrt returns an indefinite (same as a quiet NaN). 

素数除了2以外都是奇数那么什么控制好i的起始量不是2那么在循环条件就i+=2;更加的快速

素数代码如下
#include <stdio.h>
#include <math.h>
int main(){
    //i=a*b    那么a和b里至少有一个数字<=开平方i
    //sqrt--开平方的数学库函数
    int i=0,count=0;
    for(i=101;i<=200;i+=2){
        int j=0;
        for(j=2;j<=sqrt(i);j++){
            if(i%j==0){
                break;
            }
        }
        if(j>sqrt(i)){
            count++;
            printf("%d\n",i);
        }
    }
    printf("%d个·",count);
   


/*//     试除法 
int i=0,count=0;
for(i=100;i<=200;i++){
       产生2->i-1如  问13是不是  则在2-12中找
    int j=0;
    for(j=2;j<i;j++){
        if(i%j==0){
            break;
        }
    }
    if(j==i){
        count++;
        printf("%d",i);
    }
}
printf("\n count=%d ",coount);
*/

  1. do-while循环

3.1- C 语言中,do...while 循环是在循环的尾部检查它的条件。

do...while 循环与 while 循环类似,但是 do...while 循环会确保至少执行一次循环。

然后在while()内检查条件是否为真,如果条件为真的话,就会重复do...while这个循环,直至while()为假。

//do-while 循环语法 格式:
do{
循环体;
}
while (条件表达); //条件表达,可以引用外传感器返回值。

3.2-接下来有一个while和 do-while的对比算平均数的代码

#include<stdio.h>
int main(){
    int number;
    int sum=0,count=0;
 
 /*do{
    scanf("%d",&number);
    if(number!=-1){
        sum+=number;
        count++;}
    }while(number!=-1);
    */
    
    scanf("%d",&number);
    while(number!=-1){
        sum+=number;
        count++;
        scanf("%d",&number);
    }

    printf("%f",1.0*sum/count);

    return 0;
}

3.3-循环输出:

#include <stdio.h>
int main (){
   /* 局部变量定义 */
   int a = 10;
   /* do 循环执行,在条件被测试之前至少执行一次 */
   do{
       printf("a 的值: %d\n", a);
       a = a + 1;
   }while( a < 20 );
   return 0;
}
//结果: 10~19挨个换行输出

四.》C-循环控制语句

BREAK; CONTINUE ;GOTO

  1. BREAK

以下两种用法:
1. break 语句出现在一个循环内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句。
它可用于终止 switch 语句中的一个 case。
2. 如果您使用的是嵌套循环(即一个循环内嵌套另一个循环),break 语句会停止执行最内层的循环,然后开始执行该块之后的下一行代码。
#include <stdio.h>
 
int main ()
{
   /* 局部变量定义 */
   int a = 10;

   /* while 循环执行 */
   while( a < 20 )
   {
      printf("a 的值: %d\n", a);
      a++;
      if( a > 15)
      {
         /* 使用 break 语句终止循环 */
          break;
      }
   }
 
   return 0;
}

2.continue

continue语句并不跳出循环,跳过本次循环continue语句只能用于循环体中。

#include <stdio.h>
 
int main ()
{
   /* 局部变量定义 */
   int a = 10;

   /* do 循环执行 */
   do
   {
      if( a == 15)
      {
         /* 跳过迭代 */
         a = a + 1;
         continue;
      }
      printf("a 的值: %d\n", a);
      a++;
     
   }while( a < 20 );
 
   return 0;
}
//【10,15)U(15,19】

3.goto

goto 语句的语法:

goto label;

..

.

label: statement;

//goto out 和out 直接跳出(多重循环)

#include<stdio.h>
int main(){
    int x;
    int one,two,five;
    
    scanf("%d",&x);
    for(one=0;one<=x*10;one++){
        for(two=0;two<=x*10/2;two++){
            for(five=0;five<=x*10/5;five++){
                if(one+two*2+five*5==x*10){
                
               //goto out; }
            }printf("可以用%d个1角,%d个2角,%d个5角得到%d元\n",one,two,five,x);
        }
    }
  //  out:
    //return 0;
}}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你会魔法吗✧(≖ ◡ ≖✿)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值