小结
1.本周C语言教到了结构体
C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。
定义结构
为了定义结构,您必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:
struct tag {
member-list
member-list
member-list
...
} variable-list ;
其中1.tag 是结构体标签。
2.member-list 是标准的变量定义,比如 int i; 或者 float f,或者其他有效的变量定义。
3.variable-list 结构变量,定义在结构的末尾,最后一个分号之前,可以指定一个或多个结构变量。
结构体变量的初始化
和其它类型变量一样,对结构体变量可以在定义时指定初始值。
实例
#include <stdio.h>
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
} book = {"C 语言", "RUNOOB", "编程语言", 123456};
2.在pta上练习了函数递归
6-6 判断满足条件的三位数 (15分)
本题要求实现一个函数,统计给定区间内的三位数中有 两位数字相同的完全平方数(如144、676)的个数。
函数接口定义:
int search( int n );
其中传入的参数int n是一个三位数的正整数(最高位数字非0)。函数search返回[101, n]区间内所有满足条件的数的个数。
裁判测试程序样例:
#include <stdio.h>
#include <math.h>
int search( int n );
int main()
{
int number;
scanf("%d",&number);
printf("count=%d\n",search(number));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
500
输出样例:
count=6
int search(int n)
{
int i = 11;
int t = 0;
for (; i < sqrt(n); i++)
{
int a, b, c, d;
d = i * i;
a = d % 10;
b = d / 10 % 10;
c = d / 100;
if (a == b || a == c || b == c)
t++;
}
return t;
}
6-7 递归求简单交错幂级数的部分和 (15分)
本题要求实现一个函数,计算下列简单交错幂级数的部分和:
f(x,n)=x−x2+x3-x4+…+(-1)n-1xn
函数接口定义:
double fn( double x, int n );
其中题目保证传入的n是正整数,并且输入输出都在双精度范围内。函数fn应返回上述级数的部分和。建议尝试用递归实现。
裁判测试程序样例:
#include <stdio.h>
double fn( double x, int n );
int main()
{
double x;
int n;
scanf("%lf %d", &x, &n);
printf("%.2f\n", fn(x,n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
0.5 12
输出样例:
0.33
#include <math.h>
double fn( double x, int n )
{
double s;
if(n==1)
return x;
if(n>=2)
{
s=fn(x,n-1)+pow(-1,n-1)*pow(x,n);
return s;
}
}
3.递归
语法格式如下:
void recursion()
{
statements;
... ... ...
recursion(); /* 函数调用自身 */
... ... ...
}
int main()
{
recursion();
}
数的阶乘
下面的实例使用递归函数计算一个给定的数的阶乘:
实例
#include <stdio.h>
double factorial(int i)//factorial意思是阶乘
{
if(i <= 1)
{
return 1;
}
return i * factorial(i - 1);
}
int main()
{
int i = 15;
printf("%d 的阶乘为 %f\n", i, factorial(i));
return 0;
}
斐波那契数列
下面的实例使用递归函数生成一个给定的数的斐波那契数列:
实例
#include <stdio.h>
int fibonaci(int i)
{
if(i == 0)
{
return 0;
}
if(i == 1)
{
return 1;
}
return fibonaci(i-1) + fibonaci(i-2);
}
int main()
{
int i;
for (i = 0; i < 10; i++)
{
printf("%d\t\n", fibonaci(i));
}
return 0;
}
采用递归方法来解决问题,必须符合以下三个条件:
1、可以把要解决的问题转化为一个新问题,而这个新的问题的解决方法仍与原来的解决方法相同,只是所处理的对象有规律地递增或递减。
说明:解决问题的方法相同,调用函数的参数每次不同(有规律的递增或递减),如果没有规律也就不能适用递归调用。
2、可以应用这个转化过程使问题得到解决。
说明:使用其他的办法比较麻烦或很难解决,而使用递归的方法可以很好地解决问题。
3、必定要有一个明确的结束递归的条件。
说明:一定要能够在适当的地方结束递归调用。不然可能导致系统崩溃。
4.学习了视频剪辑(因为这个疯狂拖进度)
(完成近代史作业)
5.高数学习
学习了定积分 换元法和分部积分法