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;
}