第七章 C语言程序没计

7.1

short int values are usually stored in 16 bits, causing failure at 182. int and long int 
values are usually stored in 32 bits, with failure occurring at 46341.

7.2

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>

int main()
{
	int i, n, count = 0;
	char ch;
	printf("This program prints a table of squares.\n");
	printf("Enter number of entries in table: ");
	scanf("%d", &n);
	ch = getchar();//因为在输入n的值之后会按ENTER键,ENTER键会遗留传递给ch = getchar();在这里
	 				不用ch = getchar();则if循环中的ch = getchar()就会读入ENTER键,do循环也就
	 				不会执行;
	
	for (i = 1; i <= n; i++) {
		printf("%10d%10d\n", i, i * i);
		
		if (i % 24 == 0) {
			printf("Press Enter to continue...\n");
			do {
				 ch = getchar();
			} while (ch != '\n');
		}
	}

	return 0;
}

7.3

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>

int main()
{
	double n, sum = 0;

	printf("This progream sums a series of integers.\n");
	printf("Enter integers (0 to terminate): ");

	scanf("%lf", &n);
	while (n != 0) {
		sum += n;
		scanf("%lf", &n);
	}

	printf("The sum is: %ld\n", sum);

	return 0;
}

7.4

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>

int main()
{
	char ch;
	printf("Enter phone number: ");

	while ((ch = getchar()) != '\n') {
		switch (toupper(ch)) {
		case 'A':case 'B':case 'C':
			printf("2"); break;
		case 'D':case 'E':case 'F':
			printf("3"); break;
		case 'G':case 'H':case 'I':
			printf("4"); break;
		case 'J':case 'EK':case 'L':
			printf("5"); break;
		case 'M':case 'O':case 'N':
			printf("6"); break;
		case 'P':case 'S':case 'R':
			printf("7"); break;
		case 'V':case 'T':case 'U':
			printf("8"); break;
		case 'W':case 'X':case 'Y':
			printf("9"); break;
		default:
			printf("%c", ch); break;
		}
	}
	return 0;
}

7.5

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>

int main()
{
	int i=0, a = 0; char ch;
	printf("Enter a word: ");
	while ((ch = getchar()) != '\n') {
		ch = toupper(ch);
		if (ch == 'A' || ch == 'E' || ch == 'I' || ch == 'L' || ch == 'N' || ch == 'O' ||
			ch == 'R' || ch == 'S' || ch == 'T' || ch == 'U') { i = 1;}
		else if (ch == 'D' || ch == 'G') { i = 2; }
		else if (ch == 'B' || ch == 'C' || ch == 'M' || ch == 'P') { i = 3; }
		else if (ch == 'F' || ch == 'H' || ch == 'V' || ch == 'W' || ch == 'Y') { i = 4; }
		else if (ch == 'K') { i = 5; }
		else if (ch == 'J' || ch == 'X') { i = 8; }
		else if (ch == 'Q' || ch == 'Z') { i = 10; }
		a += i;
	}
	
	printf("Scrabble value: %d\n", a);

	return 0;
}

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>

int main()
{
	char ch;
	int sum=0;

	printf("Enter a word: ")
	while ((ch = getchar())!='\n') {
		switch (toupper(ch)) {
		case 'D':case 'G':
			sum += 2; break;
		case 'B':case 'C':case 'M':case 'P':
			sum += 3; break;
		case 'F':case'H':case'V':case'W':case 'Y':
			sum += 4; break;
		case 'K':
			sum += 5; break;
		case 'J':case 'X':
			sum += 8; break;
		case 'Q':case 'Z':
			sum += 10; break;
		default:
			sum += 1; break;
		}
	}
	printf("Scrabble value: %d\n", sum);
	return 0;
}

7.6

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	printf("Size of int :%d\n", (int)sizeof(int));
	printf("Size of short: %d\n", (int)sizeof(short));
	printf("Size of long: %d\n", (int)sizeof(long));
	printf("Size of float: %d\n", (int)sizeof(float));
	printf("Size of double:%d\n", (int)sizeof(double));
	printf("Size of long double:%d\n", (int)sizeof(long double));

	return 0;
}

