《明解C語言》示例程式碼和練習程式碼[第8章]
第8章 動手編寫各種程式吧
示例程式碼:
示例程式碼8-1
/* 整數的平方和浮點數的平方(函式) */ #include <stdio.h> // int型整數的平方值 int sqr_int(int x) { return (x * x); } // double型浮點數的平方值 double sqr_double(double x) { return (x * x); } int main(void) { int nx; double dx; printf("請輸入一個整數:"); scanf("%d", &nx); printf("該數的平方是%d。\n", sqr_int(nx)); printf("請輸入一個實數:"); scanf("%lf", &dx); printf("該數的平方是%f。\n", sqr_double(dx)); return (0); }
示例程式碼8-2
/* 整數的平方和浮點數的平方(函式式巨集) */ #include <stdio.h> #define sqr(x)((x) * (x)) // 計算x的平方 int main(void) { int nx; double dx; printf("請輸入一個整數:"); scanf("%d", &nx); printf("該數的平方是%d。\n", sqr(nx)); printf("請輸入一個實數:"); scanf("%lf", &dx); printf("該數的平方是%f。\n", sqr(dx)); return (0); }
示例程式碼8-3
/*
響鈴並顯示的巨集定義(誤例)
*/
#include <stdio.h>
#define putsa(str) { putchar('\a'); puts(str); }
int main(void)
{
int na;
printf("請輸入一個整數:");
scanf("%d", &na);
if (na)
putsa("這個數不是0。");
else
putsa("這個數是0。");
return (0);
}
示例程式碼8-4
/*
響鈴並顯示的巨集定義(誤例)
*/
#include <stdio.h>
#define putsa(str) ( putchar('\a'), puts(str) )
int main(void)
{
int na;
printf("請輸入一個整數:");
scanf("%d", &na);
if (na)
putsa("這個數不是0。");
else
putsa("這個數是0。");
return (0);
}
示例程式碼8-5
/*
顯示所選動物的叫聲
*/
#include <stdio.h>
enum animal { Dog, Cat, Monkey, Invalid };
// 狗叫
void dog(void)
{
puts("汪汪!");
}
// 貓叫
void cat(void)
{
puts("喵~!");
}
// 猴叫
void monkey(void)
{
puts("唧唧!!");
}
// 選擇動物
enum animal select(void)
{
int tmp;
do {
printf("0...狗 1...貓 2...猴 3...結束:");
scanf("%d", &tmp);
} while (tmp < Dog || tmp > Invalid);
return (tmp);
}
int main(void)
{
enum animal selected;
do {
switch (selected = select()) {
case Dog : dog(); break;
case Cat : cat(); break;
case Monkey : monkey(); break;
}
} while (selected != Invalid);
return (0);
}
示例程式碼8-6
/*
計算階乘
*/
#include <stdio.h>
// 返回階乘的值
int factorial(int n)
{
if (n > 0)
return (n * factorial(n - 1));
else
return (1);
}
int main(void)
{
int num;
printf("請輸入一個整數:");
scanf("%d", &num);
printf("\該數階乘為:%d。\n", factorial(num));
return (0);
}
示例程式碼8-7
/*
求出最大公約數
*/
#include <stdio.h>
// 返回vx和vy的最大公約數(vx >= vy)
int gcdf(int vx, int vy)
{
return (vy == 0 ? vx : gcdf(vy, vx % vy));
}
// 求出va和vb的最大公約數
int gcd(int va, int vb)
{
return (va > vb ? gcdf(va, vb) : gcdf(vb, va)) ;
}
int main(void)
{
int n1, n2;
puts("請輸入兩個整數。");
printf("整數1:"); scanf("%d", &n1);
printf("整數2:"); scanf("%d", &n2);
printf("最大公約數是%d。\n", gcd(n1, n2));
return (0);
}
示例程式碼8-8
/*
計算標準輸入流中出現的數字字元數
*/
#include <stdio.h>
int main(void)
{
int i, ch;
int cnt[10] = {0}; // 數字字元的出現次數
while (1) { // 死迴圈
ch = getchar();
if (ch == EOF) break;
switch (ch) {
case '0' : cnt[0]++; break;
case '1' : cnt[1]++; break;
case '2' : cnt[2]++; break;
case '3' : cnt[3]++; break;
case '4' : cnt[4]++; break;
case '5' : cnt[5]++; break;
case '6' : cnt[6]++; break;
case '7' : cnt[7]++; break;
case '8' : cnt[8]++; break;
case '9' : cnt[9]++; break;
}
}
puts("數字字元的出現次數");
for (i = 0; i < 10; i++)
printf("'%d' : %d\n", i, cnt[i]);
return(0);
}
示例程式碼8-9
/*
計算標準輸入流中出現的數字字元數(第2版)
*/
#include <stdio.h>
int main(void)
{
int i, ch;
int cnt[10] = {0}; // 數字字元的出現次數
while (1) { // 死迴圈
ch = getchar();
if (ch == EOF) break;
if (ch >= '0' && ch <= '9')
cnt[ch - '0']++;
}
puts("數字字元的出現次數");
for (i = 0; i < 10; i++)
printf("'%d' : %d\n", i, cnt[i]);
return(0);
}
示例程式碼8-10
/*
顯示EOF和數字字元的值
*/
#include <stdio.h>
int main(void)
{
int i;
printf("EOF = %d\n", EOF);
for (i = 0; i < 10; i++)
printf("'%d' = %d\n", i, '0' + i);
return (0);
}
示例程式碼8-11
/*
從標準輸入流複製到標準輸出流
*/
#include <stdio.h>
int main(void)
{
int ch;
while ((ch = getchar()) != EOF)
putchar(ch);
return (0);
}
練習程式碼:
練習程式碼e8-1
/*
定義一個函式式巨集diff(x, y),返回x、y二值之差
*/
#include <stdio.h>
#define diff(x, y) x - y
int main(void)
{
int n1, n2;
printf("請輸入兩個整數:");
scanf("%d%d", &n1, &n2);
printf("兩數之差是%d。\n", diff(n1, n2));
system("pause");
return (0);
}
練習程式碼e8-2
/*
定義返回x、y中較大值的函式式巨集
*/
#include <stdio.h>
#define max(x, y) (((x) > (y) ? (x) : (y)))
int main(void)
{
int a, b, c, d;
printf("請輸入四個整數:");
scanf("%d%d%d%d", &a, &b, &c, &d);
printf("max(max(a, b), max(c, d))返回值是%d。\n", max(max(a, b), max(c, d)));
printf("max(max(max(a, b), c), d)返回值是%d。\n", max(max(max(a, b), c), d));
system("pause");
return (0);
}
練習程式碼e8-3
/*
定義一個函式式巨集swap(type, a, b)以使type型的兩值互換
*/
#include <stdio.h>
#define swap(type, a, b) type t; t = a; a = b; b = t;
int main(void)
{
int a, b;
double c, d;
printf("請輸入兩個整數:");
scanf("%d%d", &a, &b);
printf("\n前:a = %d, b = %d\n", a, b);
swap(int, a, b)
printf("\n後:a = %d, b = %d\n", a, b);
/*
printf("請輸入兩個實數:");
scanf("%lf%lf", &c, &d);
printf("\n前:c = %f, d = %f\n");
swap(double, c, d)
printf("\n後:c = %f, d = %f\n");
*/
return (0);
}
練習程式碼e8-4
/*
在程式中定義表示性別、季節等的列舉型別,並有效使用它們
*/
#include <stdio.h>
enum sex {male, female};
enum season {spring, summer, fall, winter};
// 選擇性別
enum sex select_s(void)
{
int tmp;
do {
printf("0...男 1...女");
scanf("%d", &tmp);
} while (tmp < male || tmp > female);
return (tmp);
}
// 選擇季節
enum season select_ss(void)
{
int tmp;
do {
printf("0...春季 1...夏季 2...秋季 3...冬季");
scanf("%d", &tmp);
} while (tmp < spring || tmp > winter);
return (tmp);
}
int main(void)
{
enum sex s;
enum season ss;
s = select_s();
ss = select_ss();
if (s)
printf("選擇的性別是:女性\n");
else
printf("選擇的性別是:男性\n");
switch (ss) {
case 0 : printf("選擇的季節是:春季\n"); break;
case 1 : printf("選擇的季節是:夏季\n"); break;
case 2 : printf("選擇的季節是:秋季\n"); break;
case 3 : printf("選擇的季節是:冬季\n"); break;
}
return (0);
}
練習程式碼e8-5
/*
不使用遞迴,定義如下函式,使其返回整數n的階乘
*/
#include <stdio.h>
int fact(int n)
{
int f = 1;
while (n)
f *= n--;
return f;
}
int main(void)
{
int num;
printf("請輸入一個整數:");
scanf("%d", &num);
printf("\該數階乘為:%d。\n", fact(num));
return (0);
}
練習程式碼e8-6
/*
求出從n個不同整數中取出r個整數的組合數
*/
#include <stdio.h>
int combination(int n, int r)
{
int c;
if (r == 0 || n == r)
c = 1;
else if (r == 1)
c = n;
else
c = combination(n - 1, r - 1) + combination(n - 1, r);
return (c);
}
int main(void)
{
int n, r;
printf("請輸入個數:"); scanf("%d", &n);
printf("請輸組合數:"); scanf("%d", &r);
printf("%d的%d組合結果是:%d。\n", n, r, combination(n, r));
return (0);
}
練習程式碼e8-7
/*
計算標準輸入流中出現的數字字元數(出現次數用*表示)
*/
#include <stdio.h>
int main(void)
{
int i, ch;
int cnt[10] = {0}; // 數字字元的出現次數
while (1) { // 死迴圈
ch = getchar();
if (ch == EOF) break;
if (ch >= '0' && ch <= '9')
cnt[ch - '0']++;
}
puts("數字字元的出現次數");
for (i = 0; i < 10; i++) {
printf("'%d' : ", i);
while (cnt[i]--)
printf("*");
putchar('\n');
}
return(0);
}
練習程式碼e8-8
/*
計算標準輸入流中出現的行數
*/
#include <stdio.h>
int main(void)
{
int ch;
int n = 0;
while ((ch = getchar()) != EOF) {
putchar(ch);
if (ch == '\n') n++;
}
printf("一共輸入了%d行。\n", n);
return (0);
}
相關推薦
《明解C語言》筆記及課後習題 【第一章】
練習1-1 /*---編寫一段程式,計算出15減去37的結果,並以“15減去37 的結果時-22。”的格式進行顯示。*/ #include <stdio.h> int main (void) { printf("15減去37的結果是%d\n",15-
《明解C語言》示例程式碼和練習程式碼[第8章]
第8章 動手編寫各種程式吧 示例程式碼: 示例程式碼8-1 /* 整數的平方和浮點數的平方(函式) */ #include <stdio.h> // int型整數的平方值
《明解C語言》示例程式碼和練習程式碼[第9章]
第9章 字串的基本認識 示例程式碼: 示例程式碼9-1 /* 顯示字串字面長度 */ #include <stdio.h> int main(void) { prin
《明解C語言》示例程式碼和練習程式碼[第11章]
第11章 字串和指標 示例程式碼: 示例程式碼11-1 /* 用陣列實現的字串和用指標實現的字串 */ #include <stdio.h> int main(void) {
《明解C語言》示例程式碼和練習程式碼[第12章]
第12章 結構體 示例程式碼: 示例程式碼12-1 /* 將5名學生的“身高”按升序排列 */ #include <stdio.h> #define NUMBER 5 //
《明解C語言》示例程式碼和練習程式碼[第3章]
第3章 分支結構程式 示例程式碼: 示例程式碼 3-1 /* 輸入的整數能被5整除嗎 */ #include <stdio.h> int main(void) { int vx; printf("請輸入一個整數:");
哨兵查詢法(明解c語言)
//哨兵法,就是將待查詢的元素加入待查詢的陣列的後面,這樣可以提高效能(在資料量很龐大的時候體現出來) #include <stdio.h> #define FAILURE -1 //使用for迴圈的 int searching1(int v[],int key,int n) {
明解C語言入門篇練習題第七章
練習7-1#include <stdio.h> int main(void) { int n = 1; printf("sizeof 1 : %u\n",sizeof(1)); printf("sizeof +1 : %u\n", sizeof(+1));
明解C語言入門篇練習題第五章
練習5-1#include <stdio.h> int main(void) { int i; int v[5]; /* int[5]陣列 */ for (i = 0; i < 5; i++) /* 為陣列元素賦值 */ v[i] = i; f
明解C語言入門篇練習題第九章
練習9-1#include<stdio.h> int main(void) { char str[] = "ABC\0DEF"; printf("string str = %s\n",str); return 0; }練習9-2#include<st
《明解C語言》筆記及課後習題答案 【第十二章】
練習12-1/*---編寫顯示物件takao各成員地址的程式。---*/ #include <stdio.h> #define NAME_LEN 64 struct student { char name[NAME_LEN]; int height;
《明解C語言》筆記及課後習題答案 【第三章】
練習3-1/*---輸入兩個整數,判斷後者是否為前者的約數---*/ #include <stdio.h> int main(void) { int a,b; puts("請輸入兩個整數。"); printf("整數a:"); scanf("%d"
明解C語言中級篇練習題第一章
練習1-1#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int qian; srand(time(NULL));//seed qi
《明解C語言》筆記及課後習題答案 【第六章】
練習6-1/*---返回兩個int型整數中較小一數的值---*/ #include <stdio.h> int min2(int a, int b){ if (a > b) return b; else return a; } int ma
明解C語言中級篇練習題第二章
練習2-1#include <time.h> #include <stdio.h> /*--- 等待x毫秒 ---*/ int sleep(unsigned long x) { clock_t c1 = clock(), c2; do { i
《明解C語言》筆記及課後習題答案 【第九章】
練習9-1/*---輸出字元陣列char str[] = "ABC\0DEF"---*/ #include <stdio.h> int main(void) { char str[] = "ABC\0DEF"; printf("字串str為\"%s\
《明解C語言》筆記及課後習題答案 【第五章】
練習5-1/*---從頭順次為陣列中的元素賦值0,1,2,3,4---*/ #include <stdio.h> int main(void) { int i, v[5]; for(i = 0;i < 5; i++){ v[i] = i;
明解C語言 入門篇 第四章答案
練習4-1 #include <stdio.h> int main(void) { int no; int x; do{ printf("請輸入一個整數:"); scanf("%d", &no);
C語言程式設計(第二版)第6章程式設計題
1:找出與平均值相差最小的元素 #include"stdio.h" #include"math.h" #define N 10 void main() { int i; double a[N],v=0,min; printf("Please input
挑戰程式設計競賽 演算法和資料結構 第8章 樹
//ALDS1_7_B Binary Trees #include <stdio.h> #include <string.h> struct node{ int parent,left,right; }T[30]; int H[30],D[30];//H[]高度 D[]深度