苏嵌实训——day3(下)

简介: 苏嵌实训——day3(下)

2.3.2注意事项


switch后面的表达式是一个变量或者变量表达式
case只能是一个常量或者常量表达式,而且这个表达式不能是范围,每个常量表达式的值必须各不相同,否则将出现矛盾,
case后面如果有多条语句,不用加{}
switch语句中只能判断整形数据和字符型数据,不能是浮点型或者字符串
default后面可以不加break
break主要是为了结束switch语句,如果不加,从指定case语句之后一直向下执行所有语句块,直到遇到break为止。


三 循环语句


我们在写代码中,往往会出现有些代码可能会执行很多次的情况,那么为了简便书写,可以通过循环来实现,这样可读性,逻辑性都会更好


3.1 while循环


3.1.1 格式


while(表达式)
{
    语句块
}

注意事项:循环条件不能永远为真,必须要有循环结束的条件,如果永远循环,将其称之为死循环,例如:while(1);


3.1.2 循环的简单使用


#include <stdio.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
  /*
  while(1)
  {
  printf("helloworld\n");
  sleep(1);
  }*/
  int i = 5;
  while(i--)
  {
  printf("helloworld\n");
  }
  //程序员40W,房价200W,10%,如果不涨工资的情况下,不贷款,问多少年可以买房?
  int year = 0,sum = 0,price = 200;
  while(1)
  {
  year++;
  sum += 40;
  price += price*0.1;
  if(sum >= price)
  {
    printf("第%d年买房\n",year);
    break;
  }
  printf("第%d年买不起房\n",year);
  }
  return 0;
}


3.1.3 do…while…使用


#include <stdio.h>
int main(int argc, char *argv[])
{
  //do..while循环会先执行一次,然后再判断,所以不管表达式是否为假,都会先执行一次
  do
  {
  printf("hello world!\n");
  }while(0);
  return 0;
}


3.2 for循环


3.2.1 格式


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

执行顺序:先执行表达式1,执行完毕后执行表达式2,如果表达式2为真,则执行语句块,执行完语句块后,接着执行表达式3,然后再

执行表达式2,如果表达式2为真,则执行语句块,以此类推,直到表达式2为假时,循环结束


注意:for循环和while循环是通用的


int i = 0;
while(i < 10)
{
  i++;   
}
for(i = 0; i < 10;i++)
{
...
}


3.2.2 for循环的注意事项


for(表达式1;表达式2;表达式3)
{
    语句块
}
1.表达式1:主要对要计数的变量赋初值,整个循环只执行一次,也可以省略不写,
2.不管省略哪个表达式,分号不能丢
3.表达式2主要就是判断条件,条件为真执行语句块,条件为假循环结束,如果省略表达式2不写,会造成死循环
for(i = 0 ;;i++)
4.表达式3就是为了改变计数变量的值从而影响循环的次数,如果省略表达式3不写,会造成死循环,当然可以把表达式三放在语句块中
也是可以的
死循环:for(;;);


3.2.3 for循环的使用


#include <stdio.h>
int main(int argc, const char *argv[])
{
  int i;
  /*
  for(i = 0,printf("i = %d\n",i);i < 5,printf("i = %d\n",i);i++,printf("i = %d\n",i))
  {
  printf("hello world!\n");
  }*/
  int j;
  for(j = 0 ;j < 3;j++)
  {
  for(i = 0 ; i < 5;i++)
  {
    if(1 == i)
    {
    continue;  //结束本次循环,继续下一次循环
    //  break;     //结束这一层循环
    }
    printf("hello world! %d\n",i);
  }
  printf("hello nanjing\n");
  }
  return 0;
}


3.2.4 打印100-1000以内的所有的水仙花数


水仙花数:是指一个三位数的每一位的立方和等于这个数,则这个数称之为水仙花数

num = 个位的立方+十位的立方+百位数的立方


四 辅助控制关键词


4.1 goto


