1、计算n的阶乘
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int n;
int num = 1; //记录结果
scanf("%d", &n);
for (int i = 1; i <= n; i++) //采用循环的方式将结果累乘给ret
{
num = num * i;
}
printf("n的阶乘为:%d", num);
return 0;
}
2、计算1!+2!+……+10!
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//计算1!+2!+……+10!
int main()
{
int num = 1; //记录每一项阶乘结果
int sum = 0; //记录求和结果
for (int i = 1; i <= 10; i++) //采用循环的方式将结果累乘给ret
{
num = num * i; //由于(i+1)! = i! × (i+1), 所以直接在上一个阶乘结果的基础上乘++后的i就是新的阶乘结果
sum = sum + num; //将每次的阶乘结果相加
}
printf("1!+2!+……+10! = %d\n", sum); // 4037913
return 0;
}
3、编写代码,演示多个字符从两端移动,向中间汇聚
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <windows.h>
int main()
{
char arr1[] = "Welcome To China !";
char arr2[] = "******************";
int left = 0;
int right = strlen(arr1) - 1; //最右端下标比长度少1
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000); //睡眠1000毫秒(1秒)【每次输出间隔1s】
system("cls"); //清屏操作【每次输出只显示1行】
left++; //左下标往右移
right--; //右下标往左移
}
return 0;
}
注:
- (1)Sleep(); 睡眠操作,睡眠时间的单位是毫秒, 必须加【#include <windows.h>】头文件才能使用
- (2)system(“cls”); 清屏操作
4、模拟用户登录
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//只允许输入三次密码,如果密码正确,则提示登录成功,如果三次均输入错误,则退出程序
//假设正确密码:123456Lmy
int main()
{
char key[10];
int i;
int flag = 0; //用来记录最终是否输入正确
for (i = 0; i < 3; i++)
{
printf("请输入密码:");
scanf("%s", key);
if (strcmp(key, "123456Lmy") == 0) //判断字符串是否相等需使用strcmp函数
{
printf("密码正确\n");
flag = 1;
break;
}
else
{
printf("密码错误,请重新输入\n");
}
}
if (flag == 0)
{
printf("密码多次错误,退出程序\n");
}
return 0;
}
注:
- (1)判断密码是否正确不能用【key == “123456”】。等于号不能判断两个字符串是否相等
- (2)判断字符串是否相等需使用 strcmp 函数,若左右两端字符串相等,则返回0
- (3)若用 scanf 输入,密码中不能有空格,scanf 扫描到空格自动停止
5、乘法口诀表
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
for (i = 1; i <= 9; i++) //行
{
//打印每一行内容,每行有i个表达式(i列)
for (j = 1; j <= i; j++) //列
{
printf("%d * %d = %d ", j, i, j * i);
}
printf("\n");
}
return 0;
}
6、打印素数
(1)试除法
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//写一个代码:打印100~200之间的素数
int main()
{
int i = 0;
int count = 0; //计算素数个数
for (i = 100; i <= 200; i++)
{
int j = 0;
int flag = 0; //假设i是素数
for (j = 2; j < i; j++) //判断i是否为素数:用[2, i)之间的每个数据去被i除,只要有一个可以被整除,则不是素数
{
if (i % j == 0)
{
flag = 1; //不是素数
break;
}
}
// 上述循环结束之后,如果flag == 0,说明[2, i)之间的所有数据都不能被i整除,则i为素数
if (flag == 0)
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count); // 21
return 0;
}
(2)开平方法
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
//写一个代码:打印100~200之间的素数
int main()
{
int i = 0;
int count = 0; //计算素数个数
for (i = 100; i <= 200; i++)
{
int j = 0;
int flag = 0; //假设i是素数
for (j = 2; j <= sqrt(i); j++) //判断i是否为素数:用2 ~ i的开平方之间的每个数据去被i除,只要有一个可以被整除,则不是素数
{
if (i % j == 0)
{
flag = 1; //不是素数
break;
}
}
// 上述循环结束之后,如果flag == 0,说明[2, i)之间的所有数据都不能被i整除,则i为素数
if (flag == 0)
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count); // 21
return 0;
}
注:
- (1)用 sqrt() 要包含头文件【#include <math.h>】
- (2)原理:如果 m 能被 2 ~ m-1 之间任一整数整除,其两个因子必定有一个小于或等于sqrt(m),另一个大于或等于 sqrt(m)
(3)只算奇数法
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
//写一个代码:打印100~200之间的素数
int main()
{
int i = 0;
int count = 0; //计算素数个数
for (i = 101; i <= 200; i+=2)
{
int j = 0;
int flag = 0; //假设i是素数
for (j = 2; j <= sqrt(i); j++) //判断i是否为素数:用[2, i)之间的每个数据去被i除,只要有一个可以被整除,则不是素数
{
if (i % j == 0)
{
flag = 1; //不是素数
break;
}
}
// 上述循环结束之后,如果flag == 0,说明[2, i)之间的所有数据都不能被i整除,则i为素数
if (flag == 0)
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count); // 21
return 0;
}
注:
- (1)从i = 101开始,每次 i+2,只判断奇数(偶数肯定不是素数)
- (2)原理:只要i不被[2, sqrt(i)]之间的任何数据整除,则i是素数,但是实际在操作时,i不用从101逐渐递增到200,因为出了2和3之外,不会有两个连续相邻的数据同时为素数
7、ASCII码
printf("%c\n", 'A'); //A
printf("%c\n", 65); //A
printf("%d\n", 'A'); //65
注:
- (1)输出形式若为%c,直接打印字符 ‘A’ 时,内存存入的是A对应的ASCII码值,输出时,输出的是ASCII值对应的字符 — A
- (2)输出形式若为%c,打印65时,内存将65视为ASCII码值,输出时,输出的是ASCII值65对应的字符 — A
- (3)输出形式若为%d,直接打印字符 ‘A’ 时,内存存入的是A对应的ASCII码值,输出时,输出的是A对应的ASCII值 — 65
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//字符常量或字符变量表示的字符在内存中以ASCII码形式存储
//转换以下ASCII码为对应字符并输出他们:73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116, 33
int main()
{
char arr[] = { 73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]); //计算数组的元素个数
for (i = 0; i < sz; i++) //循环遍历输出每一个元素
{
printf("%c", arr[i]); //%c 控制打印字符
}
return 0;
}
8、猜数字游戏
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//电脑生成一个(1-100)的随机数
void menu()
{
printf("*******************************\n");
printf("********* 1. play *********\n");
printf("********* 0. exit *********\n");
printf("*******************************\n");
}
void game()
{
//生成随机数【rand函数使用需引头文件<stdlib.h>】
//rand函数会返回一个0--32767之间的随机数, 通过%100 + 1来控制随机数范围在1--100
int ret = rand() % 100 + 1; //(0 - 99)+1 ——> (1 - 100)
int guess;
while (1)
{
printf("请输入数字:");
scanf("%d", &guess);
if (guess > ret)
{
printf("您猜大了\n");
}
else if (guess < ret)
{
printf("您猜小了\n");
}
else
{
printf("恭喜您,猜对了\n");
printf("\n");
break;
}
}
}
int main()
{
int num;
srand((unsigned int)time(NULL)); //设置随机数生成器
//srand函数使用需引头文件<stdlib.h>
//time函数使用需引头文件<time.h>
//srand函数用来控制rand生成随机数,需给srand一个随机整形值来生成
//通过time函数返回的时间戳充当随机整形值
do
{
menu();
printf("请选择:");
scanf("%d", &num);
switch (num)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入!!!\n");
break;
}
}
while (num); //若num一直不为0,表达式则一直为真,则一直进行循环
return 0;
}