1. 计算n的阶乘。
- //while for do.while
- //1*2*3*4*5
- #include
- int main()
- {
- int n = 0;
- scanf("%d", &n);//5
- //循环产生1~n的数字
- int i = 0;
- int ret = 1;
- for (i = 1; i <= n; i++)
- {
- ret = ret * i;
- }
- printf("%d\n", ret);
- return 0;
- }
2. 计算 1!+2!+3!+……+10!
//计算 1!+2!+3!+……+10!
//1! =1
//2! =1*2 = 1!*2
//3! =1*2*3 = 2!*3
//4! =1*2*3*4=3!*4
//5!=4!*5
- int main()
- {
- int n = 0;
- int i = 0;
- int ret = 1;
- int sum = 0;
- //1 + 2 + 6 = 9
- //调试 - 让代码一步步走,我们一步步的观察
- for (n = 1; n <= 3; n++)
- {
- ret = 1;
- for (i = 1; i <= n; i++)
- {
- ret = ret * i;
- }
- sum = sum + ret;
- }
-
- printf("%d\n", sum);
- return 0;
- }
改进
- int main()
- {
- int n = 0;
- int i = 0;
- int ret = 1;
- int sum = 0;
- //1 + 2 + 6 = 9
- //调试 - 让代码一步步走,我们一步步的观察
- scanf("%d", &n);//3
- for (i = 1; i <= n; i++)
- {
- ret = ret * i;
- sum = sum + ret;
- }
- printf("%d\n", sum);
- return 0;
- }
3. 在一个有序数组中查找具体的某个数字n。(讲解二分查找)
- //在一个【有序数组】中查找具体的某个数字n
- //
- int main()
- {
- //数组如果有n个元素,最坏的情况下要找n次
- int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
- int k = 7;//查找7
- int i = 0;
- int flag = 0;
- for (i = 0; i < 10; i++)
- {
- if (arr[i] == k)
- {
- printf("找到了,下标是:%d\n", i);
- flag = 1;
- break;//跳出整个循环
- }
- }
- //break, 找不到的时候也会来到这里
- if (flag == 0)
- printf("找不到\n");
-
- return 0;
- }
改进----二分法
- int main()
- {
- //数组如果有n个元素,最坏的情况下要找n次
- int arr[10] = { 1,2,3,4,5,6,17,18,19,110 };
- int k = 7;//查找7
- int left = 0;
- int right = 9;
- int flag = 0;
- 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("找到了,下标是:%d\n", mid);
- flag = 1;
- break;
- }
- }
- if (flag == 0)
- printf("找不到\n");
-
- return 0;
- }
- //二分查找
- //查找32
- //顺序查找
- int main()
- {
- int arr[] = {0,1,2,32,55,58,94,1001};
- int k = 32;
- int left = 0;
- int right = sizeof(arr) / sizeof(arr[0]);
- int mid = 0;
- int flag = 0;//标志
- while (left <= right)
- {
- int mid = (left + right) / 2;
- if (arr[mid] > k)
- {
- right = mid - 1;
- }
- else if (arr[mid]
- {
- left = mid + 1;
- }
- else
- {
- printf("找到了,下标是:%d\n", mid);
- flag = 1;
- break;
- }
- }
- if (flag == 0)
- printf("找不到");
- return 0;
- }
4. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。
1)编写代码,演示多个字符从两端移动,向中间汇聚。
2)程序员生成一个1-100的随机数
3)猜数字
猜小了,程序会告诉你猜小了,继续猜
猜大了,程序会告诉你猜大了,继续猜
猜对了,程序员会告诉你:恭喜你,猜对了
4)游戏可以反复的玩
//rand
//break只跳出循环,不跳出if,break跳出了while
- //程序目的
- //welcome to bit!!!!!
- //*******************
- //w*****************!
- //we***************!!
- //wel*************!!!
- //...
- //welcome to bit!!!!!
- //
- #define _CRT_SECURE_NO_WARNINGS
- #include
- #include
- #include
- #include
-
- //刚进入的动态图
- void Menu()
- {
- //char arr[] = "bit";//[b i t \0]
- // 0 1 2 3
- //strlen(arr)-1;
-
- char arr1[] = "welcome to bit!!!!!";
- char arr2[] = "*******************";
- int left = 0;//左下标
- int right = strlen(arr1)-1;
-
- while (left<=right)
- {
- arr2[left] = arr1[left];
- arr2[right] = arr1[right];//目的使**被字母符号所覆盖
- printf("%s\n", arr2);
- Sleep(1000);//Sleep函数是实现睡眠,单位是毫秒
- //头文件stdlib.h
- system("cls");//system是一个库函数,可以执行系统命令,cls是清空屏幕的一个命令
- //头文件stdlib.h
- left++;
- right--;
- }
-
- printf("%s\n", arr2);
-
- return 0;
- }
-
-
- #include
- #include
- //登陆页面
- void lo_gin()
- {
- //假设密码是:字符串“123456”
- int i = 0;
- char password[20] = {0};//字符数组,可以存放字符串
- int flag = 0;//设为初值,若返回的0则输出错误
- for (i = 0; i < 3; i++)//三次循环
- {
- printf("请输入密码:>\n");
- scanf("%s", password);//数组名本质上就是地址,所以不需要取地址符号&
- //
- //判断两个字符串是否相等,要使用strcmp函数,不能直接使用==//头文件
- //int ret = strcmp(password, "123456");
- //如果第一个字符串小于第二个字符串,返回<0的数字
- //如果第一个字符串大于第二个字符串,返回>0的数字
- //如果第一个字符串等于第二个字符串,返回0
- //
- if (0 == strcmp(password,"123456"))//一对字符一对字符相比
- {
- printf("登录成功\n");
- flag = 1;
- break;
- }
- else
- {
- printf("第%d次密码错误\n", i + 1);
- }//此处的if...else是或语句
- }
- if (flag == 0)
- {
- printf("三次密码均输入错误,退出程序\n");
- }
-
- return 0;
- }
-
- #include
- #include
- #include
-
- void menu()//空函数,不返回任何值
- {
- printf("**************************\n");
- printf("****** 1. play ******\n");
- printf("****** 0. exit ******\n");
- printf("**************************\n");
- }
-
- //rand函数是专门用来生成随机数的
- //rand函数返回的是0~RAND_MAX(32767)之间的一个随机数
- //#define RAND_MAX 0x7fff
- //
- //
- //
- //rand函数在使用之前要使用一个srand函数来设置随机数的生成器
- //srand函数在程序中只要调用一次就可以了,不需要频繁调用
- //
- //
- //
- //时间戳
- //C语言中,time函数会返回时间戳
- //
- //NULL - 空指针
-
- void game()
- {
- int num = 0;
- //1. 生成随机数
- int ret = rand()%100+1;//运用取余符号可以生成1-100的随机数
- //printf("%d\n", ret);
- //2. 猜数字
-
- while (1)
- {
- printf("请猜数字:>");
- scanf("%d", &num);
- if (num < ret)
- {
- printf("猜小了\n");
- }
- else if (num > ret)
- {
- printf("猜大了\n");
- }
- else
- {
- printf("恭喜你,猜对了\n");
- break;//跳出整个while循环
- }
- }
- }
-
- int main()
- {
- Menu();
- lo_gin();
- int input = 0;
- srand((unsigned int)time(NULL));//生成一个种子//time的头文件是time.h
- do
- {
- //打印菜单
- menu();
- printf("请选择:>");
- scanf("%d", &input);
- switch (input)
- {
- case 1:
- game();//game函数中是猜数字的整个路基逻辑
- break;
- case 0:
- printf("退出游戏\n");
- break;
- default:
- printf("选择错误,重新选择\n");
- break;
- }
- } while (input);
-
- return 0;
- }
4.打印100~200之间的素数
- //写一个代码:打印100~200之间的素数
- #include
- #include
//调用数学函数 - int i = 0;
- int k = 0;
- int main()
- {
- for (i = 100; i <= 200; i++)//输出所有的素数
- {
- int flag = 1;
- for (k = 2; k <= sqrt(i); k++)
- {
- if (i % k == 0)
- {
- flag = 0;
- break;
- }
- }//判断一个数是否为素数
- if(flag==1)
- {
- printf("%d ", i);
- }
- }
- return 0;
- }
5.从大到小输出
//交换记得增加变量
- 从大到小排序
-
- #include
- int main()
- {
- int a = 0;
- int b = 0;
- int c = 0;
- scanf("%d %d %d", &a, & b, &c);
- if (a < b)
- {
- int d = a;
- a = b;
- b = d;
- }
- if (a < c)
- {
- int d = a;
- a = c;
- c = d;
- }
- if (b < c)
- {
- int t = b;
- b=c;
- c = t;
- }
- printf("%d %d %d", a, b, c);
- return 0;
-
- }
6. 打印1000年到2000年之间的闰年
闰年:
1. 能被4整除,并且不能被100整除是闰年
2. 能被400整除是闰年
- int main()
- {
- int i = 0;
- for (i = 1000; i <= 2000; i++)
- {
- if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
- {
- printf("%d ", i);
- }
-
- }
- return 0;
- }
if
if
含义为或且并列
7.最大公约数
1)辗转相除法
- int main()
- {
- int m, n = 0;
- scanf("%d %d", &m, &n);
- int k = 0;//m>n输出n,否则输出m
- //24%18=6--此时6就是公约数
- //18%6=0
- while (k = m % n)//当0循环终止
- {
- m = n;
- n = k;
- }
- printf("%d", n);
- return 0;
- }
2)实验法--计算量大
- //实验法
- int main()
- {
- int m = 0;
- int n = 0;
- //输入
- scanf("%d %d", &m, &n);//18 24
- int k = (m > n ? n : m);
- //假设最大公约数就是m和n的较小值
- while (1)
- {
- if (m % k == 0 && n % k == 0)
- {
- break;
- }
- k--;
- }
- printf("%d\n", k);
-
- return 0;
- }
6.求10 个整数中最大值
- //求10 个整数中最大值
- int main()
- {
- int arr[10] = {0};
- int i = 0;
- int sz = sizeof(arr) / sizeof(arr[0]);
- int max = arr[0];
- for (i = 0; i < 10; i++)
- {
- scanf("%d", &arr[i]);
- }
- /*for (i = 0; i < sz;i++)*/
- for (i = 0; i < 10; i++)
- {
- if(arr[i]>max)
- {
- max = arr[i];
- }
- }
- printf("%d", max);
- }
7.计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
- int main()
- {
- int i = 0;
- double sum = 0.0;
- int flag = 1;
- for (i = 1; i <= 100; i++)
- {
- sum = sum +flag*( 1.0 / i);//记住为1.0不能为1,其必须为浮点类型
- flag = -flag;
- }
- printf("%lf", sum);
- return 0;
- }
8.三角形圣诞树
描述
输入一个字符,用它构造一个边长为5的三角形圣诞树。
数据范围:保证输入的字符是一个 char 类型的值
输入描述:
输入只有一行,一个字符。
输出描述:
该字符构成的三角形圣诞树。
- #define _CRT_SECURE_NO_WARNINGS
- #include
-
- int main()
- {
- //4个空格一个1
- //3个空格1空格1
- //
- char m;
- scanf("%c", &m);
- int i;
- int j;
- int k;
- for (i = 0; i < 5; i++)
- {
- for (j = 0; j < 4 - i; j++)
- {
- printf(" ");
- }
- for (k = 0; k < i + 1; k++)
- {
- printf("%c ", m);
- }
- printf("\n");
- }
- return 0;
- }