goto主要用于在一个函数内进行跳转,可以跳转到当前函数的任意位置

注意:不建议过多使用,可读性,逻辑性会变差


#include <stdio.h>
int main(int argc, const char *argv[])
{
#if 0
  int num = 100;
  printf("111111111111111111111111\n");
  goto NEXT;
  printf("hello world!\n");
  num = 888;
  printf("hello nanjing");
NEXT:
  printf("hello beijing\n");
  printf("num = %d\n",num);
  printf("222222222222222222222222222");
#endif
  int i = 0;
TEMP:
  printf("hello world\n");
  i++;
  if(i <= 9)
  {
  goto TEMP;
  }
  return 0;
}


4.2 break;


break在switch语句中主要用于结束指定的语句块

break主要在循环语句中使用,功能是结束本次循环

注意:break除了在switch语句中以外,其它地方只能在循环中使用


4.3 continue


continue只能在循环中使用,表示退出本次循环,下次循环接着运行


4.4 return


#include <stdio.h>
int main(int argc, const char *argv[])
{
  int i;
  for(i = 1;i <= 10;i++)
  {
  if(i == 5)
  {
    return i;
  }
  printf("i = %d\n",i);
  }
  printf("hello world!\n");
  return 0;
}


作业


练习:两个数运算

输入两个数,再输入运算符(加减乘除),实现两个数字之间的运算


#include <stdio.h>
int main()
{
  int num_1,num_2,result;
  char run_num; 
  printf("输入需要运算的两个数,并用逗号隔开:\n"); 
  scanf("%d,%d",&num_1,&num_2);
  printf("输入运算符,如*,/,+,-\n");
  getchar();
  scanf("%c",&run_num);
  switch(run_num)
  {
  case '+':
  {
    result = num_1 + num_2;
    break;
  }
  case '-':
  {
    result = num_1 - num_2;
    break;  
  }
  case '*':
  {
    result = num_1 * num_2;
    break;  
  }
  case '/':
  {
    result = num_1 / num_2;
    break;  
  }
  default:
    {
    printf("error!");
    }
  } 
  printf("%d %c %d = %d",num_1,run_num,num_2,result);
  return 0;
}


作业2:编写程序计算升高


每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,
影响小孩成人后身高的因素有遗传、饮食习惯与坚持体育锻炼等。小孩成人后身高与其父
  母身高和自身性别密切相关。
  设faHeight为其父身高,moHeight为其母身高,
 身高预测公式为:  
  男性成人时身高 = (faHeight + moHeight) * 0.54(cm) 
  女性成人时身高 = (faHeight * 0.923 + moHeight) / 2(cm)  
  此外,如果喜爱体育锻炼,那么可增加身高2%
  如果有良好的卫生饮食习惯,那么可增加身高1.5%
程序要求:父亲的身高与母亲的身高、小孩的性别、是否喜爱体育锻炼和是否有良好的卫生
  饮食习惯也从键盘上输入,最终输出预测的身高。  提示:小孩性别的输入方式,可在屏幕
  给出提示“请输入小孩的性别(男孩输入M,女孩输入F):”,然后通过if语句来判断从键盘
  输入的字符是M还是F。是否喜爱体育锻炼也可以通过类似的方式实现。


