1、
答案:C
解析:
(1)程序本来是想循环10次,当i==5时打印。
但是在C语言中,‘=’是赋值,‘==’才是相等。(建议当要比较一个变量和一个常量是否相等,将变量放在‘==’的右边)
(2)在循环体中要尤其注意循环变量的修改。
补充:建议不要再for循环体中修改循环变量,防止for循环失去控制。
2、
答案:C
解析:
(1)if语句后面只能控制一条语句,但不是只能跟一条语句----->也能跟多条语句,注:跟多条语句时 需要用{}括起来
(2)if语句中0表示假,非0表示真。
(3)if语句是一种分支语句,可以实现单分支,也可实现多分支
补充:多分支选择语句:有switch语句和if多分支语句
但如果分支较多,则if语句的层数多,程序冗长而且可读性降低。
所以多分支语句,我们常常用switch语句。
(4)else的配匹:else总是与它前面最近的一个尚未匹配的if相匹配。
3、
答案 :D
解析:
由func(1)可知,在调用函数func时形参a的值是1。
1、switch语句(也可叫开关语句)
(1)switch后的表达式必须为整形表达式(和枚举类型)
char类型虽然叫:字符类型
但是字符的存储是ASCII码值,是整形,所以char也是整形家族的!!!
(2)功能:先算出表达式的值,然后依次与case标签的值进行匹配,匹配成功(相等)就选择这个标签作为入口,执行该case字句后面的语句块,如果语句块没有加break,就会继续执行当前case之后的所有case子句直到程序结束。
注:break在switch语句中的作用:实现真正的分支
(3)当 switch 表达式的值并不匹配所有 case 标签的值时,这个时候结构的所有语句都被跳过,程序并不会终止,也不会报错。但是,如果你不想忽略不匹配所有标签的表达式的值,你可以在语句列表中加一条default子句。
default子句的作用:
当 switch 表达式的值并不匹配所有 case 标签的值时,则执行default子句后面的语句。所以,每个 switch 语句中只能出现一条 default 子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个 case 标签一样执行 default 子句。
(4)编程好习惯
①在每个 switch 语句中都放一条 default 子句是个好习惯,甚至可以在后边再加一个 break 。
②虽然default子句可以凡在任意地方,但建议放在最后(习惯上我们前面处理正确的,后面处理异常的)
(5)switch语句中的关键字:break,case,default,(注:continue只在循环出现)
4、
倍数:一个数能被另一个整数整除(%==0),那么这个整数就是另一整数的倍数。
//代码1
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 100; i++)
{
if (i % 3 == 0)
{
printf("%d ", i);
}
}
return 0;
}
//代码2
#include<stdio.h>
int main()
{
int i = 0;
//3的倍数:3,6,9,12....我们发现每次都加3
for (i = 3; i <= 100; i+=3)
{
printf("%d ", i);
}
return 0;
}
//代码3
#include<stdio.h>
int main()
{
int i = 0;
//3的倍数:3=3*1,6=3*2,9=3*3.....
for (i = 1; 3 * i <= 100; i++)
{
printf("%d ", 3 * i);
}
return 0;
}
代码有好坏,代码2、3比代码1的效率更好
5、
#include<stdio.h>
int main()
{
//1、先定义三个整形变量
int a = 0;
int b = 0;
int c = 0;
//2、输入
scanf("%d %d %d",&a,&b,&c);
//3、调整
//最大值放a,最小值放c,其余放b
if (a < b)
{
int t = a;
a = b;
b = t;
}//互换
if (a < c)
{
int t = a;
a = c;
c = t;
}
if (b < c)
{
int t = b;
b = c;
c = t;
}
//输出
printf("%d %d %d\n", a, b, c);
return 0;
}
两个数互换:注:要一个中间变量,不能直接互换
就如生活中酱油和醋互换
6、
//写一个代码:打印100~200之间的素数
//素数-只能被1和它本身整除的数
//n是否素数 不能被2-n-1整除
//代码1
#include<stdio.h>
int main()
{
int i = 0;
//先打印100-200的数
for (i = 100; i <= 200; i++)
{
//判断i是否为素数
//拿2-(i-1)之间的数试除
int flag = 1;//假如是素数
int j = 0;
for (j = 2; j <= (i - 1); j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (1 == flag)
{
printf("%d ", i);
}
}
return 0;
}
//代码2
#include<math.h>//math.h是sqrt库函数的头文件
#include<stdio.h>
int main()
{
int i = 0;
//先输出100-200的数,质数不可能是偶数
for (i = 101; i <= 200; i += 2)
{
//判断是否是素数
//i=a*b,a和b至少一个<=开平方i的
//拿2-开平方i之间的数试除
int j = 0;
int flag = 1;//假如是素数
for (j = 2; j <= sqrt(i); j++)//sqrt是开平方的库函数
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (1 == flag)
{
printf("%d ", i);
}
}
return 0;
}
代码2比代码1效率更好
注:偶数不可能是质数,(奇数=奇数+2)
sqrt是开平方的库函数
它的头文件:“math.h”
判断质数:试除法
n是否是质数:n是否能整除2到n-1
优化:m=a*b,a和b至少一个数字是<=开平方m的
n是否能整除2到开平方n
//代码3
#include<stdio.h>
int main()
{
int i = 0;
//外层循环用来获取100-200的数,100必不是素数
for (i = 101; i <= 200; i += 2)
{
//判断是否为素数
//第二大因数<=i/2
int j = 0;
int flag = 1;//假如是素数
for (j = 2; j <= i / 2; j++)
{
if (i % j == 0)
{
flag = 0;
break;//注:一个break只能跳出一层循环
}
}
//内层循环结束之后,若flag==1,说明[2,i/2]之间的数都不能被i整除,说明i为素数
if (1==flag)
{
printf("%d ", i);
}
}
return 0;
}
这只是提供了一些方法,也不是最优的
更优的:有兴趣可以去搜《素数求解的N种境界》
7、
闰年的条件:
1、如果N能够被4整除,并且不能被100整除,则是闰年
2、或者:N能被400整除,也是闰年
即:4年一润并且百年不润,每400年再润一次
//代码1
#include<stdio.h>
int main()
{
int year = 0;
//获取1000-2000的数
for (year = 1000; year <= 2000; year++)
{
//判断是否为闰年
//1、4年一润并且百年不润
if (year % 4 == 0)
{
if (year % 100 != 0)
{
printf("%d ", year);
}
}
//2、每400年再润一次
if (year % 400 == 0)
{
printf("%d ", year);
}
}
return 0;
}
//代码2
#include<stdio.h>
int main()
{
int year;
//获取1000-2000闰年的数,
for (year = 1000; year <= 2000; year++)
{
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
{
printf("%d ", year);
}
}
return 0;
}
8、
最大公约数:最大能整除它两的数
最大公约数<=这两个数的较小值
//代码1
#include<stdio.h>
int main()
{
int n = 0;
int m = 0;
//输入
scanf("%d %d", &n, &m);//18 24
//假设最大公约数就是m和n的较小值
int k = (n < m ? n : m);
while (1)
{
if (n % k == 0 && m % k == 0)
{
break;
}
k--;
}
printf("%d ", k);
return 0;
}
//代码2
//辗转相除法求最大公约数
#include<stdio.h>
int main()
{
int n = 0;
int m = 0;
//输入
scanf("%d %d", &n, &m);//18 24
int k = 0;//
while (k = n % m)
{
n = m;
m = k;
}
printf("%d ", m);
return 0;
}
辗转相除法(体现结果是以相除余数为0则得到)
算法步骤:
1、输入两个正整数n,m
2、计算n除以m的余数k
3、n=m,m=k
4、若k=0,则m和n的最大公约数等于m;否则转到第2步
5.输出最大公约数m
最小公倍数:
n和m的最小公倍数=n*m/最大公约数
//最小公倍数
#include<stdio.h>
int main()
{
int n = 0;
int m = 0;
scanf("%d %d", &n, &m);//18 24
//求最大公约数
int c = n * m;
int k = 0;//n%m=k
while (k = n % m)
{
n = m;
m = k;
}
//最小公倍数=c/m
printf("%d\n", c / m);
return 0;
}