C语言复习笔记4

for循环:会出现死循环,注意i的地址会跟越界的arr[i]相等,所以出现死循环。

#include<stdio.h>

int main()
{
  int i=0;
  int arr[10];
  for(i=0;i<=12;i++)
  {
    arr[i]=0;
    printf("hehe\n");
    printf("%d,%d\n",&arr[i],&i);
  }
  return 0;
}

只打印10个haha

#include<stdio.h>
int main()
{
  int i=0;
  int j=0;
  for(;i<10;i++)
  {
    for(;j<=10;j++)
    {
      printf("haha\n");
    }
  }

  return 0;
}

continue跳过本轮循环

#include<stdio.h>

int main()
{
  int i=0;
  for( ;i<=10;i++)
  {
    if(i==4)
      continue;
    printf("%d ",i);
  }
  return 0;
}

 getchar函数

#include<stdio.h>

int main()
{
  // int ch = getchar();
  // printf("%c\n",ch);
  int ch = 0;
  while(ch = getchar())
  {
    putchar(ch);
  }
   return 0;
}

 

 goto语句造成的死循环

#include<stdio.h>

int main()
{
flag:
  printf("hehe\n");
  goto flag;
  return 0;
}

猜数字游戏

#include<stdio.h>
#include<time.h>
#include<stdlib.h>

void mune()
{
  printf("******猜数字*********\n");
  printf("***1.play 0.exit ****\n");
  printf("*********************\n");
}

void game()
{
  int guess = 0; 
  int ret = rand()%100+1;
  
  while(1)
  {
    printf("请猜数字:>");
    scanf("%d",&guess);
    if(guess>ret)
    {
      printf("猜大了\n");
    }
    else if(guess<ret)
    {
      printf("猜小了\n");
    }
    else
    {
      printf("恭喜你,猜对了\n");
      break;
    }
  }
}

int main()
{
  srand((unsigned int)time(NULL));
  int input = 0;
  do
  {
    mune();
    printf("请输入选项\n");
    scanf("%d",&input);
    switch(input)
    {
      case 1:
        game();
        break;
      case 0:
        break;
      default:
        break;
    }
  }
  while(input);
    return 0;
}

 getchar需要清空缓冲区的情况

#include<stdio.h>

int main()
{
  char password[20]={0};
  printf("Pless input the password :>");
  scanf("%s",&password);
  printf("Pless confirm(Y/N):");
  //清空缓冲区
  // getchar(); 
  while(getchar()!='\n');
  {}
  
  int ret = getchar();
  if(ret=='Y')
  {
    printf("确认成功\n");
  }
  else
  {
    printf("确认失败\n");
  }

  return 0;
}

三次输入密码的机会

#include<stdio.h>
#include<string.h>

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

  for( i=0;i<3;i++)
  {
    printf("请输入密码:>");
    scanf("%s",password);//数组名代表数组首元素地址,不需要&i
    //两字符串比较,不能用==
    if(strcmp(password, "123456")==0)
    {
      printf("密码正确\n");
      break;
    }
    else
    {
      printf("密码错误\n");
    }
  }
  if(i==3)
  {
    printf("密码错误三次,程序退出\n");
  }
  return 0;
}

 

 二分查找

#include<stdio.h>

int binarySearch(int arr[], int len,int key)
{
  int left = 0,right = len-1;
  while(left<=right)
  {
    int mid = (left+right)/2;
    if(arr[mid]==key)
      return mid;
    else if(arr[mid]>key)
      right = mid-1;
    else
      left = mid+1;
  }
  return -1;
}

int search(int left, int right, int arr[], int key)
{
  if(left>right)
    return -1;
  int mid = (left+right)/2;
  if(key==arr[mid])
  return mid;
  else if(key>arr[mid])
    return search(left+1,right,arr,key);
  else
    return search(left,right-1,arr,key);
}
int binarySearch1(int arr[], int len, int key)
{
  int left = 0, right = len-1;
  return search(left,right,arr,key);
}

int main()
{

  int arr[]={1,2,3,4,5,6,7,8,9,10};
  int k=7;
  int ret = binarySearch1(arr,sizeof(arr)/sizeof(arr[0]),k); 
  printf("%d\n",ret);

  return 0;

求某个数的阶乘

#include<stdio.h>

int main()
{
  int i=1;
  int ret = 1;
  int n=0;
  scanf("%d",&n);
  if(n<=0)
  {
    printf("输入非法\n");
  }
  
  while(i<=n)
  {
    ret*=i;
    i++;
  }

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

  return 0;
}

 求10的阶乘

#include<stdio.h>
int main()
{
  int i=0;
  int j=0;
  int ret =1; 
  int sum=0;

 // for(i=1;i<=10;i++)
 // {
  //  for(j=1;j<=i;j++)
  //  {
  //    ret*=j;
  //  }
  //  sum+=ret;
  //  ret=1;
 // }
   for(i=1;i<=10;i++)
   {
     ret*=i;
     sum+=ret;
   }

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

 循环的使用

#include<stdio.h>
#include<string.h>
#include<unistd.h>

int main()
{
  char arr1[] = "welcome to C!!!";
  char arr2[] = "###############";
  int left = 0;
  int right = strlen(arr1)-1;//strlen不用考虑\n
 // int right = sizeof(arr1)/sizeof(arr1[0])-2;//需要考虑\n
  while(left<=right)
  {
     arr2[left] = arr1[left];
     arr2[right] = arr1[right];
     printf("%s\n",arr2);
     sleep(1);
     left++;
     right--;
  }

  return 0;
}

 while循环 死循环

#include<stdio.h>

int main()
{
  int i=1;
  while(i<=10)
  {
    if(i==5)
     // break;
     continue;
    printf("%d ",i);
    i++;
  }
  printf("\n");
  return 0;
}

dowhile循环

#include<stdio.h>

int main()
{
  int i=1;
  do
  {
  printf("%d ",i);
  i++;
  }
  while(i<=10);
  return 0;
}

 关机小游戏

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
	char input[20] = { 0 };
	system("shutdown -s -t 60");
	//again:
	while (1)
	{
		printf("你的电脑在1分钟内关机,如果输入:我是猪,就取消关机\n");
		scanf("%s", input);
		if (!strcmp(input, "我是猪"))
		{
			system("shutdown -a");
			break;
		}
	}
	//else
	//{
	//	goto again;
	//}

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值