目录 |
eg2.写一个函数printN,打印出从1到N
#include<stdio.h>
void printN1(int n); //直接输出
void printN2(int n); //递归
void printN2(int n){
if(n){
printN2(n-1);
printf("%-4d ", n);
}
}
void printN1(int n){
int i;
for(i = 0; i < n; i++){
printf("%-4d ", i+1);
}
}
void main(void){
int n;
printf("请输入一个正整数:");
scanf("%d", &n);
printN1(n);
printN2(n);
}
eg3.写程序计算给定多项式在给定点x处的值
#include<stdio.h>
#include<math.h>
#define N 3
double fun1(double a[], int n, double x); //a放系数,n是次幂
double fun2(double a[], int n, double x);
double fun2(double a[], int n, double x){
double y = a[n];
int i;
for(i = n; i > 0; i--){
y = a[i-1]+ y*x;
//printf("y=%lf\n", y);
}
return y;
}
double fun1(double a[], int n, double x){
double y = 0;
int i;
for(i = 0; i <= n; i++){
y += a[i]*pow(x, i);
}
return y;
}
void main(void){
double a[N+1];
int i;
double x;
printf("请输入多项式的系数(次幂逐渐增大,最高次幂为%d):", N);
for(i = 0; i < N+1; i++){
scanf("%lf", &a[i]);
}
printf("请输入x的值:");
scanf("%lf", &x);
printf("fun1函数在点%lf处的值为:%lf\n", x, fun1(a, N, x));
printf("fun2函数在点%lf处的值为:%lf\n", x, fun2(a, N, x));
}
最大子列和问题(遗留,分而治之)
//最大子列和问题
//8
//-2 6 -1 5 4 -7 2 3
//结果:14
#include<stdio.h>
#define N 8
void inputData(int a[], int n);
int maxSubseqSum1(int a[], int n); //T(n)=O(n^3) 把所有子序列的和都求出来
int maxSubseqSum2(int a[], int n); //T(n)=O(n^2) 把所有子序列的和都求出来
int maxSubseqSum2(int a[], int n); //T(n)=O(nlogn) 分而治之,不会
int maxSubseqSum2(int a[], int n){
int i;
int j;
int k;
int sum;
int max = 0;
for(i = 0; i < n; i++){
sum = 0;
for(j = i; j < n; j++){
sum+=a[j];
if(sum > max){
max = sum;
}
}
}
return max;
}
int maxSubseqSum1(int a[], int n){
int i;
int j;
int k;
int sum;
int max = 0;
for(i = 0; i < n; i++){
for(j = i; j < n; j++){
sum = 0;
for(k = i; k < j; k++){
sum+=a[k];
}
if(sum > max){
max = sum;
}
}
}
return max;
}
void inputData(int a[], int n){
int i;
printf("请输入%d个整型数据:", N);
for(i = 0; i < n; i++){
scanf("%d", &a[i]);
}
}
void main(void){
int a[N];
inputData(a, N);
printf("最大子列和为:%d\n", maxSubseqSum1(a, N));
printf("最大子列和为:%d\n", maxSubseqSum2(a, N));
}