C程式設計--案例(2017年江蘇大學程式設計考研試題 -- 程式設計題)
阿新 • • 發佈:2018-12-05
題目(總):
解答(答案為博主自已所寫,並非最優程式碼,僅供參考)
第一題
- 題目
切比雪夫多項式 (運用遞迴函式計算)
- 參考程式碼(答案並非最優程式碼,僅供參考)
#include<stdio.h>
#include<stdlib.h>
double T(int n,float x);
int main(){
FILE *fp;
if((fp=fopen("tdat.txt","w"))==NULL){
printf("檔案不存在或無法開啟");
exit(0);
}
int n;
float x;
double result;
printf("請輸入兩個引數(n,x): ");
scanf("%d %f",&n,&x);
for(int i=0;i<=n;i++){
printf("%8.2lf ",T(i,x));
fprintf(fp,"%8.2lf ",T(i,x));
if((i+1)%5==0)
putchar(10);
}
putchar(10);
fclose(fp);
return 0;
}
double T(int n,float x){
if(n==0)
return 1;
else if (n==1)
return x;
else if(n>=2)
return 2*x*T(n-1,x)-T(n-2,x);
else
return 0;
}
- 程式碼說明
推薦參考:
https://wenku.baidu.com/view/b790b7db29ea81c758f5f61fb7360b4c2e3f2a73.html (切比雪夫多項式–公式講解)
- 執行結果
第二題
- 題目
試編寫一個根據使用者輸入的兩個運算元和一個運算子,由計算機輸出運算結果的程式。
- 參考程式碼(答案並非最優程式碼,僅供參考)
#include<stdio.h>
int main(){
float a,b,result;
char ch;
printf("請輸入兩個運算元(a b): ");
scanf("%f %f",&a,&b);
printf("請輸入一個雙目算術運算子( +、-、*、/、% ): ");
scanf(" %c",&ch);//注意: " %c"中%之前有一個空格,否則ch會自動複製為'\n',即10
switch(ch){
case '+':
result=a+b;
printf("%5.2f%c%5.2f=%8.2f\n",a,ch,b,result);
break;
case '-':
result=a-b;
printf("%5.2f%c%5.2f=%8.2f\n",a,ch,b,result);
break;
case '*':
result=a*b;
printf("%5.2f%c%5.2f=%8.2f\n",a,ch,b,result);
break;
case '/':
if(b!=0){
result=a/b;
printf("%5.2f%c%5.2f=%8.2f\n",a,ch,b,result);
}else{
printf("除法運算時,分母不能為0 !!!\n");
}
break;
case '%'://注意取模運算只針對整型資料
result=(int)a%(int)b;
printf("%d%c%d=%d\n",(int)a,ch,(int)b,(int)result);
break;
default:
printf("輸入的雙目運算子無效!\n");
break;
}
return 0;
}
- 程式碼說明
注意一下:
1.除法運算時考慮分母不能為0的情況。
2.取模運算只針對整型資料運算
推薦參考:
- 執行結果
第三題
- 題目
查詢 矩陣 內 行和列都是最小的 元素
- 參考程式碼(答案並非最優程式碼,僅供參考)
#include<stdio.h>
#define N 100//假設n的最大值為100;
int main(){
int n,a[N][N];
int i,j,min_row;
bool flag=false;//是否存在滿足要求的元素
//測試資料;
//int n=5,a[5][5]={{11,4,2,7,8,},{5,9,23,1,25},{3,22,21,18,15},{17,16,24,12,6},{13,10,19,20,14}};
printf("請輸入方陣的階數: ");
scanf("%d",&n);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
for(i=0;i<n;i++){
min_row=0;
for(j=1;j<n;j++){//行內拿到最小值元素
if(a[i][min_row]>a[i][j])
min_row=j;
}//此時判斷出i行的最小元素為a[i][min_row]
for(j=0;j<n;j++){
if(a[j][min_row]<a[i][min_row])
break;
}
if(j==n){//遍歷完列元素
printf("%d(%d,%d), ",a[i][min_row],i+1,min_row+1);
flag=true;
}
}
if(flag){
putchar(10);//等價於 printf("\n");
}else{
printf("NO FIND!\n");
}
return 0;
}
- 程式碼說明
推薦參考:
這道題目感覺和2008年考的最後一道題目差不多型別。可以對比一下。
- 執行結果