iOS笔记之_C语言流程控制


一、流程控制
顺序结构:默认的流程结构。按照书写顺序执行每一条语句。
选择结构:对给定的条件进行判断,再根据判断结果来决定执行哪一段代码。
循环结构:在给定条件成立的情况下,反复执行某一段代码。
 
1.选择结构-if
if的4种结构:
> 1.if的第1种结构
 if(条件)
 {
    语句1;
    语句2;
    ......
 }
 
> 2.if的第2种结构
 if(条件1)
 {
     语句1;
     语句2;
     ......
 } 
 else
 {
    
 }
 
> 3.if的第3种结构
 if(条件1)
 {
     语句1;
     语句2;
     ......
 }
 else if(条件2)
 {
 
 }
 else if(条件3)
 {
 
 }
 else if(条件4)
 {
 
 }
 else 
 {
 
 }
 
> 4.if的第4种结构
 if (条件)
   语句1;
练习:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
程序代码:

#include<stdio.h>
main()
{
 //定义一个变量i存放金额
  long int i;
 //定义每个金额区间
  int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;


//提示并接受用户输入数值
 printf("请输入金额:\n");
  scanf("%ld",&i);
//计算每个区间应发放的金额
  bonus1=100000*0.1;
  bonus2=bonus1+100000*0.75;
  bonus4=bonus2+200000*0.5;
  bonus6=bonus4+200000*0.3;
  bonus10=bonus6+400000*0.15;
//循环判断并调用相关公式计算金额
 if(i<=100000)
  bonus=i*0.1;
 else if(i<=200000)
     bonus=bonus1+(i-100000)*0.075;
    else if(i<=400000)
        bonus=bonus2+(i-200000)*0.05;
       else if(i<=600000)
           bonus=bonus4+(i-400000)*0.03;
          else if(i<=1000000)
              bonus=bonus6+(i-600000)*0.015;
             else
              bonus=bonus10+(i-1000000)*0.01;
printf("利润是%d,应发放金额为%d",i,bonus);
}

2.选择结构-switch
switch(表达式)
 { case 数值1: 
break; 
    … default: 
break;}
switch没有If灵活。switch只能某个单值。


