iOS笔记之_C语言流程控制

来源:互联网 发布:windows教育版 编辑:程序博客网 时间:2024/06/05 16:53


一、流程控制
顺序结构:默认的流程结构。按照书写顺序执行每一条语句。
选择结构:对给定的条件进行判断,再根据判断结果来决定执行哪一段代码。
循环结构:在给定条件成立的情况下,反复执行某一段代码。
 
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
原创粉丝点击