C Primer Plus 编程练习(第三~六章)

第三章

/*Q1--观察上溢和下溢*/
#include <stdio.h>
#include <limits.h>
#include <float.h>
int main(void)
{
	float a = 10.0/3;
	printf("浮点数下溢损失精度打印为%f\n", a);
	printf("最大浮点数为%f\n", FLT_MAX);
	printf("浮点数上溢打印出%f\n", FLT_MAX * 10);
	printf("最大整数为%d\n", INT_MAX);
	printf("整数上溢打印出%d\n", INT_MAX + 1);
	return 0;
}

/*Q2--打印ASCII码对应的字符*/
#include <stdio.h>
int main(void)
{
	int a;
	printf("请输入一个ASCII码值\n");
	scanf("%d", &a);
	printf("输入的ASCII码值对应的字符是%c\n", a);
	return 0;
}

 

 

/*Q3--发出警报并打印指定文本*/
#include <stdio.h>
int main(void)
{
	printf("\aStartled by the sudden sound, Sally shouted,\n");
	printf("\"By the Great Pumpkin, what was that!\"");
	return 0;
}

/*Q4--读取浮点数并打印为不同形式*/
#include <stdio.h>
int main(void)
{
	float a;

	printf("Enter a floating-point value:");
	scanf("%f", &a);
	printf("fixed-point notation:%f\n", a);
	printf("exponential notation:%e\n", a);
	printf("p natation:%a", a);
	return 0;
}

 

 

/*Q5--年龄转换微秒数*/
#include <stdio.h>
#define SEC_PER_YEAR 3.156e+7
int main(void)
{
	float age;

	printf("请输入你的年龄:");
	scanf("%f", &age);
	printf("该年龄对应的秒数为%e\n", age * SEC_PER_YEAR);
	return 0;
}

/*Q6--将水的夸脱数转换为水分子的数量*/
#include <stdio.h>
#define PER_QUA_WATER 950
#define PER_HYD_QUA 3e-23
int main(void)
{
	float quart;
	printf("请输入水的夸脱数:");
	scanf("%f", &quart);
	printf("其对应的水分子数为%e", quart * PER_QUA_WATER/PER_HYD_QUA);
	return 0;
}

 

 

/*Q7--将身高由英尺转换为厘米*/
#include <stdio.h>
#define PER_FOOT 2.54
int main(void)
{
	float height;
	printf("请输入身高(英尺):");
	scanf("%f", &height);
	printf("你的身高以厘米显示为%f", height*PER_FOOT);
	return 0;
}

 

/*Q8--美国的体积测量系统*/
#include <stdio.h>
int main(void)
{
	float pint;
	printf("请输入杯数:");
	scanf("%f", &pint);
	printf("其对应\n品脱:%f\n", pint / 2);
	printf("盎司:%f\n", pint * 8);
	printf("汤勺:%f\n", pint * 16);
	printf("茶勺:%f\n", pint * 48);
	return 0;
}

 

第四章

/*Q1--以特定格式打印姓名*/
#include <stdio.h>
int main(void)
{
	char surname[10];
	char name[10];

	printf("请输入你的姓(surname)\n");
	scanf("%s", surname);
	printf("接下来请输入你的名(name)\n");
	scanf("%s",name);
	printf("%s,%s", name, surname);
	return 0;
}

 

/*Q2--以不同形式打印姓名*/
#include <stdio.h>
#include <string.h>
int main(void)
{
	char name[20] = {0};

	printf("请输入你的名字\n");
	scanf("%s", name);
	printf("\"%s\"\n", name);
	printf("********************\n");
	printf("\"%18s\"\n", name);
	printf("\"%-18s\"\n", name);
	printf("%*s", strlen(name) + 3, name);
	return 0;
}

 

 

 

/*Q3--小数点计数法和指数计数法分别打印浮点数*/
#include <stdio.h>
int main(void)
{
	float a;

	scanf("%f", &a);
	printf("The input is %f or %e\n", a, a);
	printf("The input is %+.3f or %.3E\n", a, a);
	return 0;
}

/*Q4--打印名字与身高*/
#include <stdio.h>
int main(void)
{
	char name[20] = { 0 };
	float height = 0;

	printf("请输入你的姓名\n");
	scanf("%s", name);
	printf("请输入你的身高(cm)\n");
	scanf("%f", &height);
	printf("%s,you are %f metre tall \n", name, height / 100);
	return 0;
}

 

