1.计算n的阶乘

#include <stdio.h>
int main ()
{
  int i=0;
  int n=0;
  int ret=1;
  scanf("%d",&n);
    for (i=1; i <=n; i++)
  {
    ret=ret*i;
    /* code */
  }
  printf("ret=%d\n",ret);
   return 0;
}

2.计算1!+2!+3!+...+10!

#include <stdio.h>
int main ()
{
  int i=0;
  int n=0;
  int ret=1;
  int sum=0;
  for(n=1;n<=3;n++)//将此处的3换成10 就可以得到结果
  {
    ret =1;
    for (i=1; i <=n; i++)
  {
    ret=ret*i;
    
  }
    sum=sum +ret ;

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

化简后

#include <stdio.h>
int main ()
{
  int i=0;
  int n=0;
  int ret=1;
  int sum=0;
  for(n=1;n<=3;n++)//将此处的3 换成10 就得到结果
  {
    ret =ret*n;

    sum=sum +ret ;

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

3.在一个有序数组中查找具体的某个数字n。编写int  binsearch(intx,intv[],intn)功能在v[0]<=v[1]<=v[2]...<=v[n-1]的数组中查找X

第一种

#include <stdio.h>
int main ()
{
  int arr[]={1,2,3,4,5,6,7,8,9,10};
  int k =7;
  int i=0;
  int sz = sizeof(arr)/sizeof(arr[0]);
  for(i=0;i<sz;i++)
  {
    if(k == arr[i])
    {
      printf("finded sign:%d\n",i);
      break;
    }
  }
  if(i==sz)
     printf ("can't find\n");
     return 0;
}

结果finded sign:6

第二种(折半查找)

#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)
    {
      right =mid -1;

    }
    else if(arr[mid]<k)
    {
      left = mid +1;

    }
    else
    {
      printf ("finded sign:%d\n",mid);
      break;
    }
  }
  if (left>right)
  {
    printf("can't find\n");
  }
   
     return 0;
}
#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)
    {
      right =mid -1;

    }
    else if(arr[mid]<k)
    {
      left = mid +1;

    }
    else
    {
      printf ("finded sign:%d\n",mid);
      break;
    }
  }
  if (left>right)
  {
    printf("can't find\n");
  }
   
     return 0;
}

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

strlen求字符串元素个数(不包括最后的‘\0’)

#include <stdio.h>
#include <string.h>
#include <windows.h>
int main ()
{
  char arr1 [] ="welcome to bit!!!!!!";
  char arr2 [] ="####################";
  int left = 0;
  int right = strlen(arr1)-1;
  //或者int right =sizeof(arr1)/sizeof(arri[0])-2;
  while(left<=right)
  {
    arr2[left]=arr1[left];
    arr2[right]=arr1[right];
    printf ("%s\n",arr2);
    Sleep (1000);//休息一秒
    left ++;
    right --;
  }

   
     return 0;
}

结果

w##################!

we################!!

wel##############!!!

welc############!!!!

welco##########!!!!!

welcom########!!!!!!

welcome######t!!!!!!

welcome ####it!!!!!!

welcome t##bit!!!!!!

welcome to bit!!!!!!

设置清屏效果

#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main ()
{
  char arr1 [] ="welcome to bit!!!!!!";
  char arr2 [] ="####################";
  int left = 0;
  int right = strlen(arr1)-1;
  //或者int right =sizeof(arr1)/sizeof(arri[0])-2;
  while(left<=right)
  {
    arr2[left]=arr1[left];
    arr2[right]=arr1[right];
    printf ("%s\n",arr2);
    Sleep (1000);//休息一秒
    system("cls");//执行系统命令的一个函数"cls"-清空屏幕
    left ++;
    right --;
  }

   //如果要最后全输出出来在此处加上printf("%s\n",arr2);
     return 0;
}

往中间走一次输出一次

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

#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main ()
{
  int i =0;
  char password[20] = {0};
  for(i=0;i<3;i++)
  {
    printf ("please enter your password");
    scanf("%s",password);
    if (strcmp(password,"123456")==0)
    //==不能用来比较两个字符串是否相等应该使用一个库函数-strcmp相等时返回值是0
    
    {
      printf ("login successfully\n");
      break;

    }
    else
    {
      printf("wrong password\n");
    }
  }
   
     return 0;
}

6.写三个数字从大到小输出(失败版)

这个代码执行不出来啊为什么?

#include <stdio.h>
int main()
{
  int a = 0;
  int b = 0;
  int c = 0;
  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;
}

7.一个代码打印1-100之间所有3的倍数

#include <stdio.h>
int main()
{
  int i =0;
  for(i=1;i<=100;i++)
  {
    if(i%3==0)
    printf("%d ",i);
  }
   return 0;
}

