5.1
1、阶乘
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
int fact = 1;
int i = 1;
while(i <= n ){
fact *= i;
i++;
}
printf("%d! = %d", n, fact);
}
错误点:第一次写的时候没有定义i = 1,导致i随机取值,始终进不到while循环中。
此外,这个代码还有一种写法:
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
int fact = 1;
int i = 1;
for( int i = 1; i <= n; i++ ){ //初始条件,循环条件,循环每轮要做的事情。(只有C99 才能用)
fact *= i;
i++;
}
printf("%d! = %d", n, fact);
}
做求和的程序,初始值变量应为0;
做求积的程序,初始值变量应为1。
5.2
1. for(; 条件; ) == while(条件)
2. 如果有固定次数 用for
如果必须执行一次,用do_while
其他情况用while
4.break和continue只能跳出本次循环
若要跳出多次循环,则需要接力break.
5.goto + 标号;
......
标号: //用此语句可跳到冒号后,多用于多层循环,其他情况大多不建议使用。
5.3
1.求和问题:
#include<stdio.h>
//要做1- 1/2 +1/3-.......+1/n的运算,要用for循环语句
int main(){
int n;
int i;
double sum = 0.0;
int sign = 1.0;
scanf("%d", &n);
for( i = 1; i <= n; i++){
sum += sign/i;
sign = -sign;
}
printf("f(%d) = %f\n", n, sum);
return 0;
}
2.正序分解整数问题:
(&: 在C语言中有两种意思,一种是取地址符,是单目运算符;
另一种是位运算符,表示“按位与”,是双目运算符。
|: 是位运算符,表示“按位或”。)
3.求最大公约数:
gcd | greatest common divisor |
i.枚举法
ii.逻辑运算
iii.辗转相除法
/*
如果b=0,计算结束,a就是最大公约数
否则,计算a除以b的余数,让a=b,b=余数;
回到第一步
*/
#include<stdio.h>
int main(){
int a, b;
int t;
scanf("%d %d", &a, &b);
while(b !=0 ){
t = a%b;
a=b;
b=t;
}
printf("gcd=%d\n", a);
return 0;
}
学习的时候,突然意识到一个盲点,不知道int main()代表什么含义,于是上网查了一下,下面是百度知道的回答:
int main()表示函数有返回值,在main函数结束的时候要有return语句;否则就会有warning void表示函数没有参数。
程序执行总是从main函数开始,如果有其他函数,则完成对其他函数的调用后再返回到主函数,最后由main函数结束整个程序。在执行程序时,由系统调用main函数。//
main 函数是在程序启动中完成对具有静态存储期的非局部对象的初始化之后被调用的。它是程序在有宿主 (hosted)环境(亦即有操作系统)中所指定的入口点。
于是我又有了新的疑惑,什么叫 “ 对具有静态存储期的非局部对象的初始化” 以及“宿主环境”又是啥?
所以继续搜索:
(搜索期间又看到“自动存储期”,忍不住好奇了一下,结果皆拷贝在下方:)
一、 参照:https://blog.csdn.net/qq_44989881/article/details/106697382
自动存储期:
在函数中不适用存储类说明符 static 而定义出的变量,被赋予了自动存储期,它具有以下特性。1. 程序执行到对象声明的时候就创建出对应的对象。而执行到包含该声明的程序块的结尾,也就是大括号{}的时候,该对象就会消失。
2.该对象拥有短暂的寿命,如果不对该变量进行初始化,则该对象会被初始化为不确定的值。静态存储期:
在函数中使用static定义出来的对象,或者在函数外声明定义出来的对象都被赋予了静态存储期,它具有以下特性。1.在程序开始执行的时候,具体地说是在 main 函数执行之前的准备阶段被创建出来,在程序结束的时候消失。
2.该对象拥有 “永久”的寿命,如果不对该变量进行初始化,则该对象会自动初始化为0.
二、(对于非局部对象,搜了很多发现只有非局部静态对象一说,学术问题还是要严谨滴~)
以下是百度百科的官方回答:
非局部静态对象指的是这样的对象:
· 定义在全局或名字空间范围内
· 在一个类中被声明为static,或
· 在一个文件范围被定义为static。局部静态对象:函数内的static对象
(然而说实话我并不是很懂,首先就是static在C语言中是怎么个意思呢?)
于是此下又做了一点关于static的浅显了解:(来源:百度知道https://zhidao.baidu.com/question/586606740.html)
在C语言中,static关键字的作用如下:
1、在修饰变量的时,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。
2、static修饰全局变量的时,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。
3、static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static修饰的局部变量存放在全局数据区的静态变量区。
我天,终于大概明白一点了!
三、(对于宿主环境)
宿主环境(宿主程序)可以是操作系统,服务器程序,应用程序,而开发这些宿主环境的程序语言(如开发操作系统一般使用c语言,开发WebServer一般使用c或java语言,开发应用程序一般使用C++/java/c#语言)被称作系统开发语言,或用一个更贴切的说法是---宿主语言
于此,终于在浅显层面可以理解一点了!