/*Q5--计算文件下载时间*/
#include <stdio.h>
int main(void)
{
	float speed=0;
	float size=0;

	printf("请输入文件的下载速度(Mb/s)\n");
	scanf("%f", &speed);
	printf("请输入文件大小\n");
	scanf("%f", &size);
	printf("At %.2f megabits per second ,a file of %.2f megabytes\n", speed, size);
	printf("downloads in %.2f seconds", size * 8 / speed);
	return 0;

}

 

/*Q6--名姓字母数与名姓对齐*/
#include <stdio.h>
#include <string.h>
int main(void)
{
	char surname[10] = { 0 };
	char name[10] = { 10 };

	printf("请输入名\n");
	scanf("%s", name);
	printf("请输入姓\n");
	scanf("%s", surname);
	printf("%s %s\n", name, surname);
	printf("%*d %*d\n", strlen(name), strlen(name), strlen(surname), strlen(surname));
	printf("%s %s\n", name, surname);
	printf("%-*d %-*d\n", strlen(name), strlen(name), strlen(surname), strlen(surname));
	return 0;
}

 

/*Q7-观察float与double的精度*/
#include<stdio.h>
#include <float.h>
int main(void)
{
	double a = 1.0 / 3.0;
	float b = 1.0 / 3.0;
	printf("%.6lf\n", a);
	printf("%.12lf\n", a);
	printf("%.16lf\n", a);
	printf("%.6f\n", b);
	printf("%.12f\n", b);
	printf("%.16f\n", b);
	printf("%d\n", DBL_DIG);
	printf("%d\n", FLT_DIG);
	return 0;
}

 

/*欧洲与美国的燃油消耗表示法*/
#include <stdio.h>
#define PER_GAL 3.785
#define PER_MILE 1.609
int main(void)
{
	float distance;
	float consumption;

	printf("请输入旅行的旅程(英里)\n");
	scanf("%f", &distance);
	printf("请输入消耗的汽油量(加仑)\n");
	scanf("%f", &consumption);
	printf("每加仑行驶的英里数为%.1f\n", distance / consumption);
	printf("换算为%.1f升/100公里\n", (consumption * PER_GAL * 100) / (distance * PER_MILE) );
	return 0;
}

 第五章

/*Q1--将分钟表示的时间转换为分钟和时钟表示的时间*/
#include <stdio.h>
#define PER_HOUR 60
int main(void)
{
	int time = 0;
	printf("请输入时间/min\n");
	scanf("%d", &time);
	while (time > 0)
	{
		printf("你输入的时间是%dh%dmin\n", time / PER_HOUR, time % PER_HOUR);
		printf("请输入时间,或输入非0数结束程序\n");
		scanf("%d", &time);
	}
	return 0;
}

 

/*Q2--打印比输入整数至比其大10整数间的所有数字*/
#include <stdio.h>
int main(void)
{
	int num = 0;
	int end = 0;

	printf("请输入一个整数\n");
	scanf("%d", &num);
	end = num+10;
	while (num <= end)
	{
		printf("%d	", num);
		num++;
	}
	return 0;
}

 

/*Q3--将=天数转换为周数和天数*/
#include <stdio.h>
#define PER_WEEK 7
int main(void)
{
	int day = 0;
	printf("请输入天数/day\n");
	scanf("%d", &day);
	while (day > 0)
	{
		printf("%d days are %d weeks,%d days\n", day,day / PER_WEEK, day % PER_WEEK);
		printf("请输入天数,或输入非0数结束程序\n");
		scanf("%d", &day);
	}
	return 0;
}

 

/*Q4--将厘米转换为英尺和英尺*/
#include <stdio.h>
#define PER_INCH 2.54
#define PER_FOOT 30.48
int main(void)
{
	int feet = 0;
	float height = 0;
	float inches = 0;

	printf("Enter a height in centimeters;");
	scanf("%f",&height);
	while (height > 0)
	{
		feet = height / PER_FOOT;
		inches = (height - feet * PER_FOOT) / PER_INCH;
		printf(" %.1f cm = %d feet, %.1f inches\n", height, feet,inches );
		printf("Enter a height in centimeters (<=0 to quit):");
		scanf("%f", &height);
	}
	printf("bye\n");
	return 0;
}

 

/*Q5--修改程序addemup.c*/
#include <stdio.h>
int main(void)
{
	int day = 0;
	int sum = 0;
	int count = 0;

	printf("请输入赚钱的天数:\n");
	scanf("%d", &day);
	while (count++ < day)
	{
		sum += count;
	}
	printf("在该天数中共赚了%d元", sum);
	return 0;
}

 

/*Q6--修改程序addemup.c2*/
#include <stdio.h>
int main(void)
{
	int day=0;
	int count=0;
	int sum = 0;

	printf("请输入赚钱的天数\n");
	scanf("%d", &day);
	while (count++ < day)
	{
		sum += count * count;
	}
	printf("总共赚了%d元\n", sum);
	return 0;
}

 

