1.打印3的倍数 2.三个整数从大到小输出 3.打印素数 4.打印闰年 5.最大公约数及最小公倍数 6.打印乘法口诀表 7.求最大值(10个数) 8.分数求和 9.数9出现的次数 10.选择题tips
1.打印3的倍数
//题目1 //打印3的倍数的数 //写一个代码打印1-100之间所有3的倍数的数字 //关于%和+=
//第一种3%i=余数=0,则i是3的倍数 #include<stdio.h> int main() { int i = 0; for (i = 1; i <= 100; i++) { if (i % 3 == 0)//i是否是3的倍数 printf("%d ", i); } return 0; }
//第二种3 6 9等等3的倍数之间差了3所以也可以是i=i+3/i+=3 #include<stdio.h> int main() { int i = 0; for (i = 3; i <= 100; i+=3)//注意是从3开始往后加3 { printf("%d ", i); } return 0; }
2.三个整数从大到小输出
//题目2 //从大到小输出 //写代码将三个整数数 按从大到小输出。 //例如: //输入:2 3 1 //输出:3 2 1 //关于交换 //交换 //需要一个中间值 //先将其中一个值空出来,再将其交换,注意是将右值赋给左值 //排序也可以效率太低,数字量大可以
#include<stdio.h> int main() { int a,b,c; //输入三个数字 scanf("%d %d %d", &a, &b, &c); //交换 if (a < b) { int i = b; b = a; a = i; } if (a < c) { int i = a; a = c; c = i; } if (b < c) { int i = c; c = b; b = i; } //输出三个数字是从大到小.那么a里存放必须是最大,c必须存放最小的。 printf("%d %d %d", a, b, c); return 0; }
3.打印素数
//题目3 //打印素数和素数的个数 //写一个代码:打印100~200之间的素数 //素数(质数)指大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数 //只能被1和它本身整除的数 //关于奇数边界条件 //定义变量放置的位置 //循环体的循环内容边界条件
方法1: //判断素数的条件 //只要数不被它小的数整除就是素数 //例如;11只要不被10 9 8 7 6 5 4 3 2 整除它就是素数 //依次实除 #include<stdio.h> int main() { int i = 0; int j = 0; for (i = 100; i <= 200; i++) { int flag = 1;//放错位置了 for (j = 2; j < i; j++) { if (i % j == 0) { flag = 0; break; } } if (flag == 1) printf("%d ", i); } return 0; }
可以优化吗?当然可以!✔✔✔✔
//方法2: //优化1:从奇数里面选择 //优化2:j实验到根号i即可 #include<math.h>//sqrt()需要头文件 #include<stdio.h> int main() { int i = 0; int j = 0; for (i = 101; i <= 200; i+=2)//奇数中选择,边界条件注意 { int flag = 1;//放错位置了 for (j = 2; j < sqrt(i); j++)//sqrt(i)--根号i { if (i % j == 0)//不是素数 { flag = 0; break; } } if (flag == 1) printf("%d ", i); } return 0; }
sqrt(i)
含义为:根号i ,需要包含头文件#include
4.打印闰年
//题目4 //打印闰年 // //作业内容 //打印1000年到2000年之间的闰年 // 判断闰年条件 // 1.能被4整除,不能被100整除是闰年 // 2.能被400整除是闰年 // 1成立或2成立 //关于&&||
#include<stdio.h> int main() { int year = 0; for (year = 1000; year <= 2000; year++) { if (year % 4 == 0 && year % 100 != 0) printf("%d ", year); if(year % 400 == 0) printf("%d ", year); } return 0; }
//提高效率 #include<stdio.h> int main() { int year = 0; for (year = 1000; year <= 2000; year++) { if ((year % 4 == 0 && year % 100 != 0)||(year % 400 == 0)) printf("%d ", year); } return 0; }
5.最大公约数
//题目5 //最大公约数 //给定两个数,求这两个数的最大公约数 //输入:20 40 //输出:20 //关于% //交换必须是空的才能交换 // 编译器执行的顺序很重要 // 每个数的值到底该是多少想清楚
//方法一 #include<stdio.h> int main() { int a = 0; int b = 0; int min = 0; scanf("%d %d", &a, &b); min = (a < b ? a : b); while (1) { if (a % min == 0 && b % min == 0) { printf("%d", min); break; } else min--; } return 0; } // 方法1:从两个数中找出最小的那个数 // 判断是否能够同时被两个数整除 // 不能依次往下减一,再次判断,直到找到那个最大公约数为止
辗转相除法:
//提高效率 //方法2:辗转相除法 #include<stdio.h> int main() { int a = 0; int b = 0; int tep = 0; scanf("%d %d", &a, &b); int r = a % b; while (1) { if (a % b == 0) { printf("%d ", b); break; } else { tep = a; a = b; b = r; } } return 0; }
6.打印乘法口诀表
//题目6 //乘法口诀表 //在屏幕上输出9 * 9乘法口诀表 //关于嵌套的逻辑关系 //关于 %2d右对齐 -%2d左对齐
#include<stdio.h> int main() { int i, j; for (i = 1; i <= 9; i++)//计算的是行数 { for (j = 1; j <= i; j++)//计算的是每一行的项数 { printf("%d*%d=%2d ",i,j,i*j);//%2d 右对齐和%-2d左对齐 } printf("\n"); } return 0; }
7.求最大值(10个数)
//题目7 //求最大值 //已知10个数且知最大值 //关于数组和数组下标 //数组下标涉及的for循环条件边界
#include<stdio.h> int main() { char arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; //0 1 2 3 4 5 6 7 8 9 int max = arr[0];//假设最大值是第一个元素 //int max=0;//不可以正数可以但是负数不行 for (int i = 1; i <= 9; i++) { if (max < arr[i]) { max = arr[i]; } } printf("%d", max); return 0; }
8.分数求和
//题目8 //分数求和 //计算1 / 1 - 1 / 2 + 1 / 3 - 1 / 4 + 1 / 5 …… + 1 / 99 - 1 / 100 的值,打印出结果 //关于数字%和/的小数和整数类型 //打印的符号 //以及怎样表示正负相加
// 方法1 //涉及到整数和小数 //+和-用正数和负数 #include<stdio.h> int main() { int i = 0; int flag = 1; double sum = 0; for (i = 1; i <= 100; i++) { sum += flag*1.0 / i; flag=-flag; //不能使用1=-1 } printf("%f", sum); return 0; }
//方法2 //分奇数和偶数加减 #include<stdio.h> int main() { int i = 0; double sum = 0; for (i = 1; i <= 100; i++) { if(i%2 != 0) sum += 1.0 / i; else sum -= 1.0 / i; //不能使用1=-1 } printf("%f", sum); return 0; }
当然,还有很多办法,大家可以动手试一试!!🙂🙂
9.数9出现的次数
//题目9 //数9的个数 //编写程序数一下 1到 100 的所有整数中出现多少个数字9 // 9 19 29 39 49 59 69 79 89 99 ——个位为9只要i%10 ==9 // 90 91 92 93 94 95 96 97 98 99 ——十位为9只要i/10 ==9 //关于if else和if if
//方法1: #include<stdio.h> int main() { int i = 0; int a = 0; for (i = 1; i <= 100; i++) { if (9 == i % 10 || 9 == i / 10) { a++;//计算数字 } } printf("%d ", a+1);//99属于有两个9但是只计算了一次 return 0; }
#include<stdio.h> int main() { int i = 0; int a = 0; for (i = 1; i <= 100; i++) { if (i % 10 == 9)//个位为9 a++; if (i / 10 == 9)//十位为9 a++; } printf("%d", a); return 0; }
10.选择题tips
1."="赋值;"=="相等。
2.if语句 默认其后只能跟一条语句,如果在{}可以跟多条。
3.if语句中 0表示假,非0表示真。
4.悬空else
5.在switch语句中case后不接break,会一直往下全部执行。
6. switch(x)----x是整形。char也是整形家族,char表示的时候是用字符的ASCLL码值
7.switch语句中case子句和default子句的顺序没有要求,随意放置。
8.switch语句中case子句后表达式只能是整形常量表达式。
9.注意break,continue出现的位置。
while(条件表达式) { 循环体 } while循环中,当条件表达式成立时,才会执行循环体中语句,每次执行期间, 都会对循环因子进行修改(否则就成为死循环),修改完成后如果while条件表达式成立, 继续循环,如果不成立,循环结束。所以, while循环条件将会比循环体多执行一次。 while(0)//循环条件执行了一次,循环体没有执行。 { 循环体; }
总结:
+=:i=i+4相当于i+=4,多应用于有规律的数字循环。
交换:交换需要一个中间量tem,空出来才能赋值。
=:是把右值赋给左值。
循环嵌套:循环体中变量,数字的边界条件,位置放置。
&& ||:结果相同的话,运算符可以一起用更简单。
数组:把数组下标和数组元素对应清楚。
/:得到的数字是小数(浮点型)和整形的书写。
if if和if else:循环中,if if都会进入,if else语句只会进入一个。
正负交替计算的写法。
嵌套循环的写法。
拆分的方法。
检查脑子里过编译器执行的顺序。
关于以上练习题,大家可以动手写一写🙂🙂🙂🙂
✔✔✔✔感谢大家的阅读,欢迎指正错误和不足!
代码------------→【gitee:https://gitee.com/TSQXG】
联系------------→ 【邮箱:2784139418@qq.com】