7.7

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int hcf(int n1, int n2);

int main(void)
{
	int num1=0, denom1=0, num2=0, denom2=0, result_num=0, result_denom=0;
	char ch;

	printf("Enter first fraction: ");
	scanf("%d/%d%c%d/%d", &num1, &denom1, &ch, &num2, &denom2);

	switch (ch) {
	case '+':
		result_num = num1 * denom2 + num2 * denom1;
		result_denom = denom1 * denom2;
		break;
	case '-':
		result_num = num1 * denom2 - num2 * denom1;
		result_denom = denom1 * denom2;
	case '*':
		result_num = num1 * num2;
		result_denom = denom1 * denom2;
	case '/':
		result_num = num1 * denom2;
		result_denom = denom1 * num1;
	}
	
	printf("The result is: %d/%d\n", result_num / hcf(result_num, result_denom),
	        result_denom / hcf(result_num, result_denom));
	return 0;
}

int hcf(int n1, int n2)//求两个数的最大公约数的函数
{
	if (n2 != 0)
		return hcf(n2, n1 % n2);
	else
		return n1;
}

这里直接使用指针,函数调用

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void gcd(int* result_num, int* result_denom);
int main()
{
	int num1 = 0, denom1 = 0, num2 = 0, denom2 = 0,
		num3 = 0, denom3 = 0, result_num = 0, result_denom = 0;
	char ch;
	printf("Enter the two fraction: ");
	scanf("%d/%d%c%d/%d", &num1, &denom1, &ch,&num2, &denom2);

	switch (ch) {
	case '+':
		result_num = num1 * denom2 + num2 * denom1;
		result_denom = denom1 * denom2;
		gcd(&result_num, &result_denom);
		break;
	case '-':
		result_num = num1 * denom2 - num2 * denom1;
		result_denom = denom1 * denom2;
		gcd(&result_num, &result_denom);
		break;
	case '*':
		result_num = num1* num2 ;
		result_denom = denom1 * denom2;
		gcd(&result_num, &result_denom);
		break;
	case '/':
		result_num = num1 * denom2 ;
		result_denom = num2 * denom1;
		gcd(&result_num, &result_denom);
		break;
	}
	
	printf("The sum is %d/%d\n", result_num, result_denom);

	return 0;
}
void gcd(int* result_num, int* result_denom)
{
	int c;
	int num = *result_num;
	int denom = *result_denom;
	while (*result_denom != 0) {
		c = *result_num % *result_denom;
		*result_num = *result_denom;
		*result_denom = c;
	}
	*result_denom = denom / *result_num;
	*result_num = num / *result_num;
	
}

7.8

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>
int main()
{
	int hours, minutes;
	int time;
	char ch;

	printf("Enter a 12-hour time:");
	scanf("%d:%d %c", &hours, &minutes, &ch);

	switch (toupper(ch)) {
	case 'P':
		time = hours * 60 + minutes + 12 * 60;
		break;
	case 'A':
		time = hours * 60 + minutes;
		break;
	}

	// 480 583 679 767 840 945 1140 1305 这是几个起飞时间换算为分钟的结果 
	if (time < 480) {
		printf("Closest departure time is 8:00 a.m., arriving at 10:16 a.m.");
	}
	else if (time < 583) {
		if ((time - 480) < (583 - time)) printf("Closest departure time is 8:00 a.m., arriving at 10:16 a.m.");
		else printf("Closest departure time is 9:43 a.m., arriving at 11:52 a.m.");
	}
	else if (time < 679) {
		if ((time - 583) < (679 - time)) printf("Closest departure time is 9:43 a.m., arriving at 11:52 a.m.");
		else printf("Closest departure time is 11:19 a.m., arriving at 1:31 p.m");
	}
	else if (time < 767) {
		if ((time - 679) < (767 - time)) printf("Closest departure time is 11:19 a.m., arriving at 1:31 p.m.");
		else printf("Closest departure time is 12:47 a.m., arriving at 3:00 p.m");
	}
	else if (time < 840) {
		if ((time - 767) < (840 - time)) printf("Closest departure time is 12:47 a.m., arriving at 3:00 p.m.");
		else printf("Closest departure time is 2:00 p.m., arriving at 4:08 p.m.");
	}
	else if (time < 945) {
		if ((time - 840) < (945 - time)) printf("Closest departure time is 2:00 p.m., arriving at 4:08 p.m.");
		else printf("Closest departure time is 3:45 p.m., arriving at 5:55 p.m.");
	}
	else if (time < 1140) {
		if ((time - 945) < (1140 - time)) printf("Closest departure time is 3:45 p.m., arriving at 5:55 p.m.");
		else printf("Closest departure time is 7:00 p.m., arriving at 9:20 p.m.");
	}
	else {
		if ((time - 1140) < (1305 - time)) printf("Closest departure time is 7:00 p.m., arriving at 9:20 p.m.");
		else printf("Closest departure time is 9:45 p.m., arriving at 11:58 p.m.");
	}

	return 0;
}