/*Q7--设计函数求立方*/
#include <stdio.h>
void Cube(double x)
{
	double cube = x * x * x;
	printf("%lf", cube);
}
int main(void)
{
	double a = 0;
	printf("请输入一个数\n");
	scanf("%lf", &a);
	Cube(a);
	return 0;
}

 

 

/*Q8--求模运算*/
#include <stdio.h>
int main(void)
{
	int fir_ope = 0;
	int sec_ope = 0;

	printf("This program computes moduil.\n");
	printf("Enter an integer to serve as the second operand:\n");
	scanf("%d", &sec_ope);
	printf("Now enter the first operand:\n");
	scanf("%d", &fir_ope);
	while (fir_ope>0)
	{
		printf("%d %% %d is %d\n", fir_ope, sec_ope, fir_ope % sec_ope); 
		printf("Enter next number for first operand (<=0 to quit ):\n");
		scanf("%d", &fir_ope);
	}
	return 0;
}

/*Q9--温标换算*/
#include <stdio.h>
void Temperatures(double x)
{
	const double s1 = 5.0;
	const double s2 = 9.0;
	const double s3 = 32.0;
	const double k = 273.16;
	double st = 0;
	double kt = 0;
	st = s1 * (x - s3) / s2;
	kt = st + k;
	printf("华氏温度为%.2lf\n",x);
	printf("摄氏温度为%.2lf\n", st);
	printf("开氏温度为%.2lf\n", kt);
}
int main(void)
{
	double tem = 0;
	
	printf("请输入一个华氏温度(输入q退出)\n");
	while(1== scanf("%lf", &tem))
	Temperatures(tem);
	return 0;
}

第六章

 

/*Q1--创建含有26个小写字母的数组并打印*/
#include <stdio.h>
//int main(void)
//{
//	char arr[26];
//	int i = 0;
//	char target=0;
//
//	for (i=0,target='a'; i < 26; i++, target++)
//	{
//		arr[i] = target;
//		printf("%c ", arr[i]);
//	}
//	return 0;
//}
int main(void)
{
	char arr[26];
	int i = 0;

	for (i=0; i < 26; i++)
	{
		arr[i] = 'a'+i;
		printf("%c ", arr[i]);
	}
	return 0;
}

 

/*Q2--嵌套循环打印字符*/
#include <stdio.h>
int main(void)
{
	int line = 0;
	int row = 0;

	for (row = 0; row < 5; row++)
	{
		for (line = 0; line < row+1; line++)
		{
			printf("$");
		}
		printf("\n");
	}
	return 0;
}

/*Q3--嵌套循环打印字母*/
//#include <stdio.h>
//int main(void)
//{
//	int row = 0;
//	int line = 0;
//	char target =0;
//
//	for (row = 0; row < 6; row++)
//	{
//		for (line = 0, target = 'F'; line < row + 1; line++, target--)
//		{
//			printf("%c", target);
//		}
//		printf("\n");
//	}
//
//	return 0;
//}
#include <stdio.h>
#define N 6

int main(void)
{
    int i, j;

    for (i = 1; i <= N; i++)
    {
        for (j = 0; j < i; j++)
        {
            printf("%c", 'F' - j);
        }
        printf("\n");
    }

    return 0;
}

 

 

/*Q4--嵌套循环打印字母2*/
#include <stdio.h>
int main(void)
{
	int row = 0;
	int line = 0;
	char target='A';

	for (row = 0; row < 6; row++)
	{
		for (line = 0; line < row + 1; line++,target++)
		{
			printf("%c", target);
		}
		printf("\n");
	}
	return 0;
}

/*Q5--嵌套循环以金字塔形打印字母*/
#include <stdio.h>
int main(void)
{
	int row = 0;
	int line = 0;
	int space = 0;
	char target;
	char a = 'A';

	printf("请输入一个大写字母:");
	scanf("%c", &target);
	for (row = 0; row < target - 'A' + 1; row++)
	{
		for (space = target - 'A'-row; space >0 ; space--)
		{
			printf(" ");
		}
		for (line = 0,a='A'; line < row + 1; line++,a++)
			{
				printf("%c", a);
			}
		for (line = 0,a= 'A'-1+row; line < row; line++, a--)
			{
				printf("%c", a);
			}
		printf("\n");
	}
	
	return 0;
}

 

