1.二分查找
int main()//查找有序数组(二分查找)
{
int left, right, mid;
int arr[] = { 1,3,4,5,6,7,9 };//查找时arr不能随便设数,否则找不到
int len = sizeof(arr) / sizeof(arr[0]);//计算元素个数
int key = 5;
left = 0;//左下标
right = len-1;//右下标
while (left <= right)
{
mid = (left + right) / 2;
if (key < arr[mid])
{
right = mid - 1;
}
else if (key > arr[mid])
{
left = mid + 1;
}
else
{
printf("找到了,下标为:%d", mid);
break;
}
}
if (left > right)
{
printf("找不到");
}
return 0;
}
strlen不能计算int数组大小
int found(int left,int right,int num,int* arr)
{
int mid;
while (1)
{
mid = (left + right) / 2;
if (num < arr[mid])
right = mid - 1;
else if (num > arr[mid])
left = mid + 1;
else
return mid;
if (left > right)
return -1;
}
}
int main()//有序数组,二分查找
{
int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
int left = 0;
int right = sizeof(arr)/sizeof(arr[0])-1;
int num = 0,ret=0;
printf("请输入要查找的数:");
scanf("%d", &num);
ret=found(left, right, num, arr);
if (-1 != ret)
printf("找到了,下标为:%d", ret);
else
printf("找不到");
return 0;
}
2.演示多个字符从两端向中间移动
int main()//演示多个字符从两端向中间移动
{
//nice to meet you!!!
//###################
//n#################!
//ni###############!!
//..............
//nice to meet you!!!
char arr1[] = "nice to meet you!!!";
char arr2[] = " ";
int left = 0;
int right = strlen(arr1)-1;//没有'\0'
//int right = sizeof(arr1) / sizeof(arr1[0])-1;//error,为字符串后面的'\0'
//char arr[]="abc"
//数组有4个元素,
//[a b c /0]
//[0,1,2,3 ]
//4-1=3
//right应为sizeof(arr1) / sizeof(arr1[0])-2
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(500);//休息500ms,即0.5s,#include<Windows.h>
if (left < right)
{
system("cls");//执行系统命令的一个函数-cls-清空屏幕,#include<stdlib.h>
}
left++;
right--;
}
return 0;
}
3.模拟用户登录情景
int main()//模拟用户登录情景
{
int i = 0;
char password[20];
for (;i < 3;i++)
{
printf("请输入密码:");
scanf("%s", password);
//if ("123456" == password)//==不能用来比较两个字符串是否相等
if(strcmp(password,"123456") == 0)
//strcmp(a,b) 如果a>b,返回数字>0,如果a<b,返回数字<0
{
printf("输入正确!");
break;
}
else
{
printf("密码错误\n");
}
}
if (3 == i)
{
printf("你没机会啦");
}
return 0;
}
==不能用来比较两个字符串是否相等
4.比较三个数大小
int main()//从大到小输出
{
//a最大,b中间,c最小
int a = 0, b = 0, c = 0,temp=0;
scanf("%d%d%d", &a, &b, &c);
if (a < b)
{
temp = a;
a = b;
b = temp;
}
if (a < c)
{
temp = a;
a = c;
c = temp;
}
if (b < c)
{
temp = b;
b = c;
c = temp;
}
printf("%d,%d,%d", a, b, c);
return 0;
}
scanf("%d%d%d", &a, &b, &c);
格式里面什么形式,输入就是什么形式
eg1:
scanf("%d%d%d", &a, &b, &c);
输入:
a b c
eg2:
scanf("%d,%d,%d", &a, &b, &c);
输入:
a,b,c
eg3:
scanf("%d#%d#%d", &a, &b, &c);
输入:
a#b#c
5.辗转相除法
int main()//辗转相除法
{
int m = 1, n = 1, r = 1;
scanf("%d%d", &m, &n);
while (r = m % n)
{
m = n;
n = r;
}
printf("最大公约数为:%d", n);
return 0;
}
6.判断闰年
int main()
{ //判断vear是否为闰年
//1.能被4整除并且不能被100整除是闰年
//2.能被400整除是闰年
int count = 0;
for (int year = 1000;year <= 2000;year++)
{
if (0 == year % 4 && 0 != year % 100)
{
printf("%d年 ", year);
count++;
}
else if (0 == year % 400)
{
printf("%d年 ", year);
count++;
}
}
printf("count=%d", count);
return 0;
}
7.判断素数
int main()
{
int i = 101,j = 0;
for (;i <= 200;i+=2)
{
//判断i是否为素数
//1.试除法
for(j=2;j<=sqrt(i);j++)//优化
//for (j = 2;j < i;j++)
{
if (0 == i % j)
break;
}
if(j>sqrt(i))
//if(i==j)
printf("%d ", i);
}
return 0;
}
函数
int is_prime(int x)
//不需要在函数里面打印.....
{
int i = 2;
for (;i <= sqrt(x);i++)
{
if (0 == x % i)
{
return 0;
}
}
if (i > sqrt(x))
{
return 1;
}
}
int main()
{
int n = 0;
printf("请输入一个数:");
scanf("%d", &n);
is_prime(n);
if (1 == is_prime(n))
printf("是素数");
else
printf("不是素数");
//printf("%s",is_prime(n));//溢出,char[3] %s
return 0;
}
sqrt()-开平方
素数求解的n种境界
8.判断9的个数
int main()//判断9的个数
{
int i = 1, count = 0;
for (;i <= 100;i++)
{
if (i % 10 == 9)
{
printf("%d ", i);
count++;
}
if (i / 10 == 9)
{
printf("%d ", i);
count++;
}
}
printf("count=%d", count);
return 0;
}
9.计算1/1-1/2+.....-1/100
int main()//计算1/1-1/2+.....-1/100
{
int flag = 1, i = 1;
//int sum = 0;
double sum = 0.0;
for (;i <= 100;i++)
{
sum += flag * (1.0 / i);
//sum += tag * (1 / i);//sum=1+0+0.....
flag = -flag;
printf("(%d/%d)", flag, i);
if (i < 100)
printf("+");
}
printf("\nsum=%lf", sum);
//printf("\nsum=%d", sum);
return 0;
}
10.打印九九乘法表
int main()//打印九九乘法表
{
int i = 1,j = 1;
for (;i <= 9;i++)
{
for (j = 1;j <= i;j++)
{
printf("%d*%d=%d\t", i, j, i*j);//%-2d
}
printf("\n");
}
return 0;
}
11.memset
int main()
{
char a1[] = "hello world!";
memset(a1,'*',5);
printf("%s", a1);
return 0;
}
12.猜数字
void menu()
{
printf("*****************************\n");
printf("****0.exit 1.play****\n");
printf("*****************************\n");
}
void game()
{
int ret = 0;
int guess = 0;
//拿时间戳来设置随机数的生成起点
//time_t time(time_t* timer)
//time_t
ret = rand() % 100 + 1;//生成1-100随机数,rand-32767
//printf("%d\n", ret);
while (1)
{
printf("请输入数字:");
scanf("%d", &guess);
if(guess>ret)
{
printf("猜大了\n");
}
else if (guess<ret)
{
printf("猜小了\n");
}
else
{
printf("猜对了!!\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));//生成随机数的随机数
do
{
menu();
printf("请输入选择:");
scanf("%d", &input);
switch (input)
{
case 0:
printf("退出游戏\n");
break;
case 1:
printf("猜数字\n");
game();
break;
default:
printf("重新输入:");
}
} while (input);
return 0;
}
13.关机
int main()
{
//shutdown -s -t 60//关机
//shutdown -a//取消关机
//system()-执行系统命令
char input[20];
system("shutdown -s -t 60");
again:
printf("你的电脑将在一分钟内关机,输入:我是猪,则取消关机。\n请输入:");
scanf("%s", input);
if ((strcmp(input, "我是猪")) == 0)
{
system("shutdown -a");
//break;//break 语句只能在循环或开关中使用
}
else
{
goto again;
}
return 0;
}
14.两数交换
//int swmp1(int x,int y)//不能交换
//{
// int tmp = 0;
// tmp = x;
// x = y;
// y = tmp;
//}
int swmp(int* pa,int* pb)
{
int tmp = 0;
tmp = *pa;
*pa = *pb;
*pb = tmp;
}
int main()
{
int a = 10, b = 20;
swmp(&a, &b);
printf("a=%d,b=%d", a, b);
}
15.*和++优先级
void add(int* p)
{
//*p++;//++优先级高于*
(*p)++;
}
int main()
{
int n = 0;
add(&n);
printf("n=%d\n", n);
add(&n);
printf("n=%d\n", n);
add(&n);
printf("n=%d\n", n);
}
16.打印数字(递归)
void print(int n)
//递归要有限制,不能死循环
{
if (n > 9)
{
print(n / 10);
}
printf("%d ", n % 10);
}
int main()
{
int num = 0;
//scanf("%d", &num);
//print(num);
print(12345);
return 0;
}
17.求字符串的长度(递归)
//编写函数不允许创建临时变量,求字符串的长度。
int my_strlen(char* a)
{
if ('\0' != *a)
return 1 + my_strlen(a + 1);
else
return 0;
}
int main()
{
char a[] = "nice to meet you";
int n = my_strlen(a);
printf("%d", n);
return 0;
}
18.n的阶乘(递归)
int fac(int n)
{
if (n > 0)
return n * fac(n - 1);
else
return 1;
}
int main()
{
int n = 5;
int ret = fac(n);
printf("%d", ret);
return 0;
}
19.斐波那契数列
//1 1 2 3 5 8 13 21 34 55
//int count = 0;
//int fib(int n)//递归
//{
// if (n == 3)//计算第3个斐波那契数计算次数
// count++;
// if (n > 2)
// return fib(n - 1) + fib(n - 2);
// else
// return 1;
//}
int fib(n)
{
int a = 1, b = 1, c = 1;
while (n > 2)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
int main()//斐波那契数列
{
int n = 10;
int ret=fib(n);
printf("ret=%d\n", ret);
//printf("count=%d", count);
return 0;
}
20.递归、栈溢出
void test(int n)
{
if (n < 1000000)
{
test(n + 1);
}
}
int main()
{
test(1);
return 0;
}
@TOC
在这里插入代码片
@TOC
在这里插入代码片