C/C++知识点之C语言基础之流程控制
小标 2018-11-01 来源 : 阅读 647 评论 1

摘要:本文主要向大家介绍了C/C++知识点之C语言基础之流程控制,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之C语言基础之流程控制,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

一.流程结构

包括:
        * 顺序结构 : 默认的流程结构.按照代码编写顺序执行语句
        * 分支结构 : 对给定的条件进行判断,再根据判断结果执行相应的代码
        * 循环结构 : 在给定条件成立的条件下,反复执行某段代码
  1) 顺序结构:
    代码默认的执行顺序,按照代码由上到下的顺序执行;
  2) 分支结构:
    if语句:
    1.if语句的三种形式
     *1
      if (conditon) {
        statements;
      }
     *2
      if (condition) {
                  statements;
      } else {
        statements;
      }
     *3
      if (condition) {
        statements;
      } else if (conditon) {
        statements;
      } else {
        statements;
      }
    注意: 这里的conditon是相当于一个bool类型的变量;
  2.switch..case 语句
    switch (expression){
     case 1:
        statements;
     case 2:
        statements;
     ...
     default:
        break;
    } 
这里分享一个if 和 switch相结合解决实际问题的小例子:

 1 #define adultAge 18 // 18周岁
 2 #define entranceFee 100 // 网吧最低消费金额,即入场费
 3     int isVip = 0;    //vip 至尊码是999
 4     int isCafeOwner = 0;  // boss 验证码是888
 5     
 6     printf("Please choose the number of your ID information \n");
 7     printf("0:Nomal 1:Vip  2:Super \n");
 8     
 9     int c = 0;
10     scanf("%d" , &c);
11     
12     int i = 0;
13     // 输入合理性判断
14     while(c < 0 || c >2)
15     {
16         printf("Error,please enter again \n");
17         printf("%d \n" , i);
18         scanf("%d" , &c);
19         i++;
20     }
21     //printf("%d %d" , c , i);
22     
23     int age = 0;    // 年龄
24     int money = 0;  // 金额
25     
26     switch (c){
27         case 0:
28             
29             printf("Please enter your age and money, and divided with a blank \n");
30             scanf("%d %d" , &age, &money);
31             break;
32         
33         case 1:
34             
35             printf("Please enter your vip card number \n");
36             scanf("%d" , &isVip);   // 是vip
37             break;
38         
39         case 2:
40             
41             printf("Please enter your super number \n");
42             scanf("%d" , &isCafeOwner);     // 是网吧的所有者
43             break;
44         
45         default:
46             break;
47     }
48     
49    
50    // 判断是否有资格进入网吧消费
51     if (age >= adultAge && money >= entranceFee){
52         printf("Welcome to our Internet cafe \n");
53     }else if (isVip == 999) {  // Vip至尊码是999
54         printf("Welcome back, our Vip \n");
55     }else if (isCafeOwner == 888) {// Super boss码是888
56         printf("Welcome back, our boss \n");
57     }else {
58         printf("Sorry,we can not provide the service \n");
59     }
60     
61     
62     
63     }
64     
65     return 0;

这段代码,对网吧消费的问题进行了一定的定义解释。
    3)循环结构
// 循环  :在满足某种特定的条件下,重复的做某件事情。

1 while (条件表达式) {
2     循环体
3 }

  当条件表达式为真时,就执行循环体,一旦条件表达式为假,循环停止。
这里提下两个常用的小知识:
  1.关于计算取位的问题
  解决c简单函数算法问题时,我们常会遇到关于取出一个数十位、个位、百位,甚至是千位等这样的问题,那么小伙伴们不禁会好奇了,这该怎么办呢?
so here ,we could get it!
  for axample :
  对于 m = 12345,怎么取出它的各位数呢?

// 先看比较容易理解的2个

// single
single = m % 10;    // mol 10得到个位数
// 最高位max
max = m / 10000;   // 最高位

decade = m / 10 % 10;
hundred = m / 100 % 10 ;
thound = m / 1000 % 10;

怎么样?有没有发现什么共性?
除了最高位和个位数的提取,其他位的提取都可以写作
x位数 = m / pow(10,x) % 10;
其实,个位数和最高位数只是如上表达式的特殊情况罢了。
  2.arc4random问题
for example :how to get a random from [30,50]
ok,let us get it fllowingly:
int temp = arc4random() % (50 - 30 + 1) + 30;
arc4random 函数的实质是取余的函数转换,[30,50]可以看做 [0,20] +30 的函数区间变动;而对于[0,20]这个区间我们通过对21做mol运算得到。那么,它有什么用呢?
首先,我们一起来看下这个,
”用户从控制台 输入一个n ,用while打印n个随机数,范围是[30,70],并找出n的最大值“

    printf("please input a random number \n");
    int n = 0;
    scanf("%d" , &n);
    int max = 0;
    while (n--) {
        int temp = arc4random() % (70 - 30 + 1) + 30;
        printf("%d " , temp);
        max = max > temp ? max : temp;
    }
    printf("\nthe max random number is %d \n" , max);

那么这个功能有什么用呢?做彩票?dream on,彩票站的算法,hehe,中国的故事你懂的,嘎啦,我只是随便说,千万不要当真的说,那么我们看点贴近生活的,如这个:

  // 关于上面随机程序的一点联想 ,结合指针数组
    char *name[5] = {"Jack" ,"Bob" ,"Lucy" ,"lol" ,"Tom"};
    
    int random = arc4random() % 5;
    printf("%s \n" , *(name +random));

做个名字的随机抽取功能总还是可以的吧,哈哈~
 
————————————————
书归正传,继续来看循环结构:
//    do{
//        // 语句
//    } while (条件表达式);
    
//    do while ,先执行一次循环语句,再判断条件是否成立,至少会走一次循环体
    
//    int i = 0;
//    do {
//        i++;
//        printf("%d " , i);
//    } while (i < 10);
这个和while语句比较像,也没有什么特别需要强调的,只要注意转换是condition的判断区间就好~
重点还是for循环的使用,
  for (initialization; conditon; increment){
  statements;

执行顺序,
  first -> initialization;
  second -> conditon judgement;
  third -> run statements;
  fourth -> increment;
一个例子:

//打印菱形
    //思路 : 分析了下,感觉还是要加强点用户的互动性,但是具体开放哪个接口给用户,也没有太好的想法,感觉还是通过  菱形对角线的星星数  来定义一个菱形的形状会好一点吧
           // 所以接口数据 选择了星星的个数,如果星星的个数是n,两个*的间距是d,对象线长度是 (n - 1)*d ,则菱形的边长是 (n - 1) * d / sqr(2);        ------- 说明
    printf("Please input an odd number of the stars on the diagonal \n"); // diagonal 星星
    int n = 0;
    scanf("%d" ,&n);   // 对角线行的星星个数是n ,那么对角线所在行数是i = (n + 1) / 2;
    // 输入上半部分
    for (int i = 1; i <= ((n + 1) / 2); i++ ) {     // 行数i
        for (int j = 1; j <= (( (n + 1) /2) - i ); j++) {        // 空格 j
            printf(" ");
        }
        for (int k = 1; k <= (2 * i - 1); k++) {                 // 星星 k
            printf("*");
        }
        printf("\n");
    }
    //输入下半部分
    for (int i = 1; i < ((n + 1) / 2); i++) {
        for (int j = 1; j <= i; j++) {
            printf(" ");
        }
        for (int k = 1; k <= (n - 2 * i); k++) {
            printf("*");
        }
        printf("\n");
    }

ok,fighting ,today is today.

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(1)
后参与评论
test
2222222222222
2018/11/02 14:26:52

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程