第三章
/*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;
}