结果

3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 

8.给定两个数求这两个数的最大公约数

辗转相除法

#include <stdio.h>
int main()
{
  int m =24;
  int n =18;
  int r =0;//若要从键盘上输入值加上  scanf("%d%d",&m,&n);
  while(m%n)
  {
    r=m%n;
    m=n;
    n=r;
  }
  printf("%d\n",n);
   return 0;
}

原理:例如m=24,n=18,m与n取模:24%18(m/n取余数商1余6,模就是6)即为r=24%18=6没有整除(没有得到最大公约数);再让18%6,若值为0,那么6就是最大公约数

m%n=r,若r=0,那么r就是最大公约数,若不为0,n的值赋给m,r的值赋给n,在做模运算,循环往复

9.打印闰年,打印1000至2000的闰年。

#include <stdio.h>
int main()
{
  int year=0;
  int count =0;
  for(year=1000;year<=2000;year++)
  {
    //判断year是否为闰年
    //1.能被4整除并且不能被100整除是闰年
    //2.能被400整除是闰年
    
    if (year%4==0 && year%100!=0)
    {
      printf ("%d ",year);
      count ++;
    }
    else if(year%400==0)
    {
      printf ("%d ",year);
      count ++;
    }
  }
  printf ("\ncount=%d\n",count);
   return 0;
}

结果

1004 1008 1012 1016 1020 1024 1028 1032 1036 1040 1044 1048 1052 1056 1060 1064 1068 1072 1076 1080 1084 1088 1092 1096 1104 1108 1112 1116 1120 1124 1128 1132 1136 1140 1144 1148 1152 1156 1160 1164 1168 1172 1176 1180 1184 1188 1192 1196 1200 1204 1208 1212 1216 1220 1224 1228 1232 1236 1240 1244 1248 1252 1256 1260 1264 1268 1272 1276 1280 1284 1288 1292 1296 1304 1308 1312 1316 1320 1324 1328 1332 1336 1340 1344 1348 1352 1356 1360 1364 1368 1372 1376 1380 1384 1388 1392 1396 1404 1408 1412 1416 1420 1424 1428 1432 1436 1440 1444 1448 1452 1456 1460 1464 1468 1472 1476 1480 1484 1488 1492 1496 1504 1508 1512 1516 1520 1524 1528 1532 1536 1540 1544 1548 1552 1556 1560 1564 1568 1572 1576 1580 1584 1588 1592 1596 1600 1604 1608 1612 1616 1620 1624 1628 1632 1636 1640 1644 1648 1652 1656 1660 1664 1668 1672 1676 1680 1684 1688 1692 1696 1704 1708 1712 1716 1720 1724 1728 1732 1736 1740 1744 1748 1752 1756 1760 1764 1768 1772 1776 1780 1784 1788 1792 1796 1804 1808 1812 1816 1820 1824 1828 1832 1836 1840 1844 1848 1852 1856 1860 1864 1868 1872 1876 1880 1884 1888 1892 1896 1904 1908 1912 1916 1920 1924 1928 1932 1936 1940 1944 1948 1952 1956 1960 1964 1968 1972 1976 1980 1984 1988 1992 1996 2000  

count=243

注意int count=0;要写在靠前一点的地方(循环的外面)

化简版本

#include <stdio.h>
int main()
{
  int year=0;
  int count =0;
  for(year=1000;year<=2000;year++)
  {
    //判断year是否为闰年
    //1.能被4整除并且不能被100整除是闰年
    //2.能被400整除是闰年
    
    if (((year%4==0&&year%100!=0)||(year%400==0)))
    {
       printf ("%d ",year);
       count++;
    }
  }
  printf ("\ncount=%d\n",count);
   return 0;
}

结果同上

10.打印素数:写一个代码打印100至200之间的素数

#include <stdio.h>
int main()
{
  int i = 0;
  int count =0;
  for(i=100;i<=200;i++)
  {
    //判断i是不是素数
    //素数判断的规则
    //试除法
    //产生2至i-1
    int j =0;
    for(j=2;j<i;j++)
    {
      if(i%j==0)
      {
        break;
      }
    }
    if(j==i)
    {
      count ++;
      printf("%d ",i);
    }
  }
  printf ("\ncount=%d\n",count);
   return 0;
}

结果

101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199  

count=21

程序优化版

#include <stdio.h>
#include <math.h>
int main()
{
  int i = 0;
  int count =0;
  //sqrt开平方的数学函数
  for(i=100;i<=200;i++)//更加优化for(i=101;i<=200;i+=2)
                       //根据是:偶数不可能是素数,所以更加简化
  {
    //判断i是不是素数
    //素数判断的规则
    //试除法
    //产生2至i-1
    int j =0;
    for(j=2;j<=sqrt(i);j++)
    {
      if(i%j==0)
      {
        break;
      }
    }
    if(j>sqrt(i))
    {
      count ++;
      printf("%d ",i);
    }
  }
  printf ("\ncount=%d\n",count);
   return 0;
}

