第十三週程式設計總結--助教
阿新 • • 發佈:2018-12-08
題目1 使用函式計算兩點間的距離
(1)實驗程式碼
#include <stdio.h>
#include <math.h> double dist( double x1, double y1, double x2, double y2 ); int main()
{
double x1, y1, x2, y2; scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
printf("dist = %.2f\n", dist(x1, y1, x2, y2)); return 0;
}
double dist( double x1, double y1, double x2, double y2 )
{
double x, y, s;
x = pow((x1 - x2), 2);
y = pow((y1 - y2), 2);
s = sqrt(x + y);
return s;
}
(2)設計思路
第一步:這是個數學公式直接套用就行
第二步:返回計算出的值
(3)本題除錯過程碰到問題及解決辦法
一個公式,不難。一次通過
(4)執行結果截圖
題目2 符號函式
(1)實驗程式碼
#include <stdio.h> int sign( int x ); int main()
{
int x; scanf("%d", &x);
printf("sign(%d) = %d\n", x, sign(x)); return 0;
}
int sign( int x )
{
if(x>0)
x = 1;
if(x==0)
x = 0;
if(x<0)
x = -1;
return x;
}
(2)設計思路
第一步:用三個if語句判斷
第二步:賦值相應的值給x
第三步:返回x的值
(3)本題除錯過程碰到問題及解決辦法
一次過,沒什麼問題
(4)執行結果截圖
題目3 使用函式計算兩個複數之積
(1)實驗程式碼
#include<stdio.h> double result_real, result_imag;
void complex_prod( double x1, double y1, double x2, double y2 ); int main(void)
{
double imag1, imag2, real1, real2; scanf("%lf %lf", &real1, &imag1);
scanf("%lf %lf", &real2, &imag2);
complex_prod(real1, imag1, real2, imag2);
printf("product of complex is (%f)+(%f)i\n", result_real, result_imag);
return 0;
}
void complex_prod( double x1, double y1, double x2, double y2 )
{
result_real = x1*x2 - y1*y2;
result_imag = x1*y2 + x2*y1;
}
(2)設計思路
第一步:題目給了計算的公式
第二步:直接套用,void是沒有返回值的
第三步:得出結果
(3)本題除錯過程碰到問題及解決辦法
無問題,一次過
(4)執行結果截圖
題目4 8 使用函式求最大公約數
(1)實驗程式碼
#include <stdio.h> int gcd( int x, int y ); int main()
{
int x, y; scanf("%d %d", &x, &y);
printf("%d\n", gcd(x, y)); return 0;
}
int gcd( int x, int y )
{
int i; for(i=x;i>=1;i--)
{
if(x%i==0&&y%i==0)
break;
}
return i;
}
(2)設計思路
第一步:題目給的是求最大公約數,所以我們可以從x本身開始除起,每次遞減一
第二步:定義 變數,用for迴圈
第三步:用if判斷,同時滿足兩個數都能相除
第四步:返回i值
(3)本題除錯過程碰到問題及解決辦法
一次通過,無問題。
(4)執行結果截圖
題目5 使用函式輸出水仙花數
(1)實驗程式碼
#include <stdio.h> int narcissistic( int number );
void PrintN( int m, int n ); int main()
{
int m, n; scanf("%d %d", &m, &n);
if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
PrintN(m, n);
if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n); return 0;
}
int narcissistic(int number)
{
int i, j, digit, power, powerSum, integer, count, flag; count = 0;
integer = number;//賦值計算 while (integer > 0)//判斷有幾位數
{
integer = integer / 10;
count++;
}
powerSum = 0;
integer = number;//重新賦值
for (i = 0; i < count; i++)
{
digit = integer % 10;//每次拆個位數
integer = integer / 10;//降位
power = 1;
for (j = 0; j < count; j++)//有幾位數乘幾次
power = power*digit; powerSum = powerSum + power;//將每位數成完後累加
}
if (powerSum == number)
flag = 1;
else
flag = 0;
return flag;
}
void PrintN(int m, int n)
{
int i;
for (i = m + 1; i < n; i++)
{
if (narcissistic(i) == 1)
printf("%d\n", i);
}
}
(2)設計思路
第一步:先可以把判斷水仙花數這個函式寫完,另外一個函式就呼叫這個函式
第二步:看程式碼上的註釋
(3)本題除錯過程碰到問題及解決辦法
小問題比較多,一個是m==n時的輸出,還有沒看清題目,是有幾位數就是幾次冪。
(4)執行結果截圖
(1)實驗程式碼
#include <stdio.h>
#include <math.h> double dist( double x1, double y1, double x2, double y2 ); int main()
{
double x1, y1, x2, y2; scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
printf("dist = %.2f\n", dist(x1, y1, x2, y2)); return 0;
}
double dist( double x1, double y1, double x2, double y2 )
{
double x, y, s;
x = pow((x1 - x2), 2);
y = pow((y1 - y2), 2);
s = sqrt(x + y);
return s;
}
(2)設計思路
第一步:這是個數學公式直接套用就行
第二步:返回計算出的值
(3)本題除錯過程碰到問題及解決辦法
一個公式,不難。一次通過
(4)執行結果截圖
題目2 符號函式
(1)實驗程式碼
#include <stdio.h> int sign( int x ); int main()
{
int x; scanf("%d", &x);
printf("sign(%d) = %d\n", x, sign(x)); return 0;
}
int sign( int x )
{
if(x>0)
x = 1;
if(x==0)
x = 0;
if(x<0)
x = -1;
return x;
}
(2)設計思路
第一步:用三個if語句判斷
第二步:賦值相應的值給x
第三步:返回x的值
(3)本題除錯過程碰到問題及解決辦法
一次過,沒什麼問題
(4)執行結果截圖
題目3 使用函式計算兩個複數之積
(1)實驗程式碼
#include<stdio.h> double result_real, result_imag;
void complex_prod( double x1, double y1, double x2, double y2 ); int main(void)
{
double imag1, imag2, real1, real2; scanf("%lf %lf", &real1, &imag1);
scanf("%lf %lf", &real2, &imag2);
complex_prod(real1, imag1, real2, imag2);
printf("product of complex is (%f)+(%f)i\n", result_real, result_imag);
return 0;
}
void complex_prod( double x1, double y1, double x2, double y2 )
{
result_real = x1*x2 - y1*y2;
result_imag = x1*y2 + x2*y1;
}
(2)設計思路
第一步:題目給了計算的公式
第二步:直接套用,void是沒有返回值的
第三步:得出結果
(3)本題除錯過程碰到問題及解決辦法
無問題,一次過
(4)執行結果截圖
題目4 8 使用函式求最大公約數
(1)實驗程式碼
#include <stdio.h> int gcd( int x, int y ); int main()
{
int x, y; scanf("%d %d", &x, &y);
printf("%d\n", gcd(x, y)); return 0;
}
int gcd( int x, int y )
{
int i; for(i=x;i>=1;i--)
{
if(x%i==0&&y%i==0)
break;
}
return i;
}
(2)設計思路
第一步:題目給的是求最大公約數,所以我們可以從x本身開始除起,每次遞減一
第二步:定義 變數,用for迴圈
第三步:用if判斷,同時滿足兩個數都能相除
第四步:返回i值
(3)本題除錯過程碰到問題及解決辦法
一次通過,無問題。
(4)執行結果截圖
題目5 使用函式輸出水仙花數
(1)實驗程式碼
#include <stdio.h> int narcissistic( int number );
void PrintN( int m, int n ); int main()
{
int m, n; scanf("%d %d", &m, &n);
if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
PrintN(m, n);
if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n); return 0;
}
int narcissistic(int number)
{
int i, j, digit, power, powerSum, integer, count, flag; count = 0;
integer = number;//賦值計算 while (integer > 0)//判斷有幾位數
{
integer = integer / 10;
count++;
}
powerSum = 0;
integer = number;//重新賦值
for (i = 0; i < count; i++)
{
digit = integer % 10;//每次拆個位數
integer = integer / 10;//降位
power = 1;
for (j = 0; j < count; j++)//有幾位數乘幾次
power = power*digit; powerSum = powerSum + power;//將每位數成完後累加
}
if (powerSum == number)
flag = 1;
else
flag = 0;
return flag;
}
void PrintN(int m, int n)
{
int i;
for (i = m + 1; i < n; i++)
{
if (narcissistic(i) == 1)
printf("%d\n", i);
}
}
(2)設計思路
第一步:先可以把判斷水仙花數這個函式寫完,另外一個函式就呼叫這個函式
第二步:看程式碼上的註釋
(3)本題除錯過程碰到問題及解決辦法
小問題比較多,一個是m==n時的輸出,還有沒看清題目,是有幾位數就是幾次冪。
(4)執行結果截圖