今日学习内容:链接: link
do while
练习
1.计算n的阶乘
#include <stdio.h>
int main()
{
int i = 0;
int n = 0;
int ret = 1; //在计算阶乘时,初始值设为0是不合适的。(ret为复合赋值运算符)
//阶乘的定义是从1开始乘到给定的数,例如 5! = 5 * 4 * 3 * 2 * 1。
// 如果初始值设为0,那么任何数乘以0都会得到0,这样就无法正确计算阶乘了。(此处为ai解释
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
ret *= i;
}
printf("%d\n", ret);
return 0;
}
2.计算1~10的阶乘的和
int main(){
{
int i = 0;
int n = 0;
int ret = 1;
int sum = 0;
//i、n 和 ret,它们的定义和初始化顺序可以变换
//但要注意变量在使用前必须被初始化
// 变量的作用域和生命周期不会因为定义顺序的改变而受到影响
for (n = 1; n <= 10; n++) //此循环为产生1~10得数字
{
ret = 1; //计算n的阶乘之前,要把ret初始为一
for (i = 1; i <= 10; i++)
{
ret *= i; //计算 ret*i 的值
//然后将乘积的结果赋值给 ret
}
sum += ret;
}
printf("%d\n", sum);
return 0;
}
} //效率较差(两层循环嵌套)
//简单 法2:
#include <stdio.h>
int main()
{
{
int i = 0;
int n = 0;
int ret = 1;
int sum = 0;
for (n = 1; n <= 3; n++)
{
ret *= n;
sum += ret;
}
printf("%d\n", sum);
}
return 0;
}
3.在一个有序数组中查找具体某个数字n
#include <stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 1;
while(left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if (left > right)
{
right = mid - 1;
}
else
{
printf("找到啦! :%d\n", mid);
break;
}
}
if (left > right)
{
printf("找不到qwq\n");
}
return 0;
}
以上鹏哥截止⬆️
下来为翁恺:
1.判断一个数的位数
int main()
{
int = x;
int n = 0;
scanf("%d",&x);
while (x > 0)
{
n++;
x /= 10;
}
printf("%d", n);
return 0;
}
x(/10) n(/10后的位数)
352 0
35 1
3 2
0 3
则最后printf出的是n(3)
2.猜数
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
以上为为大括号下边两行代码所设头文件
int main()
{
srand(time(0));
//可得到每次运行都不一样的数
//如a = 1234; %100一百取余后留下的是后两位 即34 %10则为对十取余 /10则为对十整除
int number = rand() % 100 + 1;
int count = 0;
int a = 0;
printf("我已经想好了一个1到100之间的数。");
do
{
printf("请猜这个1到100之间的数:");
scanf(" %d", &a);
count++;
if (a < number)
{
printf("你猜的数大了。");
}
else if (a < number)
{
printf("你猜的数小了。");
}
} while (a != number);
printf("太好啦,你用%d次就猜到了答案。\n" , count);
return 0;
}
3.计算平均值
有点难懂
法一:do while
int main()
{
int number;
int sum = 0;
int count = 0;
scanf("%d", &number); //使用scanf来读number
do
{
scanf("%d", number);
if (number != -1)
{
sum += number;
count++;
}
} while (number != -1);
printf("%f\n", 1.0 * sum / count);
return 0;
} //这样麻烦罗嗦 要做两遍判断number的值
法二:用while循环 一次解决
int main()
{
int number;
int sum = 0;
int count = 0;
scanf("%d\n", &number); //取地址易忘
while (number != -1)
{
sum += count;
count++;
scanf("%d\n", &number);
}
printf("%f\n", 1.0 * sum/count);
return 0;
}
4.整数求逆
这里实在有点难懂 眼里只有一串串代码😵💫
conclude这两天 :
早上起得还算早,大扫除了一下,收拾了房间,大概十点十一点左右开始学,学了鹏哥的两节do while 和一点作业讲解 还有翁恺老师的while 、do while循环 还有猜数,算平均数,整数求逆,还有一点for循环,感想如下:(开玩笑的)
就是不管哪个老师教都有点难理解 让我自己把每段代码是拿来干嘛的说出来我觉得我是真的说不出,这种感觉有点跟高中考前没复习一样难受,可能刚开始吧,这两天问ai搞懂了ret debug是啥,还有一些代码为什么要这样执行,这样执行有何意义之类的,翁恺老师讲得我觉得很好的一点是他先给出一个框架思路,然后给出一个算法,在这之前我还真有点不理解算法是啥意思,还以为是以后以后才会学到,我觉得下次我要开始用流程图了哈哈,虽然我还是嫌麻烦,但是尝试尝试把,今天又开发了一个思维导图的技能,虽然也捣鼓了半天哈哈还没写多少,但是也是向前迈步了。。
一般学完中午睡半个钟或者跟同学朋友聊会天,然后捣鼓一下电脑还有什么没被我开发的功能,下午起来简单复习一下代码,或者在家去楼顶看老爸种的菜,反正挺闲挺舒服的(搬个椅子上去吹吹风吃个雪糕看隔壁邻居种的花,感觉离老年生活也不远了)😂 晚上的安排就是看一两集动漫,看一个朋友推荐的电视剧,悬疑看多了有点烧脑,来点热血的剧调动一下情绪,还有奥运!国乒!看几个比赛给我激动得,比我高考出分还兴奋。。。这几天球友不在,流量告急,家里能看的书也看不了多少,手机电脑看多了属实有点无聊,明天打算继续这样早上学习中午睡觉下午复习 散步,晚上追剧 干活,真是太规律的一个安排了,有点老年生活的感觉了,挺好的!早点开学吧!还有录取通知书已经发货,激动地等待了😁
2024.8.1