C程序设计--案例(2018年江苏大学程序设计考研试题 -- 编程题)

版权声明:本文由 Micheal 超 博客 创作,转载请附带链接,有问题欢迎交流。 https://blog.csdn.net/qq_42887760/article/details/84800420

题目(总):

在这里插入图片描述

解答(答案为博主自已所写,并非最优代码,仅供参考)

第一题

  • 题目

定义一个函数,计算并返回如下算式的值:函数式见上,在主函数中输入10组实数a、b、c的值。。。。。。

  • 参考代码(答案并非最优代码,仅供参考)
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define n 10

double T(double a,double b,double c);
int main(){

	FILE *fp;
	if((fp=fopen("data.txt","w"))==NULL){
		printf("文件不存在或者文件无法打开!!!");
		exit(0);
	}

	double a,b,c,result;
	printf("请输入%d组参数\n",n);
	for(int i=0;i<n;i++){
		printf("第 %d 组数据: ",i);
		scanf("%lf %lf %lf",&a,&b,&c);
		result=T(a,b,c);
		printf("T(%5.2lf,%5.2lf,%5.2lf)=%8.3lf \n\n",a,b,c,result);
		fprintf(fp," %5.2lf \t %5.2lf \t %5.2lf    %8.3lf  \n",a,b,c,result);
	
	}
	return 0;
}
double T(double a,double b,double c){
	double part1,part2;
	part1=4.25*(a+b)+log(a+b+sqrt(a+b)+1/(a+b));
	part2=4.25*c+log(c+sqrt(c)+1/c);
	return part1/part2;
}
  • 代码说明
    考察内容主要是:
    ①文件的输出
    ②math.h头文件中的函数的使用
函数原型 函数功能
s q r t ( d o u b l e sqrt(double x ) x) 表示 x \sqrt{x}
e x p ( d o u b l e exp(double x ) x) 表示 e x e^x
f a b s ( d o u b l e fabs(double x ) x) 表示 x x 的绝对值
f l o o r ( d o u b l e floor(double x ) x) 表示 [ x ] [x] (不大于x的最大整数)
l o g ( d o u b l e log(double x ) x) 表示 l n ( x ) ln(x)
l o g 10 ( d o u b l e log10(double x ) x) 表示 l g ( x ) lg(x)
  • 运行结果
    在这里插入图片描述
    在这里插入图片描述

第二题

  • 题目

判断一个自然数是否是降序数

  • 参考代码(答案并非最优代码,仅供参考)
#include<stdio.h>
int main(){
	long int number,num;
	int t1,t2;
	
	printf("请输入一个自然数: ");
	scanf("%ld",&number);
	
	num=number;
	t1=num%10;//拿到末位数
	do{
		num/=10;
		t2=num%10;//拿到倒数第二位数
		if(t1<=t2)
			t1=t2;
		else
			break;
	}while(num);
	if(num){//num!=0; 即提前退出了循环
		printf("%ld不是降序数\n",number);
	}else{
		printf("%ld是降序数\n",number);
	}
	
	return 0;
}
  • 代码说明
    降序数可以逆过来思考,即从右往左看是一个升序数
  • 运行结果
    在这里插入图片描述

第三题

  • 题目

牛顿迭代法求方程的解

  • 参考代码(答案并非最优代码,仅供参考)
#include<stdio.h>
#include<math.h>

double func(double x);
int main(){
	double x=-1,result;
	result= func(x);
	printf("函数在x=%5.2lf附近的近似根为%lf \n",x,result);

	return 0;
}
double func(double x){
	double x0,x1=x;
	double f,f1;
	do{
		x0=x1;
		f=pow(x0,41)+pow(x0,3)+1;
		f1=41*pow(x0,40)+3*pow(x0,2);
		x1=x0-f/f1;
	}while(fabs(x1-x0)>1E-6);
	return x0;
}
  • 代码说明
    推荐参考:

https://blog.csdn.net/qq_42887760/article/details/84039135

  • 运行结果
    在这里插入图片描述
  • 参考代码2(答案并非最优代码,仅供参考)
#include<stdio.h>
#include<math.h>
float Function(float x){//原函数的值
  return pow(x,41)+x*x*x+1;
}  
float Differential(float x){//一阶导函数的值
  return 41*pow(x,40)+3*x*x+1;
}
void main(){
  float result=-1,a;
  int i=0;  
  for(;;)
  {
   a=result;
   result=result-Function(result)/Differential(result); //牛顿计算法。
   printf("%f\n",result);//将每个结果都输出来
   //判断小数点后6位的值是否相等,当出现4次都相等时输出该值。
   if(fabs(a)==fabs(result))
   {
	   i++;
	   if(i>2) break;
   }
  }
   printf("最后的结果为%f\n",result);
}

  • 代码说明
    推荐参考:

https://blog.csdn.net/weixin_41789607/article/details/79694492

  • 运行结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42887760/article/details/84800420