1. 程式人生 > >C程式設計--案例(2018年江蘇大學程式設計考研試題 -- 程式設計題)

C程式設計--案例(2018年江蘇大學程式設計考研試題 -- 程式設計題)

題目(總):

在這裡插入圖片描述

解答(答案為博主自已所寫,並非最優程式碼,僅供參考)

第一題

  • 題目

定義一個函式,計算並返回如下算式的值:函式式見上,在主函式中輸入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

  • 執行結果

在這裡插入圖片描述