第三章
程序設計T5
#include<stdio.h>
#include<math.h>
int main() {
int x1, x2, x3, y1, y2, y3;
double a, b, c,d,f,s;
printf("請輸入第一個點的坐標:");
scanf("%d\t%d", &x1, &y1);
printf("請輸入第二個點的坐標:");
scanf("%d\t%d", &x2, &y2);
printf("請輸入第三個點的坐標:");
scanf("%d\t%d", &x3, &y3);
a = sqrt((y2 - y1)*(y2 - y1) + (x2 - x1)*(x2 - x1));
b = sqrt((y3 - y1)*(y3 - y1) + (x3 - x1)*(x3 - x1));
c = sqrt((y3 - y2)*(y3 - y2) + (x3 - x2)*(x3 - x2));
//a=sqrt(pow(y2-y1,2)+pow(x2-x1,x))
if (a + b > c&&a + c > b&&b + c > a) {
d = a + b + c;
s = (a + b + c) / 2;
f = sqrt(s*(s - a)*(s - b)*(s - c));
}
else {
printf("impossible");
}
printf("周長為:%.2lf,面積為:%.2lf", d, f);
return 0;
}
其中的pow(a,b)意為a的b次方,要加上math.h的庫。
第四章
p72例4-2(平均成績和不及格人數(shù))
統(tǒng)計一批學生的平均成績與不及格人數(shù),從鍵盤輸入一批學生的成績,計算平均成績,并統(tǒng)計不及格學生的人數(shù)。
#include<stdio.h>
#include<math.h>
int main() {
int a=0, b=0;//a為學生人數(shù),b為不及格人數(shù)
double sum=0, c,adv;//c為學生成績
printf("請輸入學生成績:");
scanf("%lf", &c);
while (c>0)
{
a += 1;
sum += c;
if (c < 60) {
b += 1;
}
scanf("%lf", &c);
}
adv = sum / a;
printf("一共%d個學生,平均成績是%.2lf,不及格人數(shù)為%d", a, adv, b);
return 0;
}
p74例4-3(統(tǒng)計整數(shù)位數(shù))
統(tǒng)計一個整數(shù)的位數(shù)。從鍵盤讀入一個整數(shù),統(tǒng)計該數(shù)的位數(shù)。例如12345輸出5,-99輸出2,0輸出1
#include<stdio.h>
#include<math.h>
int main() {
//統(tǒng)計一個整數(shù)的位數(shù)。從鍵盤讀入一個整數(shù),統(tǒng)計該數(shù)的位數(shù)。例如12345輸出5,-99輸出2,0輸出1
int a,b=0;//a為輸入的數(shù),b為位數(shù)
printf("請輸入一個整數(shù):");
scanf("%d", &a);
if (a < 0) {
a = -a;
}
do
{
b += 1;
a = a / 10;
} while (a!=0);
printf("%d", b);
return 0;
}
p76例4-4(逆序輸出)
逆序輸出一個整數(shù)的各位數(shù)字。輸入一個整數(shù),將其逆序輸出,例如輸入12345,輸出54321.
#include<stdio.h>
#include<math.h>
int main() {
//逆序輸出一個整數(shù)的各位數(shù)字。輸入一個整數(shù),將其逆序輸出,例如輸入12345,輸出54321.
int a,b;
printf("請輸入一個整數(shù):");
scanf("%d", &a);
while (a != 0) {
b = a % 10;
a = a / 10;
printf("%d", b);
}
return 0;
}
p77例4-5(素數(shù)判斷)
判斷一個整數(shù)是否是素數(shù)。輸入一個正整數(shù)m,判斷它是否為素數(shù)。素數(shù)就是只能被1和自身整除的正整數(shù),1不是素數(shù),2是素數(shù)。
#include<stdio.h>
#include<math.h>
int main() {
//判斷一個整數(shù)是否是素數(shù)。輸入一個正整數(shù)m,判斷它是否為素數(shù)。素數(shù)就是只能被1和自身整除的正整數(shù),1不是素數(shù),2是素數(shù)。
int a,i;
printf("請輸入一個正整數(shù):");
scanf("%d", &a);
if (a <= 1) {
printf("不是素數(shù)!");
}
else if (a == 2) {
printf("這是個素數(shù)!");
}
else {
for (i = 2; i <= a - 1; i++) {
if (a%i == 0) {
break;
}
}
if (i >= a) {
printf("這是個素數(shù)!");
}
else {
printf("不是素數(shù)!");
}
}
return 0;
}
p81例4-7(1!+2!+3!+...+n!)
#include<stdio.h>
#include<math.h>
int main() {
//1!+2!+3!+...+n!
int a,sum=0,b;
printf("輸入整數(shù)n:");
scanf("%d", &a);
for (int i = 1; i <= a; i++) {
b = 1;
for (int j = 1; j <=i; j++) {
b = b * j;
}
sum = sum + b;
}
printf("%d", sum);
return 0;
}
p85例4-8(最值問題,求最高分)
從輸入的n個成績中選出最高分,用for語句實現(xiàn)
#include<stdio.h>
#include<math.h>
int main() {
//從輸入的n個成績中選出最高分,用for語句實現(xiàn)
int a,max,b;//a是學生個數(shù),b是學生成績
printf("學生的個數(shù)是:");
scanf("%d", &a);
printf("請輸入%d個學生的成績:",a);
scanf("%d", &b);
max = b;
for (int i = 1; i <a; i++) {
scanf("%d",&b);
if (b > max) {
max = b;
}
}
printf("最大值為%d", max);
return 0;
}
程序設計題
1.求奇數(shù)和,輸入一批正整數(shù)(以0或負數(shù)作為結束標志),求其中的奇數(shù)和
#include<stdio.h>
#include<math.h>
int main() {
//求奇數(shù)和,輸入一批正整數(shù)(以0或負數(shù)作為結束標志),求其中的奇數(shù)和
int a,sum=0;
printf("請輸入正整數(shù):");
scanf("%d", &a);
while (a > 0) {
if (a % 2 != 0) {
sum = sum + a;
}
scanf("%d", &a);
}
printf("%d", sum);
return 0;
}
2.展開式求和。輸入一個實數(shù) x,計算并輸出下式的和,直到最后一項的絕對值小于 0.000 01 ,計算結果保留 4 位小數(shù)。要求定義和調用函數(shù) fact(n) 計算 n 的階乘,可以調用 pow() 函數(shù)求冪。試編寫相應程序。
s=1+x+x2/2!+x三次方/3!+...
#include<stdio.h>
#include<math.h>
double fact(int n) {
double sum=1;
for (int i = 1; i <= n; i++) {
sum = sum * i;
}
return sum;
}
int main() {
//展開式求和。輸入一個實數(shù) x,計算并輸出下式的和,直到最后一項的絕對值小于 0.000 01 ,計算結果保留 4 位小數(shù)。
//要求定義和調用函數(shù) fact(n) 計算 n 的階乘,可以調用 pow() 函數(shù)求冪。試編寫相應程序。
//s = 1 + x + x2 / 2! + x三次方 / 3! + ...
int i=1;
double s = 0,b,a;
double e = 0.00001;
printf("Enter x:");
scanf("%lf", &a);
b = 1;
while (fabs(b)>e)
{
s += b;
b = pow(a, i) / fact(i);
i += 1;
}
s += b;
printf("%.4lf", s);
return 0;
}
3.求序列和。輸入一個正整數(shù) n,輸出 2/1+3/2+5/3+8/5+... 的前 n 項之和,保留 2 位小數(shù)。該序列從第 2 項起,每項的分子是前一項分子與分母的和,分母是前項的分子。試編寫相應程序。
int main() {
//求序列和。輸入一個正整數(shù) n,輸出 2/1+3/2+5/3+8/5+... 的前 n 項之和,
//保留 2 位小數(shù)。該序列從第 2 項起,每項的分子是前一項分子與分母的和,分母是前項的分子。試編寫相應程序。
int i, n;
double x, x1, x2, sum = 0;
x1 = 2;//分子
x2 = 1;//分母
printf("input n:");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
sum += x1 / x2;
x = x1 + x2; // 臨時存儲:分子+分母,就是下一次的分子
x2 = x1; // 下一次的分母,就是上次的分子
x1 = x; // 下一次的分子
}
printf("sum = %.2lf\n", sum);
return 0;
}
4.求序列和。輸入兩個正整數(shù) a 和 n,求 a+aa+aaa+aa...a ( n 個 a ) 之和。例如,輸入 2 和 3 ,輸出246 ( 2+22+222 )。試編寫相應程序。
int main() {
//求序列和。輸入兩個正整數(shù) a 和 n,求 a+aa+aaa+aa...a ( n 個 a ) 之和。例如,輸入 2 和 3 ,輸出246 ( 2+22+222 )。試編寫相應程序。
int a, n,sum=0,i=1,t=0;
printf("enter a and n:");
scanf("%d\t%d", &a, &n);
while (i <= n) {
t = t * 10 + a;
sum += t;
i++;
}
printf("%d", sum);
return 0;
}
5.換硬幣。將一筆零錢(大于 8 分,小于 1 元,精確到分 ) 換成 5 分,2 分和 1 分的硬幣,每種硬幣至少有一枚。輸入金額,問有幾種換法? 針對每種換法, 輸出各種面額硬幣的數(shù)量和硬幣的總數(shù)量。試編寫相應程序
int main() {
//換硬幣。將一筆零錢(大于 8 分,小于 1 元,精確到分 ) 換成 5 分,2 分和 1 分的硬幣,每種硬幣至少有一枚。輸入金額,問有幾種換法?
//針對每種換法, 輸出各種面額硬幣的數(shù)量和硬幣的總數(shù)量。試編寫相應程序.
int count,a=0;
int x, y, z;
printf("enter count:");
scanf("%d", &count);
if (count <= 8 || count >= 100) {
printf("error!");
}
else {
for (x = 1; x <= count; x++) {
for (y = 1; y <= count; y++) {
for (z = 1; z <= count; z++) {
if (x*5 + y*2 + z == count) {
a++;
printf("5分:%d個,2分:%d個,1分:%d個,有%d個硬幣\n", x, y, z,x+y+z);
}
}
}
}
printf("共有%d種", a);
}
return 0;
}
6.輸出水仙花數(shù)。輸入一個正整數(shù) n ( 3≤n≤7 ), 輸出所有的 n 位水仙花數(shù)。水仙花數(shù)是指一個 n 位正整數(shù),它的各位數(shù)字的 n 次幕之和等于它本身。 例如 153 的各位數(shù)字的立方和是13+53+3^3 =153。試編寫相應程序。
int main() {
//輸出水仙花數(shù)。輸入一個正整數(shù) n ( 3≤n≤7 ), 輸出所有的 n 位水仙花數(shù)。水仙花數(shù)是指一個 n 位正整數(shù),它的各位數(shù)字的 n 次幕之和等于它本身。
//例如 153 的各位數(shù)字的立方和是1^3+5^3+3^3 =153。試編寫相應程序。
int n;
do
{
printf("input n (3≤n≤7):");
scanf("%d", &n);
} while (n > 7 || n < 3);
printf("水仙花數(shù)有:\n");
int i = pow(10, n) - 1; //上限
int limit = pow(10, n - 1); //下限
int digit, sum, s, m;
while (i >= limit)
{
sum = 0;
s = i;
m = n;
//循環(huán)獲取每個位上的數(shù)字
while (s != 0)
{
digit = s / (int)(pow(10, m - 1));
s %= (int)(pow(10, m - 1));
sum += pow(digit, n); // 每個位上的數(shù)字的n次方和
m--;
}
if (sum == i)
{
printf("%d\t", i);
}
i--;
}
printf("\n");
return 0;
}