#include <stdio.h>
int func(int faheight,int moheight,char sex,char like_sports,char health_diet)
{
    int result;
    if(sex == 'M')
    {
        if(like_sports == 'Y')
        {
            if(health_diet == 'Y')
            {
                result = (faheight + moheight) * 0.54 * 1.02 * 1.015;
            }
            else
            {
                result = (faheight + moheight) * 0.54 * 1.02;
            }
        }
        else
        {
            if(health_diet == 'Y')
            {
                result = (faheight + moheight) * 0.54 * 1.015;
            }
            else
            {
                result = (faheight + moheight) * 0.54;
            } 
        }
    }
    else
    {
        if(like_sports == 'Y')
        {
            if(health_diet == 'Y')
            {
                result = (faheight * 0.923 + moheight) / 2 * 1.02 * 1.015;
            }
            else
            {
                result = (faheight * 0.923 + moheight) / 2 * 1.02;
            }
        }
        else
        {
            if(health_diet == 'Y')
            {
                result = (faheight * 0.923 + moheight) / 2 * 1.015;
            }
            else
            {
                result = (faheight * 0.923 + moheight) / 2;
            }
        }
    }
    return result;
}
int main(int argc, char const *argv[])
{
    int faheight,moheight;
    char sex,like_sports,health_diet;
    printf("put in faheigeht(cm) and moheight(cm):\n");
    scanf("%d %d",&faheight,&moheight);
    getchar();
    printf("Male or Female [M/F]\n");
    sex = getchar();
    getchar();
    printf("Whether he/she likes sports or not [Y/N]\n");
    like_sports = getchar();
    getchar();
    printf("Whether he/she has health diet or not [Y/N]\n");
    like_sports = getchar();
    getchar();
    int result = func(faheight,moheight,sex,like_sports,health_diet);
    printf("Height is %d\n",result);
    return 0;
}


作业3:输入一个日期,输出当前日期是这一年的第几天


2021年1月10日是2021年的第10天
2021年2月10日是2021年的第31+10=41天
2021年3月10日是2021年的第31+28+10=69天
闰年和平年2月份的天数不一样
每一月的天数都有区别
输入的年月日也得满足实际情况
不满足条件,可以使用return -1;结束整个程序


#include <stdio.h>
int cor(int flag,int month,int day)
{
    int arri[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    if(flag == 0)
    {
        arri[1] = 29;
    }
    if(month > 12 || month < 1)
    {
        return -1;
    }
    if(arri[month - 1] < day)
    {
        return -1;
    }
}
int cal(int year,int month,int day)
{
    int sum_day,flag;
    flag = 1;
    int arr[12] = {0,30,28,31,30,31,30,31,31,30,31,30};
    if(year >= 2022 || year <= 0)
    {
        return -1;
    }
    if(((year % 100 == 0) && ((year / 100) % 4 == 0)) || (year % 4 == 0))
    {
        flag = 0;
        arr[2] = 29;
    }
    if(cor(flag,month,day) == -1)
    {
        return -1;
    }
    for(int i = 0; i < month; i++)
    {
        sum_day += arr[month];
    }
    sum_day += day;
    return sum_day;
}
int main(int argc, char const *argv[])
{
    int year,month,day,sum_day;
    printf("year = \n");
    scanf("%d",&year);
    printf("month = \n");
    scanf("%d",&month);
    printf("day = \n");
    scanf("%d",&day);
    sum_day = cal(year,month,day);
    if(sum_day == -1)
    {
        printf("error!\n");
    }
    else
    {
        printf("sum days = %d\n",sum_day);       
    }
    return 0;
}
相关文章
|
6月前
|
Java 关系型数据库 MySQL
|
6月前
|
SQL 前端开发 数据库
|
6月前
|
算法 前端开发 Java
思途实训-day03-04
思途实训-day03-04
|
Ubuntu API 数据库
苏嵌实训——day19
苏嵌实训——day19
110 0
苏嵌实训——day19
|
网络协议 数据安全/隐私保护 网络架构
苏嵌实训——day17(上)
苏嵌实训——day17(上)
苏嵌实训——day17(上)
|
消息中间件 Linux
苏嵌实训——day16(下)
苏嵌实训——day16(下)
苏嵌实训——day16(下)
|
存储
苏嵌实训——day11(上)
苏嵌实训——day11(上)
102 0
苏嵌实训——day11(上)
|
存储 Linux 程序员
苏嵌实训——day13(上)
苏嵌实训——day13(上)
111 0
苏嵌实训——day13(上)
|
存储 Ubuntu 固态存储
苏嵌实训——day1
苏嵌实训——day1
144 0
苏嵌实训——day1