/*Q6--打印与平方立方有关的表格*/
#include <stdio.h>
int main(void)
{
	int max = 0;
	int min = 0;
	int time = 0;

	printf("请输入表格的下限:");
	scanf("%d", &min);
	printf("请输入表格的上限:");
	scanf("%d", &max);
	if (min > max)
	{
		printf("输入错误 \n");
	}
	else
	{
		printf("原数           平方           立方\n");
		for (time = min; time <= max; time++)
			printf("%-d		%-d		%-d\n", time, time * time, time * time * time);
	}
	return 0;
}

 

/*Q7--倒序打印单词*/
#include <stdio.h>
#include <string.h>
int main(void)
{
	int i = 0;
	char arr[20] = { 0 };

	printf("请输入一个单词\n");
	scanf("%s", arr);
	for (i = strlen(arr); i>0; i--)
	{
		printf("%c", arr[i-1]);
	}

	return 0;
}

 

/*Q8--两数之差除以两数乘积*/
#include <stdio.h>
int main(void)
{
	float a = 0;
	float b = 0;
	int ch=1;
	int i, j;

	printf("本程序用于计算两数之差除以两数乘积的结果\n");
	printf("请输入两个浮点数");
	scanf("%f", &a);
	scanf("%f", &b);
	while(ch)
	{
		printf("其结果为%f\n", (a - b) / (a * b));
		printf("请继续输入浮点数(输入q退出)\n");
		i=scanf("%f", &a);
		j=scanf("%f", &b);
		ch = i || j;
	}	
	return 0;
}

//标答
//int main(void)
//{
//	float x, y;
//	printf("Please enter the two float data(separated by blank):");
//	while (scanf("%f %f", &x, &y) == 2)
//	{
//		printf("The answer is %f\n", (x - y) / (x * y));
//		printf("Please enter the two float data(separated by blank):");
//	}
//	printf("Program end!");
//	return 0;
//}

 

/*Q9--Q8基础上用函数返回结果*/
#include <stdio.h>
double Answer(double x, double y)
{
	return (x - y) / (x * y);
}
int main(void)
{
	float x, y;
	printf("Please enter the two float data(separated by blank):");
	while (scanf("%f %f", &x, &y) == 2)
	{
		printf("The answer is %f\n", Answer(x,y));
		printf("Please enter the two float data(separated by blank):");
	}
	printf("Program end!");
	return 0;
}

 

/*Q10--打印下限整数与上限整数间所有整数的平方之和*/
#include <stdio.h>
int main(void)
{
	int max = 0;
	int min = 0;
	int sum=0;
	int i = 0;


	printf("Enter lower and upper interger limits :\n");
	scanf("%d %d", &min,&max);
	while (min < max)
	{
		for (i = min,sum=0; i <= max; i++)
		{
			sum += i * i;
		}
		printf("The sums of the squares from %d to %d is %d\n", min * min, max * max, sum);
		printf("Enter next set of limits:\n");
		scanf("%d %d", &min, &max);
	}
	return 0;
}

 

/*Q11--倒序打印8个数字*/
#include <stdio.h>
int main(void)
{
	int arr[8] = { 0 };
	int i = 0;

	printf("请输入8个整数\n");
	for (i = 0; i < 8; i++)
		scanf("%d", &arr[i]);
	for (i = 7; i >= 0; i--)
		printf("%d\n", arr[i]);
	return 0;
}

 

//#include <stdio.h>
//int main(void)
//{
//	int i = 0;
//	double sum_1 = 0;
//	double sum_2 = 0;
//	int time = 0;
//
//
//	printf("请输入运行的项数\n");
//	scanf("%d", &time);
//	for (i = 1; i <=time; i++)
//	{
//		sum_1 += 1.0 / i;
//	}
//	if (time % 2 == 0)
//	{
//		for (i = 1; i <time; i=i+2)
//			sum_2 += 1.0 / i - 1.0 / (i + 1.0);
//	}
//	else
//	{
//		for (i = 1; i < (time - 1); i = i + 2)
//		{
//			sum_2 += 1.0 / i - 1.0 / (i + 1.0);
//		}
//		sum_2 += 1.0 /time;
//	}
//		printf("1.0+1.0/2.0+1.0/3.0+1.0/4.0+...=%lf\n", sum_1);
//		printf("1.0-1.0/2.0+1.0/3.0-1.0/4.0+...=%lf\n", sum_2);
//		printf("两个数列的和为%lf\n", sum_1 + sum_2);
//	return 0;
//}
// 
// 
//#include <stdio.h>
//int main(void)
//{
//	int i = 0;
//	double sum= 0;
//	int time = 0;
//
//
//	printf("请输入运行的项数\n");
//	scanf("%d", &time);
//	while (time > 0)
//	{
//		sum = 0;
//		for (i = 1; i <= time; i++)
//		{
//			sum += 1.0 / i;
//		}
//		printf("1.0+1.0/2.0+1.0/3.0+1.0/4.0+...1.0/%d=%lf\n",time, sum);
//		sum = 0;//将sum重置为0
//		for (i = 1; i < time; i++)
//		{
//			if (i % 2 == 0)
//				sum = sum - 1.0 / i;//偶数
//			else
//				sum = sum + 1.0 / i;//奇数
//		}
//		printf("1.0-1.0/2.0+1.0/3.0-1.0/4.0+...+1.0/%d=%lf\n",time, sum);
//		sum = 0.0;//将sum重置为0
//		for (i = 1; i <= time; i++)
//		{
//			if (i % 2 != 0)
//				sum += 2 * 1.0 / i;//两数列之和只需计算奇数项
//		}
//		printf("两个数列的和为%lf\n", sum);
//		scanf("%d", &time);
//	}
//	return 0;
//}

