if语句

(else总是和离他最近的if相匹配)

if(条件)

{

条件语句1}

else if

{

条件语句2

}

else

{

条件语句3

}


输出1—100之间的奇数

#include<stdio.h>

int main()

{

    int i=1;

    while(i<=100)

    {

        printf("%d ",i);

        i+=2;

    }

    return 0;

}


#include<stdio.h>

int main()

{

    int i=1;

    while(i<=100&&i%2==1)

{

    printf("%d ",i);

    i+=2;

}

    return 0;

}


switch语句

switch(整形表达式)//若为字符(char型,则对应其ASCII码值)

{

case 整形常量表达式: 

语句;

case 1:

printf;

break;

case 2:

printf;

break;

default:

printf; 

break;

}

:若没有break,则会输出每个case后的值,直到break

switch例题:

#include <stdio.h>

int main()

{

    int n = 1;

    int m = 2;

    switch (n)

   {

    case 1:

            m++;

    case 2:

            n++;

    case 3:

            switch (n)

           {

             case 1:

                    n++;

             case 2:

                    m++;

                    n++;

                    break;

           }

    case 4:

            m++;

            break;

    default:

            break;

   }

printf("m = %d, n = %d\n", m, n);

return 0;

 }

输出结果是:m=3,n=5


break:结束循环

continue:结束本次循环,本次后面的语句不运行,重头开始运行循环语句


getchar() putchar()

int ch=getchar();

putchar=(ch);=printf(“%c”,ch);


scanf:

scanf(“%d”,&a);

scanf(“%s”,password);//password是一个字符串数组名,输入的字符串自动存储到字符串数组中,不需要用& 


while循环

while(条件)

{

执行语句 

}


for循环

for(变量初始化,判断条件,调整变量)

{

执行语句}

1、不可在for循环内修改变量,防止for循环失去控制

2、建议控制变量的取值采用前闭后开的写法,如(i=1i<10,i++)

例题1


答案:0次,因为k=0结果是0,始终为假6,=是赋值符号,==是判断符号


 例题2

这里打印多少个hehe? 

   int i = 0; 






printf("hehe\n"); 



   //如果省略掉初始化部分,这里打印多少个hehe?  







printf("hehe\n"); 

答案:100,10。10*10=100,里外各循环十次。1*10=10,外面循环一次,里面循环10次。


do while循环

do

{

循环语句

}

while(循环条件);

例:

#include <stdio.h>

int main()

{

    int i=1;

    do

    {

        printf("%d ",i);

        i++;

    }

    while(i<=10);

    return 0;

}


例题:

1、计算n的阶乘

#include <stdio.h>

int main()

{

    int n;

    int r=1;

    int i=1;

    scanf("%d",&n);

    for(;i<=n;i++)

    {

        r=r*i;

    }

    printf("n!=%d\n",r);

    return 0;

}

2、计算1!+2!+···+10!

#include <stdio.h>

int main()

{

    int r=1;

    int i=1;

    int sum=0;

    for(;i<=10;i++)

    {

        r=r*i;

        sum+=r;

    }

    printf("sum=%d\n",sum);

    return 0;

}


3、在一个有序数组中查找具体的某个数字n所对应的下标。

例题:arr[]={1,2,3,4,5,6,7,8,9,10};

arr[mid]=7,求mid

折半/二分 查找算法

#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(k<arr[mid])

        {

            right=mid-1;

        }

        else if(k>arr[mid])

        {

            left=mid+1;

        }

        else

        {

            printf("找到了,下标是%d\n",mid);

            break;

        }

        if(left>right)

            printf("找不到\n");

    }

        return 0;

    }


4. 编写代码,演示多个字符从两端移动,向中间汇聚。

#include <stdio.h>

int main()

{

    char arr1[]="Welcome to bit!";

    char arr2[]="##############";

    int left=0;

    int right=sizeof(arr1)/sizeof(arr1[0])-2;

    while (left<=right)

    {

        arr2[left]=arr1[left];

        arr2[right]=arr1[right];

        printf("%s\n",arr2);

        left++;

        right--;

    }

        return 0;

    }



5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序)

注:数组比较不能用==,要用库函数strcmp #include <string.h>

