c语言初阶 1.选择 循环语句

选择语句分为:if、switch语句

循环语句分为:for、while、do...while、goto

语句分为:1.表达式语句2.函数调用语句3.控制语句4.复合语句5.空语句

这里的选择循环语句都是控制语句

什么是控制语句:用于控制程序的执行流程,以实现程序的各种结构方式(C语言是结构化的程序设计语言)

结构分为:顺序结构、选择结构、循环结构

他们由特定的语句定义符组成有九种控制语,可以分为三类:

  1. 条件判断语句也叫分支语句:if语句,switch语句
  2. 循环执行语句:while语句 、for语句 、do while语句
  3. 转向语句:break语句、goto语句、continue语句、return语句

    分支语句(选择结构)                                                    

    if语句switch语句:

    1.if(表达式)//如果表达式为真 非0语句就可以执行

    语句

        2.if(表达式)//表达式为真语句1运行,表达式不成立运行语句二

        语句1;

           else

        语句2;

出错的原因:如果if后面想跟多条语句需用{}将其括起来

如下:

3.多分支 

因为18<age为假0 0<28成立所以为真

c语言如何表示真假0表示假 1表示真

原因:else只能控制下面一条语句,如果想要输出多条语句则需要用大括号括起来

正解:

else悬空

 

 else和离得最近的if进行匹配

  1. 变量的命名要有意义如firstname first_name FirstName比第一种更方便阅读
  2. 空格 空行 换行

满足返回1不成立返回0

 

变量不能赋值给常量if(5=num)

判断是否为奇数

 

输出1-100奇数

switch语句:

通常来说用于多分支情况 不适合表示一部分范围。

switch(整型表达式)//不能浮点型

{

语句项;(case表达式)

}

case 1://这里的1 是 整型常量表达式 也可以是字符因为字符存储时也是ASCII值 字符也是整型

 

  1. 输出七天

 

 

这样的原因:case只是入口但是并未说明从哪里出来。

因此需要运用break;语句进行退出

#include<stdio.h>

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;

}

}

要求:1-5weekday 6-7weekeded

default子句:用来没有这种情况后,但是仍然输入会怎么样

循环语句:

while for do...while

while:

If(条件)

语句

while(表达式)

循环语句

 原因:先判断条件是否为真,此时为1为真,进入循环后运行语句 运行结束。跳出循环,继续进行判断。不断的循环而判断条件一直为真,因此一直输出hehe

 循环语句break; continue;

break:终止循环.跳出循环

continue:直接跳过后面代码,返回判断,进行下一次循环的判断

原因:1到4时可以打印,当i=5时if(5==i)成立 break运行所以中止整个循环。

 

原因:1到4时正常打印,当i=5时 if(i==5)成立 continue运行,跳出本次循环后面代码,返回判断 因为i一直没有i++,所以i一直是5,因而一直无法往下运行。

 

getchar获取字符 putchar:打印  

这里为什么用int来接收字符:返回的字符是ASCII值。当你出错时会返回EOF

EOF//END Of File

EOF是define中的-1

而这里也可以返回EOF 因此是int类型

如果想停止可以ctrl z

举一个例子:

 

 

读取到了换行结束

过滤字符 只打印数字

 

for循环

for(表达式1;表达式2;表达式3)

表达式1:初始化

表达式2:判断

表达式3:调整

  1. break跳出代码
  2. continue跳过代码

do..while

do

循环语句;

while(表达语句);

阶乘

1到3的阶乘和 

 

 

在一个有序数组查到某个数字 :
for循环

二分法

#include<stdio.h>
int main()
{
    int arr[]={1,2,3,4,5,6,7,8,9,10};
    int k=7;
    int sz=sizeof(arr)/sizeof(arr[0]);
    int left=0;
    int right=sz-1;
    while(left<=right)
    {
        int mid=(left+right)/2;
        if(arr[mid]<k)
        {
            left=mid+1;
        }
        else if(arr[mid]>k)
        {
            right=mid-1;
        }
        else
        {
            printf("找到了%d",mid);
            break;
        }
    }
    if(left>right)
        printf("找不到\n");

字符逐渐向中间移动 :

优化后 

#include<stdio.h>
#include<string.h>
#include<windows.h>
int main()
{
    char arr1[]="abcdef";
    char arr2[]="######";
    int left=0;
    int sz=strlen(arr1);//arr1 字符串元素有a b c d e f \0 strlen只数到\0之前因而此时strlen长度为6 
    //int sz=szieof(arr1)/sizeof(arr1[0]); 
    int right=sz-1;
    while(left<=right)
    {
        arr2[left]=arr1[left];
        arr2[right]=arr1[right];
        printf("%s\n",arr2);
        Sleep(1000);//单位微秒
        system("cls");//清空屏幕 
        left++;
        right--;        
    } 
    printf("%s",arr2);
    

模拟用户登录场景,用户只能登录三次:

猜数字 :
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
    printf("*************\n");
    printf("    0退出    \n");
    printf("    1开始    \n");
    printf("*************\n");
}
void game()
{
    int ret=rand()%100+1;//如果只是%100只能取到1到99  生成随机数需先用srand 
    printf("%d\n",ret);
    int guss=0;
    while(1)
    {
        printf("请输入猜的数字:");
        scanf("%d",&guss);
        if(guss>ret)
        {
            printf("猜的数大了\n");
        }
        else if(guss<ret)
        {
            printf("猜的数小了\n");
        }
        else
        {
            printf("恭喜猜对了\n");
            break;
        }
    }
}
int main()
{
    srand((unsigned int)time(NULL));//srand(随机数)才能生成随机数 因而选用了时间戳 
    //因为srand(unsigned int类型)所以括号内需要转换 time(指针)这里设置空指针    
    int input=0;
    do
    {
        menu();
        scanf("%d",&input);
        switch(input)
        {
            case 1:
                printf("开始游戏:\n");
                game();
                break;
            case 0:
                printf("退出游戏\n");
                break;
        }        
    }    
    while(input);
    return 0;

一分钟关闭电脑

1.goto:

 #include<stdio.h>
#include<string.h>
#include<windows.h>
int main()
{
    char input[]={0};
    char arr[]="我是猪";
    system("shutdown -s -t 60");
again:    
    printf("请输入我是猪,否则将在1分钟内关闭电脑。\n");
    scanf("%s",input);
    if(strcmp(input,arr)==0)
    {
        system("shutdown -a"); 
    }
    else
    {
        goto again;
    }
    
}

2.while

#include<stdio.h>
#include<string.h>
#include<windows.h>
int main()
{
    char input[]={0};
    char arr[]="我是猪";
    system("shutdown -s -t 60");
    while(1)
    {
        printf("请输入我是猪,否则将在1分钟内关闭电脑。\n");
        scanf("%s",input);
        if(strcmp(input,arr)==0)
        {
            system("shutdown -a"); 
            break;
        }
    }    
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值