练习:输入某年某月某日,判断这一天是这一年的第几天?
> 1.分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
> 2.程序代码:
#include<stdio.h>
main()
{
int day,month,year,sum,leap;
printf("\n请输入年月日并以逗号隔开:\n");
scanf("%d,%d,%d",&year,&month,&day);
 //先计算某月以前月份的总天数
switch(month)
{
 case 1:sum=0;break;
 case 2:sum=31;break;
 case 3:sum=59;break;
 case 4:sum=90;break;
 case 5:sum=120;break;
 case 6:sum=151;break;
 case 7:sum=181;break;
 case 8:sum=212;break;
 case 9:sum=243;break;
    case 10:sum=273;break;
 case 11:sum=304;break;
 case 12:sum=334;break;
 default:printf("您的输入有误\n"); break;
		    
}
   //再加上某天的天数
   sum=sum+day; 
 
  //判断是不是闰年
 if(year%400==0||(year%4==0&&year%100!=0))
  leap=1;
 else
  leap=0;
   //如果是闰年且月份大于2,总天数应该加一天
    if(leap==1&&month>2)
    sum++;
    printf("%d-%d-%d是一年的第%d天。\n",sum);


>编译运行结果:
 
3.循环结构-while和do while
(1)
while (条件)
 {
    循环体
 }
 
 > 运行原理
 1.如果一开始条件就不成立,永远不会执行循环体
 2.如果条件成立,就会执行一次循环体,执行完毕,再次判断条件是否成立......
 
 break
 直接结束整个while循环
 
 continue
 结束当前的循环体,进入下一次循环体的执行


(2)
do {
 
} while(条件);
 
 > while和do-while的区别
 1.很多情况下,while和do while可以互换。
 2.while特点:如果一开始的条件不成立,永远不会执行循环体。
 do while特点:不管一开始的条件是否成立,至少会执行一次循环体。
 3.最好使用while


注意:

while循环是一开始条件不成立就永不执行,do while是先执行do再进行条件判断,注意do while后有“
    int a = 10;
     while (a>0); // 死循环

    // 最简单的死循环
       while(1);
练习:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
> 1.利用while语句,条件为输入的字符不为'\n'.
#include <stdio.h>
int main()
{
    char c;
    int letters=0,space=0,digit=0,others=0;
     printf("请输入一串字符:\n");
     while((c=getchar())!='\n')
         {
             if((c>='a' && c<='z')||(c>='A' && c<='Z'))
                  letters++;
             else if(c==' ')
                  space++;
               else if(c>='0' && c<='9')
                       digit++;
                 else
                       others++;
        }
    printf("统计结过为:%d个英文字符,%d个空格,%d个数字,%d个其他字符\n",letters,
           space,digit,others);
}

4.循环结构-for
(1)
for (语句1; 条件; 语句2)
 {
    循环体
 }
 
 语句1:初始化语句
 语句2:增量语句(执行完循环体后再执行的语句)
 
 > 1.for一开始就会执行一次语句1(整个for循环只会执行一次)
 > 2.判断条件是否成立,如果条件成立,就会执行一次循环体,然后就会执行语句2,再次判断条件是否成立
(2)使用注意
不要随便在for()后面写分号
如果要在循环体中定义新的变量,必须用大括号{}包住
最简单的利用for循环实现死循环:for(;;);


练习:题目:打印出如下图案(菱形)
 
> 1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。 
> 2.程序代码:

#include <stdio.h>
int main()
{
//定义三个变量i代表行数,j代表空格数,k代表*数
int i,j,k;
//先打印前四行
for(i=0;i<=3;i++)
 {
 for(j=0;j<=2-i;j++)
  printf(" ");
 for(k=0;k<=2*i;k++)
  printf("*");
 printf("\n");
 }
//再打印后三行
for(i=0;i<=2;i++)
 {
 for(j=0;j<=i;j++)
  printf(" ");
 for(k=0;k<=4-2*i;k++)
  printf("*");
 printf("\n");
 }
}

输出结果:

 
5.三种循环结构小结
> 1.可以相互替代
> 2.while和do while,循环变量的初始化应该在while和do while语句之前完成,for语句可以在表达式1中实现循环变量的初始化。
> 3.while和do while应在循环体中包含使循环结束的语句。
> 4.do while是先执行后判断,while是先判断后执行。
> 5.for的功能最强,凡是while和do while能完成的都可以用for代替。


二、函数
1.什么是函数
程序的每一个功能都是可以定义一个函数来实现。
例如一个mp3软件的暂停、播放、停止都可以定义函数去实现其功能。
2.函数的定义
当需要添加一个常用的功能的时候就可以定义函数。
定义格式:
 返回值类型  函数名(形式参数列表)
 {
    函数体
 }
例:定义一个函数计算a+b的值。
#include<stdio.h>
int sum()
int main()
{
   int a = 10,b = 20;
   sum(a,b);
   return 0;
}
int sum(m,n)
{
   return m+n;
}

> 1.函数名要起的有意义。
> 2.明确返回值类型,没有返回值就写void,声明了返回值类型,也可以不返回任何值。
> 3.如果函数写在main的后面,调用前一定要声明。
> 4.默认情况下,不允许有函数的名称一样
> 5..函数不能嵌套定义
> 6.函数不能重复定义,但是可以重复声明
> 7.如果有函数的声明,没有函数的定义
    编译可以通过,因为编译器只会检测语法合不合理,并不会检测函数有没有定义。
    链接报错,因为链接的时候会检测函数是否定义。

3.函数的参数
形式参数:定义函数时函数名后面中的参数,简称形参。
.实际参数:调用函数式传入的具体数据,简称实参。
参数注意点:
> 1.形式参数:定义函数时函数名后面中的参数,简称形参。
> 2.实际参数:调用函数式传入的具体数据,简称实参。
> 3.实参个数必须等于形参个数。
> 4.函数体内部不能定义和形参一样的变量。
> 5.如果是基本数据类型作为函数形参,纯粹是值传递,修改函数内部形参的值,并不会影响外面实参的值。
> 6.一个函数可以没有形参,也可以有无限多个形参。

4.函数的递归调用
在调用一个函数时又出现直接或间接调用该函数本身,称为函数的递归调用。

练习:用递归方法求n!(n的阶乘的值),如果n为5,结果为120。
程序代码:
#include<stdio.h>
int mul(int m);
int main()
{
    int n = 0;
    //如果输入的数值小于等于0就重新输入
    while (n <= 0)
    {
        printf("请输入一个正整数:\n");
        scanf("%d",&n);
    }
    
      printf("%d的阶乘结果是:%d\n",n,mul(n));
    
    return 0;
}
//定义计算阶乘的函数
int mul(int m)
{
    int p;
    if(m>1)
    p = m*mul(m-1);
    else
    p = 1;
    return p;
}


编译运行结果为:
 











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值