7.9

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>

int main()
{
	int hour, minute; char ch;

	printf("Enter a 12-hour time: ");
	scanf("%d : %d", &hour, &minute);
	ch = getchar();

	switch (toupper(ch)) {
	case 'P':printf("%d : %.2d PM\n", hour + 12, minute); break;
	case 'A':printf("%.2d : %.2d AM\n", hour, minute); break;
	}

	return 5;
}

7.10

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>

int main()
{
	int i=0; char ch;

	printf("Enter a sentence: ");

	while ((ch = getchar()) != '\n') {
		switch (toupper(ch)) {
		case 'A':case 'E':case 'I':case 'O':case 'U':
			i++;
		}
	}
	printf("Your sentence contains %d vowels\n", i);

	return 5;
}

7.11

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>

int main()
{

	char ch1, ch;
	printf("Enter a first and last name: ");
	scanf("%c", &ch1);
	while (getchar() != ' ');
	
	while ((ch = getchar()) != '\n') {
		putchar(ch);
	}
	printf(", %c.", ch1);
	return 5;
}

7.12

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	char opt; //operator
	double num1, num2;

	printf("Enter an expression: ");
	scanf("%lf", &num1);
	
	while (1) {
		opt = getchar();
		if (opt == '\n'){ 
			break;
		}
		scanf("%lf", &num2);
		switch (opt) {
		case '+':num1 += num2; break;
		case '-':num1 -= num2; break;
		case '*':num1 *= num2; break;
		case '/':num1 /= num2; break;
		}
	}

	printf("value of expression is %.2lf\n", num1);

	return 5;
}

7.13

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	char ch; int i = 0,j=1; 
	printf("Enter a sentence: ");

	while ((ch = getchar()) != '\n') {
		i++;
		if (ch == ' ') {
			i--;
			j++;
		}
	}
	printf("Average word length: %.1f\n", i * 1.0 / j);
	
	return 5;
}

7.14

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

int main()
{
	double x, y = 1, y1 = 0;
	printf("Enter a positive number: ");
	scanf("%lf", &x);

	do {
		 y1 = y;
		double z = x / y;
		double average = (y + z) / 2;
		y = average;
		//printf("z==%.5lf||average==%.5lf||y1==%.5lf||y==%.5lf||\n", z, average, y1, y);
		//printf("y-y1==%.5lf\n", y - y1);
	} while (fabs(y - y1)>0.00001*y);

	printf("Square root :%.5lf\n", y);
	return 5;
}

7.15
法一

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>


int main()
{
	int i, n=1,sum=1;
	printf("Enter a positive integer: ");
	scanf("%d", &i);

	while (n <= i) {
		sum *= n;
		n++;
	}

	printf("%d\n", sum);
	return 5;
}

法二

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>


int main()
{
	int i, n=1;
	printf("Enter a positive integer: ");
	scanf("%d", &i);

	for (; i > 0; n *= i, i--);

	//while (i > 0) {
	//n *= i;
	//i--;
    //}

	printf("%d\n", n);
	return 5;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值