6 篇文章 0 订阅

第一章

第一节

…累死

1.1.2 例2：写程序实现一个函数PrintN，使得传入一个正整数为N的参数后，能顺序打印从1到N的全部参数

void PrintN(int N){
int i;
for(int i = 1; i < N; i++){
printf("%d\n", i);
}
return;
}


void PrintN(int N){
if(N){
printN(N - 1){
printf("%d\n", N);
}
}
return;
}


1.1.3 例3：写程序计算给定多项式在给定点 x \mathcal{x} 处的值

f ( x ) = a 0 + a 1 x + a 2 x + . . . + a n − 1 x n − 1 + a n x n f(x)=a_0+a_1x+a_2x+...+a_n-1x^{n-1}+a_nx^n

double f(int n, double a[], double x) {
int i;
double p = a[];
for (i = 1; i <= n; i++) {
p += a[i] * pow(x, 1);
}

return p;
}


f ( x ) = a 0 + x ( a 1 + x ( . . . ( a n − 1 + x ( a n ) ) . . . ) ) f(x)=a_0+x(a_1+x(...(a_n-1+x(a_n))...))

double f(int n, double a[], double x) {
int i;
double p = a[n];
for (i = n; i > 0; i--) {
p = a[i - 1] + x * p;
}

return p;
}


clock()：捕捉从程序开始运行到clock()被调用时所耗费的时间，这个时间单外是clock tick，即“时钟打点”。

#include "stdio.h"
#include "time.h"

clock_t start, stop;
/* clock_t 是 clock() 函数返回的数据类型*/
double duration;
/*记录被测函数运行时间，以秒为单位*/
int main() {
start = clock();
MyFunction();
stop = clock();
duration = ((double)(stop - start)) / CLK_TCK;
/*其他不再测试范围内的处理写在后面，例如输出duration的值*/
return 0;
}


∑ i = 0 9 i ⋅ x i \sum_{i=0}^{9}i \cdot x^i

#include "stdio.h"
#include "time.h"
#include "math.h"

clock_t start, stop;
/* clock_t 是 clock() 函数返回的数据类型*/
double duration;
/*记录被测函数运行时间，以秒为单位*/
#define MAXN 10
double f1(int n, double a[], double x);
double f2(int n, double a[], double x);

int main() {
int i;
double a[MAXN];/*存储多项式的系数*/
for (i = 0; i < MAXN; i++) {
a[i] = (double)i;
}

start = clock();
f1(MAXN - 1, a, 1.1);
stop = clock();
duration = ((double)(stop - start)) / CLK_TCK;
printf("ticks1 = %f\n", (double)(stop - start));
printf("duration1=%6.2e\n", duration);

start = clock();
f2(MAXN - 1, a, 1.1);
stop = clock();
duration = ((double)(stop - start) / CLK_TCK);
printf("ticks2 = %f\n", (double)(stop-start));
printf("duration2 = %6.2e\n", duration);

return 0;
}


ticks1和ticks2都为0，duration1和duration2也都为0

#include "stdio.h"
#include "time.h"
#include "math.h"

#define MAXK 1e7/*被测函数最大调用次数*/

clock_t start, stop;
/* clock_t 是 clock() 函数返回的数据类型*/
double duration;
/*记录被测函数运行时间，以秒为单位*/

#define MAXN 10
double f1(int n, double a[], double x);
double f2(int n, double a[], double x);

int main() {
int i;
double a[MAXN];/*存储多项式的系数*/
for (i = 0; i < MAXN; i++) {
a[i] = (double)i;
}

start = clock();
for (i = 0; i < MAXK; i++) {
f1(MAXN - 1, a, 1.1);
}
stop = clock();
duration = ((double)(stop - start)) / CLK_TCK / MAXK; //计算函数单次运行时间
printf("ticks1 = %f\n", (double)(stop - start));
printf("duration1=%6.2e\n", duration);

start = clock();
for (i = 0; i < MAXK; i++) {
f2(MAXN - 1, a, 1.1);
}
stop = clock();
duration = ((double)(stop - start) / CLK_TCK) / MAXK; //计算函数单次运行时间
printf("ticks2 = %f\n", (double)(stop-start));
printf("duration2 = %6.2e\n", duration);

return 0;
}


1.1.4抽象数据类型

*逻辑结构
*物理存储结构

*数据对象集
*集合相关联的操作集

*与存放数据的机器无关
*与数据存储的物理结构无关
*与实现操作的算法和编程语言均无关

*Matrix Create(int M, int N);返回一个 M × N \mathcal{M \times N} 的空矩阵；
*int GetMaxRow(Matrix A);返回矩阵A的总行数
*int GetMatCol(Matrix B);返回矩阵A的总列数
*ElemenType GetEntry(Matrix A, int i, int j);返回矩阵A的第i行，第j列的元素
*Matrix Add(Matrix A, Matrix B);如果A和B的行、列数一致，则返回矩阵C=A+B,否则返回错误标志
*Matrix Multiply(Matrix A, Matrix B);如果A的列数等于B的列数，则返回矩阵C=AB，否则返回错误标志
*…

• 0
点赞
• 0
评论
• 0
收藏
• 一键三连
• 扫一扫，分享海报

07-02 4634
02-23 5784

02-17 876
08-01 2418
06-08 6053
09-13 1491
06-26 1072
04-08 64
02-09 7万+
01-23 1636
03-23 1071
04-07 1823
04-12 3040
09-17 757
05-28 1149
09-19 5878
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、C币套餐、付费专栏及课程。