第5行 将三个数按从小到大排序
第55行 1~100中三的倍数
第77行 求最大公约数 辗转相除法
第96行 打印1000~2000之间的闰年
第134行 打印100~200之间的素数
第168行 优化1
第195行 优化2
例题
第225行 由本题判断a的值
第246行 数9的个数 1~100 分数求和
第273行 1/1-1/2+1/3.....1/99-1/100
第291行 求十个数的最大值
第312行 在屏幕上输出乘法口诀表
第339行 猜字游戏
要有优化代码的意识 不能能跑就行
代码不要背 自己多敲多想 算法和思路
将三个数按从小到大排序
scanf("%d%d%d", &a, &b, &c);
//输入格式必须相同例子%d,%d,%d 1,2,3 %d#%d#%d 1#2#3 所以一般加空格 且中文,与英文,不同
//算法实现 a最大值,b次之,c最小
// int tmp = b;
// b = c;
// c = tmp
1~100中三的倍数
求最大公约数 辗转相除法
while (m % n)
{
r = m % n;
m = n;
n = r;
}
//r = m % n;//这样效率高一些
m = n;
n = r;
打印1000~2000之间的闰年
这里的循环要体会
for (year = 1000;year <= 2000;year++)
{
if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
{
printf("%d ", year);
count++;
}
}
打印100~200之间的素数
//素数判断的规则很多种
//1、试除法
//产生2->i-1的数
int j = 0;
for (j = 2;j < i;j++)
{
if (i % j == 0)
{
break;
}
}
if (j == i)
{
printf("%d ", i);
count++;
}
}
printf("\n找到的素数总数是%d", count);
这种算法还是太慢了
优化1
i=a*b a或b中至少有一个数 且<=开平方
#include <math.h>
sqrt开平方的数学库函数
for (j = 2;j < sqrt(i);j++)
if (j > sqrt(i))
{
printf("%d ", i);
count++;
}
优化2
还可以在优化,偶数肯定不是素数
for (i = 101;i <= 200;i+=2) //加等于2
判断a的值是什么
int main()
{
int a = 0, b = 0;
for (a = 1, b = 1;a <= 100;a++)
{
if (b >= 20) break; //判断 跳出循环
if (b % 3 == 1)
{
b = b + 3;
continue;
}
b = b - 5; //未执行
}
printf("%d\n", a);
return 0;
}
数9的个数 1~100
#include <stdio.h>
int main()
{
int i = 0, a = 0;
for (i = 1;i <= 100;i++)
{
/*if (i < 10 && i % 9 == 0)
{
a++;
}
if (i > 9 && i % 10 == 9)
{
a++;
}*/ //错误为10
if (i % 10 == 9)
a++;
//if (i / 10 == 9); //99有两个9 //这里加了个分号结束 所以会便成110
if (i / 10 == 9)
a++;
}
printf("%d\n", a); //20
return 0;
}
分数求和 1/1-1/2+1/3.....1/99-1/100
#include <stdio.h>
int main()
{
int i = 0;
double sum = 0.0;
int flag = 1;
for (i = 1;i <= 100;i++)
{
sum += flag*1.0 / i; //这里必须为1.0
flag = -flag;
}
//如果写int sum+=1/i; 则1/1+1/2+1/3...为1+0+0....
printf("%lf\n", sum);
return 0;
}
//求十个数的最大值
#include <stdio.h>
int main()
{
int arr[] = { -1,-2,-3,-4,-5,-6,-7,-8,-9,-10 };
//int max = 0; //写法错误 因为max可能是负数
int max = arr[0];
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 1;i < sz;i++) //这里可以用i=1
{
if (arr[i] > max)
{
max = arr[i];
}
}
printf("max=%d\n", max);
return 0;
}
在屏幕上输出乘法口诀表
//1*1=1
//2*1=2 2*2=4
//3*1=3 3*2=6 3*3=9
//....
//9*1=9 ....
#include <stdio.h>
int main()
{
int i = 0;
//确定打印9行
for (i = 0;i <= 9;i++)
{
//打印一行
int j = i;
for (j = 1;j <= i;j++)
{
printf("%d*%d=%-2d ", i, j, i * j); //%-2d 数字右对齐
}
printf("\n");
}
return 0;
}
猜字游戏
1、电脑会生成一个随机数
2、猜数字
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void game()
{
int ret = 0;
int guess = 0;
//时间戳 :当前时间·减计算机的起始时间(2022.1.1.0:0)
//1\生成一个随机数
ret = rand() % 100 + 1; // 生成1~100随机数 不能放在循环里
//printf("%d\n", ret);
//2、猜数字
while (1)
{
printf("请猜数字:");
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了\n"); //别写反了
}
else if (guess < ret)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了!\n");
break; //记得跳出循环
}
}
}
void menu()
{
printf("***************************\n");
printf("*** 1.play 2.exit ***\n");
printf("***************************\n");
}
int main()
{
int input;
srand((unsigned int)time(NULL)); //拿时间戳设置随机数,强制类型转换long
//放外面调一次就可以
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
game();//猜字游戏
break;
case 0:
printf("退出游戏\n");
default :
printf("请输入1或0\n");
break;
}
} while (input);
return 0;
}
恶作剧但要先改系统配置
服务-可将可执行程序调成自动
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char input[20] = { 0 };
//cmd command-命令行
//shutdown -s -t 60 电脑将在一分钟内关闭 shutdown -a 取消关机
//system() 执行系统命令的
system("shout -s -t -60");
again:
printf("请注意,你的电脑将在一分钟内关机,如果输入:我是猪,就取消关机\n请输入:");
scanf("%s", input);
if (strcmp(input, "我是猪") == 0) //比较两个字符串-strcmp()
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
//#include <stdio.h>
//
// //将三个数按从小到大排序
//
//int main()
//{
// int a = 0;
// int b = 0;
// int c = 0;
// scanf("%d%d%d", &a, &b, &c); //输入格式必须相同例子%d,%d,%d 1,2,3 %d#%d#%d 1#2#3 所以一般加空格 且中文,与英文,不同
// //算法实现 a最大值,b次之,c最小
// if (a < b)
// {
// int tmp = a;
// a = b;
// b = tmp;
// }
// if(a < c)
// {
// int tmp = a;
// a = c;
// c = tmp;
// }
// if (b < c)
// {
// int tmp = b;
// b = c;
// c = tmp;
// }
// printf("%d %d %d", a, b, c);
// return 0;
//}
//#include <stdio.h>
//
// //1~100中三的倍数
//
//int main()
//{
// int i = 0;
// for (i = 1;i <= 100;i++)
// {
// if (0 == i % 3)
// {
// printf("%d ", i);
// }
// }
// return 0;
//}
#include <stdio.h>
//求最大公约数 辗转相除法
int mian()
{
int m = 0;
int n = 0;
int r = 0;
scanf("%d%d", &m, &n);
while (m % n)
{
r = m % n;
m = n;
n = r;
}
printf("%d\n", n);
return 0;
}//这个代码为什么报错
//严重性 代码 说明 项目 文件 行 禁止显示状态
//错误 LNK2019 无法解析的外部符号 main,函数 "int __cdecl invoke_main(void)" (? invoke_main@@YAHXZ) 中引用了该符号 a20230210 C : \Users\lkjdn\Desktop\Visual Studio priject\a20230210\a20230210\MSVCRTD.lib(exe_main.obj) 1
//我换了一个编译器也出错 于是重写了代码 成功了
//#include <stdio.h>
//#include <stdlib.h>
//
//int main()
//{
// int m = 24;
// int n = 18;
// int r = 0;
// scanf("%d%d", &m, &n);
// while (r = m % n)
// {
// //r = m % n;//这样效率高一些
// m = n;
// n = r;
// }
// printf("%d\n", n);
// return 0;
//}
//
打印1000~2000之间的闰年
//#include <stdio.h>
//
//int main()
//{
// int year = 0;
// int count = 0;
// //for (year = 1000;year <= 2000;year++)
// //{
// // //判断year是否为闰年
// // //1、能被4整除且不能被100整除
// // //2、能被400整除的
// // if (year % 4 == 0 && year % 100 != 0) //&&并且
// // {
// // printf("%d ", year);
// // count++;
// // }
// // else if (0 == year % 400)
// // {
// // printf("%d ", year);
// // count++;
// // }
// //}
// for (year = 1000;year <= 2000;year++)
// {
// if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
// {
// printf("%d ", year);
// count++;
// }
// }
//
// printf("\n闰年的个数有%d个", count); //换行也可以放在前面
// return 0;
//}
//#include <stdio.h>
//
打印100~200之间的素数
//
//int main()
//{
// int i = 0;
// int count = 0;
// for (i = 100;i <= 200;i++)
// {
// //素数判断的规则很多种
// //1、试除法
// //产生2->i-1的数
// int j = 0;
// for (j = 2;j < i;j++)
// {
// if (i % j == 0)
// {
// break;
// }
// }
// if (j == i)
// {
// printf("%d ", i);
// count++;
// }
// }
// printf("\n找到的素数总数是%d", count);
// return 0;
//}
//这种算法还是太慢了
i=a*b a或b中至少有一个数 且<=开平方
//#include <stdio.h>
//#include <math.h>
//
打印100~200之间的素数
//
//int main()
//{
// int i = 0;
// int count = 0;
// //sqrt开平方的数学库函数
// for (i = 100;i <= 200;i++)
// {
// int j = 0;
// for (j = 2;j < sqrt(i);j++)
// {
// if (i % j == 0)
// {
// break;
// }
// }
// if (j > sqrt(i))
// {
// printf("%d ", i);
// count++;
// }
// }
// printf("\n找到的素数总数是%d", count);
// return 0;
//}
还可以在优化,偶数肯定不是素数
//#include <stdio.h>
//#include <math.h>
//
//int main()
//{
// int i = 0;
// int count = 0;
// for (i = 101;i <= 200;i+=2) //加等于2
// {
// int j = 0;
// for (j = 2;j < sqrt(i);j++)
// {
// if (i % j == 0)
// {
// break;
// }
// }
// if (j > sqrt(i))
// {
// printf("%d ", i);
// count++;
// }
// }
// printf("\n找到的素数总数是%d", count);
// return 0;
//}
优化境界
作业
1、判断a的值
//
//#include <stdio.h>
//
//int main()
//{
// int a = 0, b = 0;
// for (a = 1, b = 1;a <= 100;a++)
// {
// if (b >= 20) break; //判断 跳出循环
// if (b % 3 == 1)
// {
// b = b + 3;
// continue;
// }
// b = b - 5; //未执行
// }
// printf("%d\n", a);
// return 0;
//}
数9的个数 1~100
//
//#include <stdio.h>
//
//int main()
//{
// int i = 0, a = 0;
// for (i = 1;i <= 100;i++)
// {
// /*if (i < 10 && i % 9 == 0)
// {
// a++;
// }
// if (i > 9 && i % 10 == 9)
// {
// a++;
// }*/ //错误为10
// if (i % 10 == 9)
// a++;
// //if (i / 10 == 9); //99有两个9 //这里加了个分号结束 所以会便成110
// if (i / 10 == 9)
// a++;
// }
// printf("%d\n", a); //20
// return 0;
//}
分数求和 1/1-1/2+1/3.....1/99-1/100
//#include <stdio.h>
//
//int main()
//{
// int i = 0;
// double sum = 0.0;
// int flag = 1;
// for (i = 1;i <= 100;i++)
// {
// sum += flag*1.0 / i; //这里必须为1.0
// flag = -flag;
// }
// //如果写int sum+=1/i; 则1/1+1/2+1/3...为1+0+0....
// printf("%lf\n", sum);
// return 0;
//}
求十个数的最大值
//#include <stdio.h>
//
//int main()
//{
// int arr[] = { -1,-2,-3,-4,-5,-6,-7,-8,-9,-10 };
// //int max = 0; //写法错误 因为max可能是负数
// int max = arr[0];
// int i = 0;
// int sz = sizeof(arr) / sizeof(arr[0]);
// for (i = 1;i < sz;i++) //这里可以用i=1
// {
// if (arr[i] > max)
// {
// max = arr[i];
// }
// }
// printf("max=%d\n", max);
// return 0;
//}
在屏幕上输出乘法口诀表
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
....
9*1=9 ....
//#include <stdio.h>
//
//int main()
//{
// int i = 0;
// //确定打印9行
// for (i = 0;i <= 9;i++)
// {
// //打印一行
// int j = i;
// for (j = 1;j <= i;j++)
// {
// printf("%d*%d=%-2d ", i, j, i * j); //%-2d 数字右对齐
// }
// printf("\n");
// }
// return 0;
//}
//
代码不要背 自己多敲多想 算法和思路
猜字游戏
1、电脑会生成一个随机数
2、猜数字
//
//#include <stdio.h>
//#include <stdlib.h>
//#include <time.h>
//
//void game()
//{
// int ret = 0;
// int guess = 0;
// //时间戳 :当前时间·减计算机的起始时间(2022.1.1.0:0)
// //1\生成一个随机数
// ret = rand() % 100 + 1; // 生成1~100随机数 不能放在循环里
// //printf("%d\n", ret);
// //2、猜数字
// while (1)
// {
// printf("请猜数字:");
// scanf("%d", &guess);
// if (guess > ret)
// {
// printf("猜大了\n"); //别写反了
// }
// else if (guess < ret)
// {
// printf("猜小了\n");
// }
// else
// {
// printf("恭喜你,猜对了!\n");
// break; //记得跳出循环
// }
// }
//}
//
//void menu()
//{
// printf("***************************\n");
// printf("*** 1.play 2.exit ***\n");
// printf("***************************\n");
//}
//
//int main()
//{
// int input;
// srand((unsigned int)time(NULL)); //拿时间戳设置随机数,强制类型转换long
// //放外面调一次就可以
// do
// {
// menu();
// printf("请选择:");
// scanf("%d", &input);
// switch (input)
// {
// case 1:
// game();//猜字游戏
// break;
// case 0:
// printf("退出游戏\n");
// default :
// printf("请输入1或0\n");
// break;
// }
// } while (input);
// return 0;
//}
//goto语句 随意跳转到again(不建议使用) 可以自行解决
//#include <stdio.h>
//
//int main()
//{
//again:
// printf("hello world");
// goto again;
// return 0;
//}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char input[20] = { 0 };
//cmd command-命令行
//shutdown -s -t 60 电脑将在一分钟内关闭 shutdown -a 取消关机
//system() 执行系统命令的
system("shout -s -t -60");
again:
printf("请注意,你的电脑将在一分钟内关机,如果输入:我是猪,就取消关机\n请输入:");
scanf("%s", input);
if (strcmp(input, "我是猪") == 0) //比较两个字符串-strcmp()
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
//服务-可将可执行程序调成自动