加上数学函数结果同上

11.1至100中含9的个数

#include <stdio.h>
int main()
{
  int i =0;
  int count = 0;
  for(i=1;i<=100;i++)
  {
    if(i%10==9)
    count ++;
    if(i/10==9)
    count ++;
  }
  printf ("%d \n",count);
   return 0;
}

结果

20

12.分数求和:计算1-1/2+1/3-1/4+...+1/99-1/100的值打印出结果

#include <stdio.h>
int main()
{
  int i =0;
  double sum=0.0;//浮点类型
  int flag=1;//做符号变化正负循环
  for(i=1;i<=100;i++)
  {
    sum +=flag*1.0/i;//必须是1.0/i才能计算出浮点数
    //如果是1/i,两个整形相除得到的是余数
    flag =-flag;

  }
  printf("%lf",sum);
   return 0;
}

结果0.688172

13.求最大值,求10个整数中最大值

10个正数

#include <stdio.h>
int main()
{
  int arr[]={1,2,3,4,5,6,7,8,9,10};
  int max =0;//最大值
  int i =0;
  int sz =sizeof(arr)/sizeof(arr[0]);//求数组元素个数
  for (i=0;i<sz;i++)
  {
     if (arr[i]>max)
     {
      max=arr[i];
     }

  }
  printf ("max=%d\n",max);
   return 0;
}

结果10

10个负数(更加完善)都适用

#include <stdio.h>
int main()
{
  int arr[]={-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};
  int max =arr[0];//最大值
  int i =0;
  int sz =sizeof(arr)/sizeof(arr[0]);//求数组元素个数
  for (i=1;i<sz;i++)
  {
     if (arr[i]>max)
     {
      max=arr[i];
     }

  }
  printf ("max=%d\n",max);
   return 0;
}

结果

-1

14.乘法口诀表的打印

在屏幕上输出9*9乘法口诀表

#include <stdio.h>
int main()
{
  int i=0;
  //确定打印9行
  for (i=0;i<=9;i++)
  {
    //打印一行
    int j=1;
    for (j=1;j<=i;j++)
    {
      printf("%d*%d=%-2d ",i,j,i*j);//-2d左对齐两位不够空格补
    }                              //2d右对齐两位不够空格补
    printf ("\n");
  }

 
   return 0;
}

结果

1*1=1  

2*1=2  2*2=4  

3*1=3  3*2=6  3*3=9  

4*1=4  4*2=8  4*3=12 4*4=16  

5*1=5  5*2=10 5*3=15 5*4=20 5*5=25  

6*1=6  6*2=12 6*3=18 6*4=24 6*5=30 6*6=36  

7*1=7  7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49  

8*1=8  8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64  

91=9  92=18 93=27 94=36 95=45 96=54 97=63 98=72 9*9=81 

15猜数字游戏

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu ()
{
  printf("**********************************\n");
  printf("****    1.play      0.exit    ****\n");
  printf("**********************************\n");
}
void game()
{
     //generates a pseudorandom number.1.
     int ret = 0;
     int guess = 0;//receive guess number
    //拿时间戳来生成随机数的生成起点
    

     ret =  rand()%100+1;

     //printf("%d\n",ret);
     //guess number
     while (1)
     {
      printf("guess it");
      scanf("%d",&guess);
      if(guess>ret)
      {
        printf ("bigger\n");
      }
      else if(guess<ret)
      {
        printf("smaller\n");
      }
      else 
      {
        printf("you guess it\n");
        break;
      }
     }
     

    
}
int main()
{
  int input = 0;
   srand((unsigned int)time(NULL));
  do
  {
      menu();
      printf("please select");
      scanf("%d",&input);
      switch (input)
      {
      case 1 :
          game();
          
        break;
      
      case 0 :
        printf("exit game\n");
        break;
      default:
        printf("select wrong\n");
        break;
      }
  }
  while(input);

 
   return 0;
}

16.goto语句

#include <stdio.h>
int main()
{
again:
  printf("12306\n");
  goto again;
 
   return 0;
}

关机程序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
  char input[20]={0};
  system("shutdown -f -s -t 3600"); //3600秒后关机//system系统函数调用#include <stdlib.h>
  again:
  printf ("attention pc will dea in a minute if input 123 can cancel it\n");
  scanf("%s",input);
  if(strcmp(input,"123")==0)//strcmp字符串比较函数调用#include <string.h>
  {
  system("shutdown -a"); 
  }
  else
  {
    goto again;
  }
   return 0;
}