#include <stdio.h>

int main(void)
{
	int cout;
	while (scanf("%d", &cout) == 1)
	{
		double sum1 = 0;
		double sum2 = 0;
		int sign = 1;
		for (int i = 1; i <= cout; i++)
		{
			sum1 = sum1 + 1.0 / i;
			sum2 = sum2 + sign * 1.0 / i;
			sign = -sign;
		}
		printf("sum1= %lf, sum2=%lf \n", sum1, sum2);
	}
	return 0;
}

 

/*Q13--将数组元素赋值为2的前8次幂*/
#include <stdio.h>
int main(void)
{
	int arr[8] = { 1,1,1,1,1,1,1,1 };
	int i = 0;
	int j = 0;

	for (i = 0; i < 8; i++)
	{
		for (j = 1; j < i + 1; j++)
		{
			arr[i] *= 2;
		}
	}
	i = 0;
	do
	{
	printf("arr[%d]=%d\n", i, arr[i]);
	} while (++i< 8);
	return 0;
}

 

 

/*Q14--第二个数组元素为第一个数组对应元素累积之和*/
#include <stdio.h>
int main(void)
{
	double arr1[8] = { 0 };
	double arr2[8] = { 0 };
	int i = 0;

	printf("请输入第一个数组的8个元素\n");
	for (i = 0; i < 8; i++)
	{
		scanf("%lf", &arr1[i]);
	}
	arr2[0] = arr1[0];
	for (i = 1; i < 8; i++)
	{
		arr2[i] = arr2[i - 1] + arr1[i];
	}
	for (i = 0; i<8; i++)
		printf("%10lf   ", arr1[i]);
	printf("\n");
	for (i = 0; i < 8; i++)
		printf("%10lf   ", arr2[i]);
	return 0;
}

 

/*Q15--倒序打印字符*/
#include <stdio.h>
int main(void)
{
	char arr[255] = { 0 };
	int i=0;
    do
    {
        scanf("%c", &arr[i]);
    } while (arr[i] != '\n' && ++i && i < 255);
    for (i--; i >= 0; i--)
    {
        printf("%c", arr[i]);
    }
   
	return 0;
}

 

/*Q16--计算复利超过单利的时间*/
#include <stdio.h>
#define Dan_li 0.1
#define Fu_li 0.05
int main(void)
{
	int i = 0;
	double mon_Dap =100;
	double mon_Dei =100;

	for (i = 0; mon_Dei <= mon_Dap; i++)
	{
		mon_Dap += 100 * Dan_li;
		mon_Dei += mon_Dei * Fu_li;
	}
	printf("需要%d年,Deirdre的投资额超过Daphne\n", i);
	printf("此时,Deirdre:%lf   Daphne:%lf", mon_Dei, mon_Dap);
	
	return 0;
}

 

/*Q17--计算取光银行内奖金的时间*/
#include <stdio.h>
#define annual_interest_rate 0.08
int main(void)
{
	double rest = 100;
	int i = 0;

 do
    {
    i++;
    rest += rest * annual_interest_rate;
    rest -= 10;
    } while (rest > 9);
   // 若余额低于9则不够下一年支取;
	printf("%d年后取光钱\n",++i);//注意此处i要+1
	return 0;
}

 

/*Q18--朋友增长直至超过邓巴数*/
#include <stdio.h>
#define Dunbar_s_number 150
int main(void)
{
	int num = 5;
	int week = 1;

	for (week = 1; num <= 150; week++)
	{
		num = (num - week) * 2;
		if (num <= 150)
			printf("第%d周有%d个朋友\n", week, num);
	}
	printf("第%d周已经超过了邓巴数\n",week-1);
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值