【c语言】函数_作业详解
· 前言:
对应c语言,49集
内容:
第一题,就是if =5就是赋值,不是判断,然后会循环打印5
#include <stdio.h>
int main()
{
int i = 0;
for (i=0; i<10; i++)
{
if(i=5)
printf("%d", i);
}
}
第二题
if语句,只要接大括号就可以执行多条语句了
if语句是,0假,非0真
第三题
switch语句中的default可以放在任意位置是对的,可以放前面,也可以放后面,但是不能乱放
就不能放在switch语句外边
c语言代码没有规定严格的顺序结构,只是理解,美观
char - 也是整型家族的,因为字符存储的时候,存储的是ascii值
这里可以就是3、4、5合在一起写,然后就是打印的是相同的,就不用重复写了
int main()
{
int n = 0;
scanf("%d", &n);
switch(n)
{
default:
printf("hehe");
break;
case 1:
printf("buhehe");
break;
case 2:
case 3:
case 4:
printf("buxixi");
break;
}
return 0;
}
第4题,也是switch语句
讲的是switcch语句,然后就是如果没有break的话,就会一直往下循环,
就算遇到default语句,他也会进去执行相应结果
第5题,switch语句
switch(n),就是讲的是switch接收的参数类型为int类型,就必须是整型
第6题,switch语句
就算是switch循环嵌套了一个switch循环,里面循环结束了,也会执行后面的case语句,看题就明白了,就是这个,细品
int main()
{
int x =3;
int y =3;
switch(x % 2)
{
case 1:
switch(y)
{
case 1:
printf("hehe");
case 2:
printf("buxixi");
case 3:
printf("hello");
}
case 2:
printf("third");
}
return 0;
}
第7题,写一个数,这个好像比上课的难低,但是忘记上课怎么写了
不用函数的方式
int main()
{
int a = 0;
int b = 0;
int c = 0;
//输入
scanf("%d %d %d", &a, &b, &c);
int tmp = 0;
if(a < b)
{
tmp = a;
a = b;
b = tmp;
}
if(a < c)
{
tmp = a;
a = c;
c = tmp;
}
if(b < c)
{
tmp = b;
b = c;
c = tmp;
}
//输出
printf("%d %d %d", a, b, c);
return 0;
}
用函数的形式写,直接定义一个swap交换函数,不需要返回值,因为没有创建什么临时变量,是直接更改参数的值的,从上往下执行的,用void无返回值就可以了
void Swap(int *px, int *py)
{
int temp = *px;
*px = *py;
*py = temp;
}
int main()
{
int a = 0;
int b = 0;
int c = 0;
//输入
scanf("%d %d %d", &a, &b, &c);
int tmp = 0;
if(a < b)
{
Swap(&a,&b);
}
if(a < c)
{
Swap(&a,&c);
}
if(b < c)
{
Swap(&b,&c);
}
//输出
printf("%d %d %d", a, b, c);
return 0;
}
第8题
求倍数, 嗯,ctrl+/,这个可以快速消失这个//
//求3的倍数
//int main()
//{
// int i = 0;
// while(i <= 100)
// {
// if(i % 3 == 0)
// {
// printf("%d ", i);
// }
// i++;
// }
// for(i = 3; i <= 100; i+=3)
// {
// printf("%d ", i);
// }
// return 0;
//}
第9题,求a,b的最大公约数
错误实例
//给定两个数,求这两个数的最大公约数
//这里写错了
int main()
{
int m = 0;
int n = 0;
scanf("%d %d", &m, &n);
while(m%n)
{
if(m % n !=0) //假设m 16 n 24
{
int temp = 0;
temp = m; //这里就算赋值了,但是这里也不对,因为这里么有新的值出现
m = n; //这里还是24
n = temp; //n还是16,只不过换了位置,a和b
}
}
printf("%d", n);
return 0;
}
暴力求解的实例
//暴力求解
int main()
{
int m = 0;
int n = 0;
scanf("%d %d", &m, &n);
//第一步,算出两则的最小值
int min = (m < n) ? m : n;
//循环为真
while(1)
{
//第二步,用最小值分别除以两个数,摸为0就表示找到了,退出循环
if(m % min == 0 && n %min ==0)
{
break;//跳出while循环
}
else
min--; //如果不能整除,就让最小值减一,然后再除,直到找到为止
}
printf("%d", min);
return 0;
}
辗转相除法
//辗转相除法求解公约数
int main()
{
int a = 0;
int b = 0;
//输入
scanf("%d %d", &a, &b);
//求最大公约数
while(a%b) //如果被整除,说明b就是最大公约数,0为假,就退出循环了
{
int c = a%b; //求ab两个的余数
a = b; //然后b赋值给a
b = c; //最小值赋值给b
}
printf("%d", b);
return 0;
}
第二套题目
1、while循环的条件表达式的执行次数总是会比循环体的执行次数多一次
因为当判断为假,就不进入循环
那么就执行了条件表达式,并没有执行循环体的语句
2、程序结果为,a=8
a = 7的时候,b=22,但是还没判断
当a等于8的时候,才进入循环判断,然后break,跳出循环
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", a);
return 0;
}
3、编写一个程序,计算1~100的所有数字出现多少个数字9
//编写程序数一下 1 到 100 的所有数字出现多少个数字9
//
//9 19 29 39 49 59 69 79 89 99
//90 91 92 93 94 95 96 97 98 99
int main()
{
int i = 0; //遍历1 ~ 100到数字
int count = 0; //计数
for(i = 1; i <= 100; i++)
{
//判断个位是不是9
if(i % 10 == 9)
count++;
//判断十位是不是9
if(i / 10 == 9) //因为这个除的话是取整的
count++;
}
//打印
printf("%d", count);
return 0;
}
4、计算1/1-1/2+1/3-1/4+1/5.......+1/99-1/100
分子总是1
分母是1~100
//4、计算1/1-1/2+1/3-1/4+1/5.......+1/99-1/100
//分子总是1
//分母是1~100
int main()
{
int i = 0; //循环100次
double sum = 0; //求和
int flag = 1; //循环正负
for(i = 1; i <=100; i++)
{
sum = sum + flag*(1.0 /i); //这个除号默认是取整,要是想去小数,需要加上.0
flag = -flag; //因为是隔一次出现一个符号的,可以这样写
}
printf("%lf", sum); //lf是double类型的输出标准符号
return 0;
}