#include <stdio.h>

#include <string.h>

int main()

{

    int i=0;

    char arr[20]={“”};//数组初始化必须给定大小或者给一串字符,因为不知道输入密码的长度,所以尽量设置的大一点。

    for(i=0;i<3;i++)

    {

        printf("请输入密码:");

        scanf("%s",arr);

        if(strcmp(arr,"925117")==0)

        {

            printf("密码正确\n");

            break;

        }

        else

        {

            printf("密码错误\n");

        }

    }

if(i==3)

        printf("三次输入错误,退出程序\n");

return 0;

}




字符串结尾有个隐藏的/0,数组没有。


例题:写代码将三个数从大到小输出

#include <stdio.h>

int main()

{

    int a,b,c;

    scanf("%d" "%d" "%d",&a,&b,&c);

    if(a<=b)

    {

        int tmp=a;

        a=b;

        b=tmp;

    }

    if(a<=c)

    {

        int tmp=a;

        a=c;

        c=tmp;

    }

    if(b<=c)

    {

        int tmp=b;

        b=c;

        c=tmp;

    }

    printf("%d %d %d\n",a,b,c);

    return 0;

}


例题:给定两个数,求这两个数的最大公约数

辗转相除法

#include <stdio.h>

int main()

{

    int a,b,c;

    scanf("%d %d",&a,&b);

    while (a%b)

    {

        c=a%b;

        a=b;

        b=c;

    }

    printf("最大公约数是:%d\n",b);

    return 0;

}


例题:打印1000-2000之间的闰年,并算出一共有多少个。

注:闰年:1、可被4整除且不能被100整除

2 、可被400整除

#include <stdio.h>

int main()

{

    int a;

    int b=0;

    for(a=1000;a<=2000;a++ )

    {

        if(a%4==0 && a%100!=0)

        {

            printf("%d ",a);

            b++;

        }

        else if(a%400==0)

        {

            printf("%d ",a);

            b++;

        }

    }

    printf("\n%d\n",b);

return 0;

}


例题:打印100-200之间的素数(只能被1和它本身整除的数)。

试除法

#include <stdio.h>

int main()

{

    int i,j;

    int k=0;

    for(i=100;i<=200;i++)

    {

        for(j=2;j<i;j++)

        {

            if(i%j==0)

                break;

        }

        if(j==i)

        {

            printf("%d ",i);

            k++;

        }

    }

    printf("\n%d\n",k);

    return 0;

}

优化后计算次数更少 

#include <stdio.h>

#include <math.h>

int main()

{

    int i,j;

    int k=0;

    for(i=101;i<=200;i+=2)//除了2,其他的偶数不可能是素数

    {

        for(j=2;j<sqrt(i);j++)//sqrt给i开平方,数学库函数

        {

            if(i%j==0)

       break;//for循环break后本轮 j不自加

        }

        if(j>sqrt(i))

        {

            printf("%d ",i);

            k++;

        }

    }

    printf("\n%d\n",k);

    return 0;

}

算出1-100之间整数中9的个数。

1、个位是9:%10=9

2、十位是9:/10=9

#include <stdio.h>

#include <math.h>

int main()

{

    int i;

    int j=0;

    for(i=1;i<=100;i++)

    {

        if(i%10==9)

            j++;

        if(i/10==9)

            j++;

    }

    printf("%d\n",j);

    return 0;

}


计算1/1-1/2+1/3-1/4+···+1/99-1/100的值。

#include <stdio.h>

int main()

{

    int i;

 double sum=0.0;

 flag=1;

    for(i=1;i<=100;i++)

    {

        sum+=1.0/i*flag;

        flag=-flag;

    }

    printf("%lf\n ",sum);

    return 0;

}


求十个整数中的最大值。

#include <stdio.h>

int main()

{

    int arr[10]={};

    scanf("%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d",&arr[0],&arr[1],&arr[2],&arr[3],&arr[4],&arr[5],&arr[6],&arr[7],&arr[8],&arr[9]);

    int max=arr[0];

    int i;

    for(i=1;i<=9;i++)

    {

    if(max<arr[i])

    {

        max=arr[i];

    }

       }

    printf("%d\n",max);

    return 0;

}