结构化程序设计

1.顺序结构

用static修饰的局部变量的初始化,只在第一次进入时进行,之后保持上一次离开时的值

2.选择结构

分支语句

语句:每条用 “ ; ” 分开的为一条语句,每个语句必须以分号结束

2.1  if语句

允许嵌套使用 

语法结构:

//单分支if

if()        //满足条件,执行语句
    语句;
             //不满足,直接跳过




//双分支if
if()        //满足条件,执行语句1
    语句1;
else         //不满足条件,执行语句2
    语句2;

案例1:

int main() {

        int age = 28;

        if (age<18)
            printf("未成年\n");
        else {                               //存在多条语句加括号,避免出现 悬空else
            if (age >= 18 && age < 28)
                printf("青年\n");
            else if (age >= 28 && age < 50)
                printf("中年\n");
            else if (age >= 50 && age < 90)
                printf("老年\n");
        }
        return 0;
	}

练习题

1.判断一个数是否为奇数 

2.输出1-100的奇数

2.2  switch语句

  用于多分支的情况

允许嵌套使用

switch(c)语句中,C --为整型、常量、表达式。

语法结构

案例1:

int main() {

        int day = 0;
        scanf("%d", &day);
        switch(day) {
            case 1:                         //必须是整型
                printf("周一\n"); break;
            case 2:
                printf("周二\n"); break;
            case 3:
                printf("周三\n"); break;
            case 4:
                printf("周四\n"); break;
            case 5:
                printf("周五\n"); break;
            case 6:
                printf("周六\n"); break;
            case 7:
                printf("周天\n"); break;

            //不存在的情况
            default:
                printf("输入错误\n"); break;


        }
        return 0;
	}

Switch未知选项:   default: 子句(可以放任何位置)

练习题

3.循环结构

3.1while 循环

语法结构:

while(表达式)    //条件为真,进入循环
    循环语句;

案例:

int main() {

        int a = 0;

        while (a < 18)
        {
            a++;
            if (a == 5)
                continue;           //跳过本次循环
            if (a == 10)
                break;             //永久终止循环
            printf("%d\n", a);

        }
        return 0;
	}
int main() {

        int ch = 0;

        //getchar == 输入 ; putchar == 输出 

        while ((ch = getchar()) != EOF)       //ctrl+Z获取EOF  退出
            putchar(ch);
            printf("%C\n", ch);
        return 0;
	}

3.2  for循环

语法结构

for(        ;        ;        )

        {

                循环体;

        }

for 循环内不可修改循环变量

3.2.1  for循环变种1

案例:

错误的省略方式,j 由于没有初始化,所以内层循环后 j =10,不再改变,所以不打印

 

3.2.1  for循环变种2

。。。。。。。。。

测试:

判断条件 k=0 恒为假,不进入循环,循环0次

3.3  do... while循环 

语法结构:

do{
  //循环体
}
while(  )        //先循环一次,然后再进行判断

至少执行一次,使用场景有限,不是经常用

案例:

4.练习

int main() {

        int i,n;
        int sum = 1;
        int and = 0;
        //scanf("%d", &n);
        for (n= 1; n < 4; n++)
        {
            sum = 1;
            for (i = 1; i <= n; i++)
            {
                sum = sum * i;
            }
            printf("%d", n);
            printf("的阶乘%d\n", sum);
            and= and +sum;
        }
        printf("的阶乘和%d\n", and);

        return 0;
	}

1、2题解

int main() {
    int k = 7;//寻找数字7
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//数组
               // 0,1,2,3,4,5,6,7,8,9,
    int sz = sizeof(arr) / sizeof(arr[0]);   //计算元素个数

    printf("元素个数:%d\n", sz);

    int left = 0;                   //左下标
    int right = sz - 1;          //右下标


    while (left <= right)
    {
        int mid = (left + right) / 2;   //中间下标    

        if (arr[mid] > k)
        {
            right = mid - 1;
                            printf("左下标,:%d", left);
                            printf("右下标:%d\n", right);

        }
        else if (arr[mid] < k)
        {
            left = mid + 1;
                            printf("左下标,%d", left);
                            printf("右下标:%d\n", right);

        }
        else
        {
                            printf("找到了,下标为:%d\n", mid);
            break;
        }
    }
    if (left > right)
    {
                            printf("找不到:%d\n");
    }

3题解  

    //ajhfklhuehfkauhf
    //################
    char arr1[] = "ajhfklhuehfkauhf";
    char arr2[] = "################";



    int left = 0;                   //左下标
    int right = strlen(arr1) - 1;          //右下标


    while (left <= right)
    {
        arr2[left] = arr1[left];
        arr2[right] = arr1[right];
        left++;
        right--;
                                        //停留一秒
                                        Sleep(1000);
                                        //清空再打印
                                        system("cls");
        printf("%s\n", arr2);
    }

4 题解

    int i = 0;
    char password[20] = { 0 };


    for (i = 0; i < 3; i++)
    {
        printf("请输入密码:");
        scanf("%s", password);
        if (strcmp(password,"123456")==0)
                    //if (password == "123456")
                    //不能用 == 判断字符串相等;使用库函数strcmp
        {
            printf("密码正确:");
            break;
        }
        else
            printf("密码错误:\n");

    }
    if (i == 3)
    {
        printf("错3退出");

    }

5题解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值