练习8-1
#include <stdio.h>
#define diff(x,y) (x-y)
int main(void)
{
int x, y;
printf("请输入整数1:"); scanf_s("%d", &x);
printf("请输入整数2:"); scanf_s("%d", &y);
printf("两者之差为%d。\n", diff(x, y));
return 0;
}
练习8-2
#include <stdio.h>
#define max(x,y) ((x)>(y)?(x):(y))
int main(void)
{
int a, b, c, d;
printf("请输入整数1:"); scanf_s("%d", &a);
printf("请输入整数2:"); scanf_s("%d", &b);
printf("请输入整数3:"); scanf_s("%d", &c);
printf("请输入整数4:"); scanf_s("%d", &d);
printf("这四个整数中最大的整数是%d。\n", max(max(a, b), max(c, d)));
printf("这四个整数中最大的整数是%d。\n", max(max(max(a, b), c), d));
return 0;
}
练习8-3
#include <stdio.h>
#define swap(tmp,x,y) (tmp=x,x=y,y=tmp)
int main(void)
{
int x = 5;
int y = 10;
int tmp;
swap(tmp, x, y);
printf("x=%d\n", x);
printf("y=%d\n", y);
return 0;
}
练习8-4
#include <stdio.h>
#define NUMBER 5
/*---冒泡排序---*/
void bsort(int a[], int n) //bubble气泡,泡沫 sort将...分类,将...排序
{
int i, j;
for (i = 0; i < n - 1; i++) { //总共有n-1趟
for (j = n - 1; j > i; j--) { //从末尾向开头遍历
if (a[j - 1] < a[j]) {
int tmp = a[j]; //如果左侧的元素较小,则交换两个值
a[j] = a[j - 1];
a[j - 1] = tmp;
}
}
}
}
int main(void)
{
int i;
int height[NUMBER];
printf("请输入%d个人的身高。\n", NUMBER);
for (i = 0; i < NUMBER; i++) {
printf("请输入第%d名的身高:", i + 1);
scanf_s("%d", &height[i]);
}
bsort(height, NUMBER); //排序
puts("按降序排列");
for (i = 0; i < NUMBER; i++)
printf("第%d号=%d\n", i + 1, height[i]);
return 0;
}
练习8-5
#include <stdio.h>
enum gender { Male, Female, gen_Invalid };
enum senson { Spring, Summer, Autumn, Winter, senson_Invalid };
void male(void)
{
printf("男性\n");
}
void female(void)
{
printf("女性\n");
}
void spring(void)
{
printf("春季\n");
}
void summer(void)
{
printf("夏季\n");
}
void autumn(void)
{
printf("秋季\n");
}
void winter(void)
{
printf("冬季\n");
}
enum gender gender_select(void)
{
int tmp;
do {
printf("0...雄性/1...雌性/2...结束:");
scanf_s("%d", &tmp);
} while (tmp<Male || tmp>gen_Invalid);
return (enum gender)tmp;
}
enum senson senson_select(void)
{
int tmp;
do {
printf("0...春季/1...夏季/2...秋季/3...冬季/4...结束:");
scanf_s("%d", &tmp);
} while (tmp<Spring || tmp>senson_Invalid);
return (enum senson)tmp;
}
int main(void)
{
enum gender gender_selected;
enum senson senson_selected;
int i;
do {
printf("选择操作项【0...性别/1...季节】:");
scanf_s("%d", &i);
} while (i < 0 || i>1);
if (i == 0) {
do {
switch (gender_selected = gender_select()) {
case Male :male(); break;
case Female :female(); break;
}
} while (gender_selected != gender_select());
}
else {
do {
switch (senson_selected = senson_select()) {
case Spring :spring(); break;
case Summer :summer(); break;
case Autumn :autumn(); break;
case Winter :winter(); break;
}
} while (senson_selected != senson_select());
}
return 0;
}
练习8-6
#include <stdio.h>
int main(void)
{
int num;
int i;
int factorial = 1;
printf("请输入一个整数:");
scanf_s("%d", &num);
for (i = 1; i <= num; i++) {
factorial*= i;
}
printf("整数%d的阶乘为%d\n", num, factorial);
return 0;
}
练习8-7
#include <stdio.h>
int combination(int x, int y)
{
if (y == 0) return 1;
else if (y == x) return 1;
else if (y == 1) return x;
else return (combination((x - 1), (y - 1)) + combination((x - 1), (y)));
}
int main(void)
{
int i, j;
do {
printf("请输入两个整数,要求整数1大于等于整数2\n");
printf("整数1:"); scanf_s("%d", &i);
printf("整数2:"); scanf_s("%d", &j);
} while (i < j);
printf("从%d个不同的整数中取出%d个整数的组合数为%d\n", i, j, combination(i, j));
return 0;
}
练习8-8
#include <stdio.h>
int gcd(int x, int y)
{
int l, s;
int a, b, c;
if (x > y) {
l = x;
s = y;
}
else if (x < y) {
l = y;
s = x;
}
else {
return x;
}
a = l % s;
if (a == 0)
return s;
else {
return gcd(a, s);
}
}
int main(void)
{
int i, j;
printf("请输入两个正整数:\n");
printf("正整数1:"); scanf_s("%d", &i);
printf("正整数2:"); scanf_s("%d", &j);
printf("两者的最大公约数为:%d\n", gcd(i, j));
return 0;
}
练习8-9
#include <stdio.h>
int main(void)
{
int ch;
int cnt = 0;
while ((ch = getchar()) != EOF) {
if (ch == '\n')
cnt++;
}
printf("共计有%d行\n", cnt);
return 0;
}
练习8-10
#include <stdio.h>
int main(void)
{
int i, j, ch;
int cnt[10] = { 0 };
while ((ch = getchar()) != EOF)
if (ch >= '0'&&ch <= '9')
cnt[ch - '0']++;
for (i = 0; i < 10; i++) {
printf("%d:", i);
for (j = 0; j < cnt[i]; j++)
putchar('*');
putchar('\n');
}
return 0;
}