- 书本练习题+课后习题
- include
- 练习2-4 求华氏摄氏度150度对应的摄氏温度
- 练习2-5 算数表达式 5(fahr-32)/9 能改写成 5(fahr-32)/9 吗? 为什么?如果将其改写成 5/9(fahr - 32), 会影响运算结果吗?
- 练习2-6 一物体从100m出落下,求它3s后的移动距离 (g=10 m/s^2)
- 练习2-7
- 练习2-8
- 练习2-9 输入三个整数,求平均值。
- 练习2-10 分段函数
- 练习2-11 分段函数
- 练习2-12 华氏摄氏度-转换表 每次 +2°
- 练习2-13 求和 1+ 1/2 + … = 1/n
- 练习2-14 求和 1+ 1/3 + 1/5 +
- 练习2-15 求 1 - 1/4+1/7-1/10+1/13 ….
- 练习2-16 输入两个正整数 m,n,计算 m! + n!
- 练习2-17
- 练习2-18 输入一个正整数n,生成一张3的乘方表。
- 练习2-19 输入一个正整数n,生成一张阶乘表。
- 练习2-20 计算 n! / m!(n - m)!
- 习题2-1 输入两个正整数 num1 num2 ,计算它们的和、差、积、商、余
- 习题2-2 计算电费,分段函数。 f(x) = { 0.53x (0
50) } - 习题2-3 输入实数 x和 正整数 n,计算 x^n , 不允许调用 pow() 函数
- 习题2-4 输入两个正整数 m,n 计算 区间 [m,n] 的 x^2 + 1/x^2.
- 习题2-5 输入一个正整数 n,计算 1-2/3+3/5-4/7 … 的前n项之和.
- 习题2-6 商业贷款,计算公式 money = load ( rate (rate +1) ^month / ( (1 + rate)^month - 1 )
- 习题2-7 输入一个正整数, 求 2^1+2^2+…+2^n.
- 习题2-8 求 1!+2!+…+n! = ?
- 第3章
- 第4章
- include
- include
- include
- include
- include
- include
- include
- include
- include
- include
- include
- include
- include
- include
- include
- include
- include
书本练习题+课后习题
目录
- 第1章 - 练习1-1 略
- 练习1-2 求 1~100 能被6整除的所有整数的和
- 练习1-3. 略
- 练习1-4. 判断质数
- 练习2-2 下面程序的运行结果? 与例2-2 的不同? 为什么?printf( “Programming is fun. And programming in C is even more fun!\n “ )
- 练习2-3 在屏幕上显示下列图案
- 练习2-4 求华氏摄氏度150度对应的摄氏温度
- 练习2-5 算数表达式 5(fahr-32)/9 能改写成 5(fahr-32)/9 吗? 为什么?如果将其改写成 5/9(fahr - 32), 会影响运算结果吗?
- 练习2-6 一物体从100m出落下,求它3s后的移动距离 (g=10 m/s^2)
- 练习2-7
- 练习2-8
- 练习2-9 输入三个整数,求平均值。
- 练习2-10 分段函数
- 练习2-11 分段函数
- 练习2-12 华氏摄氏度-转换表 每次 +2°
- 练习2-13 求和 1+ 1/2 + … = 1/n
- 练习2-14 求和 1+ 1/3 + 1/5 +
- 练习2-15 求 1 - 1/4+1/7-1/10+1/13 ….
- 练习2-16 输入两个正整数 m,n,计算 m! + n!
- 练习2-17
- 练习2-18 输入一个正整数n,生成一张3的乘方表。
- 练习2-19 输入一个正整数n,生成一张阶乘表。
- 练习2-20 计算 n! / m!(n - m)!
- 习题2-1 输入两个正整数 num1 num2 ,计算它们的和、差、积、商、余
- 习题2-2 计算电费,分段函数。 f(x) = { 0.53x (050) }
- 习题2-3 输入实数 x和 正整数 n,计算 x^n , 不允许调用 pow() 函数
- 习题2-4 输入两个正整数 m,n 计算 区间 [m,n] 的 x^2 + 1/x^2.
- 习题2-5 输入一个正整数 n,计算 1-2/3+3/5-4/7 … 的前n项之和.
- 习题2-6 商业贷款,计算公式 money = load ( rate (rate +1) ^month / ( (1 + rate)^month - 1 )
- 习题2-7 输入一个正整数, 求 2^1+2^2+…+2^n.
- 练习3-5 判断闰年
- 例题3-8 商品选择
- 例题3-9 简单四则运算
- 习题 选择题
- 习题 填空题
- 程序设计题 1. 已知三角形三边,求三角形面积和周长.
- 程序设计题 2. 计算个人所得税
- 程序设计题 3. 出租车收费
- 程序设计题 4. 计算学生成绩
- 例4-2 学生成绩判断,输入一批学生成绩,统计及格和不及格的人数,60分及格
- 例4-3 输入一个整数判断它的位数
- 例4-4 判断素数. 定义是 除1和自身不能被其他整数整除
- 例4-5 逆序输出正整数
- 例4-10 求100内所有的素数,没行输出10个
- 例4-11 输出斐波那契数列的前 10 项 1 1 2 3 5 8 13 21 34 55
- 例4-12 穷举算法
- 习题选择题
- 习题填空题
- 习题程序设计题 - 习题 3.1 输入一批整数,以负数/0为结束标志,求其中的偶数和。
- 习题 3.2 计算
- 习题 3.3 输入一个整数,求各位数字之和以及位数
- 习题3.4 输入一个正整数 n ,求 2/1+3/2+5/3+8/5+ … 的前n项之和(保留两位小数)
- 习题3.5 输入两个正整数a和n,求 a + aa + aaaa + aa…a 的前n项之和
- 习题3.6 1元硬币换1分、3分、5分。要求这三种银币各至少1枚,列举所有的可能。
- 习题3.7 求1~10000 之间所有,各未数立方根之和 = 自身的数 (例如 1^3 +5^3 +3^3 = 153)
- 习题3.8 验证哥德巴赫猜想输出6~100,所有偶数 = 质数 + 质数
- 习题3.9
- 习题3.10
- 习题3.11
- 习题3.12
- 习题3.13
- 习题3.14
第1章
练习1-1 略
练习1-2 求 1~100 能被6整除的所有整数的和
#include <stdio.h>int main(void) {int sum , i, n;n = 100;for ( i = 0; i < n; i++){if ( i % 6 == 0) {sum += i;}}printf("结果为:%d",sum);return 0;}
练习1-3. 略
练习1-4. 判断质数
```#include <stdio.h>#include <stdlib.h>int main(){int n, f, i;f = 0;scanf("%d", &n);for (i = 2; i <= n - 1; i++){if (n % i == 0){f = 1;break;}}if (f == 0)printf("质数\n");elseprintf("非质数\n");system("pause");return 0;}
##### 练习1-5. 求阶乘
#include <stdio.h>int main(void){int n;scanf("%d", &n);int factorial(int n);printf("%d\n", factorial(n));return 0;}int factorial(int n){int i, fact = 1;for (i = 1; i <= n; i++){fact *= i;}return fact;}
#### 第2章---##### 练习2-1 屏幕显示 "Programmimg in C is fun!".
include
int main(void) { printf(“Programmimg in C is fun!”); return 0; }
##### 练习2-2 下面程序的运行结果? 与例2-2 的不同? 为什么?**`printf( "Programming is fun. And programming in C is even more fun!\n " )`**一行显示,因为只有一个换行符 \n##### 练习2-3 在屏幕上显示下列图案
*
```#include <stdio.h>int main(void) {printf("\n\****\n\***\n\**\n\*\n");return 0;}
练习2-4 求华氏摄氏度150度对应的摄氏温度
include <stdio.h>int main(void) {int fahr;double celsius;fahr = 150;celsius = 5.0 * (fahr - 32) / 9;printf("对应的温度是: %.6lf", celsius);return 0;}
练习2-5 算数表达式 5(fahr-32)/9 能改写成 5(fahr-32)/9 吗? 为什么?如果将其改写成 5/9(fahr - 32), 会影响运算结果吗?
5(fahr-32)/9 不是合法的算术表达式, 不可以被省略的。
5/9(fahr - 32), 为防止 C 语言中 两个整数 相除 其结果必定是整数, 这样写可能会导致 0.002 这样的数,显示为 0.0000
练习2-6 一物体从100m出落下,求它3s后的移动距离 (g=10 m/s^2)
#include <stdio.h>#include <math.h>int main(void) {double height;int t = 3;height = 0.5 * 10 * pow(3.0 , 2.0);printf("3s 后的物体的距离是:%.2lf ", height);return 0;}// 运算结果 45m
练习2-7
提示语句在前,输入语句在后。
不能,占位符必须和后面参数的对应的书籍类型相匹配。
可以,(1000,0.025,3);
练习2-8
重复了,略过
练习2-9 输入三个整数,求平均值。
#include <stdio.h>int main(void){int a, b, c;double avg;printf("请输入三个整数:\n");scanf("%d %d %d", &a, &b, &c);avg = (a + b + c) * 1 /3.0;printf("avg = %.3lf", avg);return 0;}
练习2-10 分段函数
#include <stdio.h>int main(void){double x, y;printf("Enter x:");scanf("%lf", &x);if (x == 0)y = 0;elsey = 1.0 / x;printf("y = %.3lf", y);return 0;}
练习2-11 分段函数
#include <stdio.h>
#include <math.h>
int main(void)
{
double x, y;
printf("Enter x:");
scanf("%lf", &x);
if (x >= 0)
y = sqrt(x);
else
y = pow( x, 2) + 2 * x + 1.0 / x;
printf("y = %.3lf", y);
return 0;
}
练习2-12 华氏摄氏度-转换表 每次 +2°
重复, 略过
练习2-13 求和 1+ 1/2 + … = 1/n
#include <stdio.h>
int main(void)
{
int i, n;
float y;
printf("Enter n:");
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
y += (1.0 / i);
}
printf("y=%.6f", y);
return 0;
}
练习2-14 求和 1+ 1/3 + 1/5 +
#include <stdio.h>
int main(void)
{
int i, n;
float y;
printf("Enter n:");
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
y += 1.0 / (2 * i -1);
}
printf("y=%.6f", y);
return 0;
}
练习2-15 求 1 - 1/4+1/7-1/10+1/13 ….
#include <stdio.h>
int main(void)
{
int i, n;
float y;
printf("Enter n:");
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
if ( i % 2 != 0){
y += 1.0 / (3 * i - 2);
}else{
y -= 1.0 / (3 * i - 2);
}
}
printf("y=%.6f", y);
return 0;
}
练习2-16 输入两个正整数 m,n,计算 m! + n!
#include <stdio.h>
int main(void)
{
int m, n;
double y;
int factorial(int x);
printf("Enter m, n: \n");
scanf("%d %d", &m, &n);
y = factorial(m) + factorial(n);
printf("y = %d! + %d! = %.0f\n", m, n, y);
return 0;
}
int factorial(int x)
{
int i, fact = 1;
for (i = 1; i <= x; i++)
{
fact *= i;
}
return fact;
}
练习2-17
10
练习2-18 输入一个正整数n,生成一张3的乘方表。
// 乘方表
#include <stdio.h>
#include <math.h>
int main(void)
{
int n, y;
printf("Enter n :", &n);
scanf("%d", &n);
for (int i = 0; i <= n; i++)
{
y = pow(3, i);
printf("y = pow(3, %d) = %d \n", i, y);
}
return 0;
}
练习2-19 输入一个正整数n,生成一张阶乘表。
// 阶乘表
#include <stdio.h>
int main(void)
{
int n, y;
int factorial(int x); // 阶乘函数声明
printf("Enter n :\n");
scanf("%d", &n);
for (int i = 0; i <= n; i++)
{
y = factorial(i);
printf(" %d! = %d \n", i, y);
}
return 0;
}
int factorial(int x)
{
int i, fact = 1;
for (i = 1; i <= x; i++)
{
fact *= i;
}
return fact;
}
练习2-20 计算 n! / m!(n - m)!
#include <stdio.h>
int main(void)
{
int m, n;
double y;
int factorial(int x);
printf("Enter m , n :\n");
scanf("%d%d", &m, &n);
y = factorial(n) / (factorial(m) * factorial(n - m));
printf("y = %d! / %d!(%d - %d)! = %.3lf", n, m, n, m, y);
return 0;
}
int factorial(int x)
{
int i, fact = 1;
for (i = 1; i <= x; i++)
{
fact *= i;
}
return fact;
}
习题2-1 输入两个正整数 num1 num2 ,计算它们的和、差、积、商、余
#include <stdio.h>
int main(void) {
int num1, num2;
printf("Enter num1, num2:\n");
scanf("%d%d",&num1,&num2);
printf(" num1 + num2 = %d + %d = %d \n", num1, num2, (num1 + num2));
printf(" num1 - num2 = %d - %d = %d \n", num1, num2, (num1 - num2));
printf(" num2 - num1 = %d - %d = %d \n", num2, num1, (num2 - num1));
printf(" num1 * num2 = %d * %d = %d \n", num1, num2, (num1 * num2));
printf(" num2 / num1 = %d - %d = %f \n", num2, num1, (num2 * 1.0/ num1));
printf(" num1 / num2 = %d - %d = %f \n", num1, num2, (num1 * 1.0/ num2));
printf(" num1 Mod mum2 = %d \n", ((num1 ) % num2));
printf(" num2 Mod mum1 = %d \n", ((num2 ) % num1));
return 0;
}
习题2-2 计算电费,分段函数。 f(x) = { 0.53x (050) }
#include <stdio.h>
int main(void) {
double x, y;
printf("Enter used electricity : \n");
scanf("%lf" , &x);
if(x <= 50)
y = 0.53 * x;
else
y = (x - 50) * 0.05 + 0.53 * 50;
printf("Money = %.6lf", y);
return 0;
}
习题2-3 输入实数 x和 正整数 n,计算 x^n , 不允许调用 pow() 函数
#include <stdio.h>
int main(void)
{
int n;
float x;
float fun_1(float x, int n);
// printf("Enter float number , int number : \n");
// scanf("%f%d",&x, &n);
// x = 1.1;
// n = 2;
printf("res = %f \n", fun_1(1.1, 2));
return 0;
}
float fun_1(float x, int n)
{
float res = 1.0;
for (int i = 1; i <= n; i++)
{
res = res * x;
printf("%f \n" ,res);
}
return res;
}
习题2-4 输入两个正整数 m,n 计算 区间 [m,n] 的 x^2 + 1/x^2.
#include <stdio.h>
int main(void)
{
int i, m, n;
double sum;
printf("Enter m,n : \n");
scanf("%d%d", &m, &n);
for (i = m; i <= n; i++)
{
sum += i * i + 1 / (i * i);
}
printf("sum = %lf ", sum);
return 0;
}
习题2-5 输入一个正整数 n,计算 1-2/3+3/5-4/7 … 的前n项之和.
#include <stdio.h>
int main(void)
{
int n;
double sum;
printf("输入一个正整数 n: ");
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
if (i & 1 == 1) /* 为1 则是奇数,为0则是偶数 */
{
sum += i * 1.0 / (2 * i - 1);
}
else
{
sum -= i * 1.0 / (2 * i - 1);
}
}
printf("sum = %.6lf", sum);
return 0;
}
习题2-6 商业贷款,计算公式 money = load ( rate (rate +1) ^month / ( (1 + rate)^month - 1 )
// 习题2-6 商业贷款,计算公式
// money = loan * ( rate * (rate +1) ^month / ( (1 + rate)^month - 1 )
/* year [5,30] => month [60,360] */
#include <stdio.h>
#include <math.h>
int main(void)
{
double loan, rate, money, cal;
int year;
printf("请输入本金:");
scanf("%lf", &loan);
printf("请输入利率:");
scanf("%lf", &rate);
for (year = 5; year <= 30; year++)
{
cal = pow(1 + rate, year * 12);
money = loan * rate * cal / (cal - 1);
printf("year = %d , money = %f \n", year, money);
}
return 0;
}
习题2-7 输入一个正整数, 求 2^1+2^2+…+2^n.
#include <stdio.h>
#include <math.h>
int main(void)
{
int n, sum;
n = 10;
for (int i = 1; i <= n; i++)
{
sum += pow(2, i);
}
printf("sum = %d", sum);
return 0;
}
习题2-8 求 1!+2!+…+n! = ?
#include <stdio.h>
int main(void)
{
int n;
double sum;
double fact(int n);
n = 10;
for (int i = 1; i <= n; i++)
{
sum += fact(i);
}
printf("sum = %lf", sum);
return 0;
}
/* 求阶乘 */
double fact(int n)
{
double fact = 1;
for (int i = 1; i <= n; i++)
{
fact *= i;
}
return fact;
}
第3章
练习3-4 连续输入15个字符 统计其中的 英文字母、数字、空格、回车、其他字符的数量
#include <stdio.h>
int main(void)
{
int letter, digit, space, enter, other;
int i;
char ch;
letter = digit = space = enter = other = 0;
for (i = 0; i < 5; i++){
ch = getchar();
if (ch >= '0' && ch <= '9'){
digit ++;
}else if ((ch >= 'a' && ch <= 'z') || (ch > 'A' && ch <= 'Z')) {
letter ++;
}else if (ch == ' ') {
space ++;
}else if (ch == '\n') {
enter ++;
}else {
other ++;
}
}
printf("digit = %d, letter = %d,space = %d, enter = %d, other = %d \n", digit, letter, space, enter, other);
return 0;
}
练习3-5 判断闰年
#include <stdio.h>
int main(void) {
int year = 2000;
if((year % 4 == 0 && year % 100 != 0 ) || ( year % 400 == 0 )){
printf("是闰年");
}else{
printf("不是闰年");
}
return 0;
}
例题3-8 商品选择
#include <stdio.h>
int main(void)
{
int choise, i;
double price;
for (i = 0; i < 5; i++)
{
printf("[1]Select crisps \n");
printf("[2]Select popcorn \n");
printf("[3]Select chocolate \n");
printf("[4]Select cola \n");
printf("[0]exit \n");
printf("Enter your chise :");
scanf("%d", &choise);
if (choise == 0) {
break;
}
switch (choise)
{
case 1:
price = 2.5;
break;
case 2:
price = 3.0;
break;
case 3:
price = 2.4;
break;
case 4:
price = 5.0;
default:
break;
}
printf("price = %.1lf \n", price);
}
printf("thanks! \n");
return 0;
}
例题3-9 简单四则运算
#include <stdio.h>
int main(void) {
double num1, num2;
char op;
printf("Enter a express :");
scanf("%lf %c %lf", &num1, &op, &num2);
switch (op){
case '+':
printf("num1 + num2 = %lf \n", num1 + num2);
break;
case '-':
printf("num1 - num2 = %lf \n", num1 - num2);
break;
case '*':
printf("num1 * num2 = %lf \n", num1 * num2);
break;
case '/':
printf("num1 / num2 = %lf \n", num1 / num2);
break;
default:
break;
}
return 0;
}
习题 选择题
1.D 、2.C 、3.D 、 4.C 、 5.C 、 6.A 、 7.C
习题 填空题
略过
程序设计题 1. 已知三角形三边,求三角形面积和周长.
#include <stdio.h>
#include <math.h>
int main(void) {
double a, b, c, s, lengh, area;
printf("Enter a, b, c :\n");
scanf("%lf%lf%lf", &a, &b, &c);
if (a + b > c && a + c > b && b + c > a) {
s = (a + b + c) * 0.5;
lengh = 2 * s;
area = sqrt(s*(s-a)*(s-b)*(s-c));
printf("length = %.2lf \n", lengh);
printf("area = %.2lf \n", area);
}else {
printf("无法构成三角形 \n");
}
return 0;
}
程序设计题 2. 计算个人所得税
#include <stdio.h>
int main(void) {
double tax, rate, salary, deduction;
printf("请输入月薪: \n");
scanf("%lf", &salary);
if (salary > 0 && salary <= 3500) {
rate = 0;
deduction = 0;
}else if (salary >3500 && salary <= 5000) {
rate = 0.03;
deduction = 0;
}else if (salary >5000 && salary <= 8000) {
rate = 0.1;
deduction = 105;
}else if (salary >8000 && salary <= 12500) {
rate = 0.2;
deduction = 555;
}else if (salary >12500 && salary <= 38500) {
rate = 0.25;
deduction = 1005;
}else if (salary >38500 && salary <= 58500) {
rate = 0.3;
deduction = 2755;
}else if (salary >58500 && salary <= 83500) {
rate = 0.35;
deduction = 5505;
}else if (salary > 83500) {
rate = 0.45;
deduction = 13505;
}
tax = rate * (salary - 3500) - deduction;
printf("需要缴纳个人所得税: tax = %.2lf \n", tax);
return 0;
}
程序设计题 3. 出租车收费
略过
程序设计题 4. 计算学生成绩
#include <stdio.h>
int main(void) {
int n, A, B, C, D, E;
double grade, sum, avg;
A = B = C = D = E = 0;
printf("请输入学生人数: \n");
scanf("%d", &n);
printf("请再次输入他们的成绩: \n");
for (int i = 1; i <= n; i++){
scanf("%lf", &grade);
if (grade >= 90 && grade <= 100) {
A ++;
}else if (grade >= 80 && grade < 90) {
B ++;
}else if (grade >= 70 && grade < 80) {
C ++;
}else if (grade >= 60 && grade < 70) {
D ++;
}else {
E ++;
}
sum += grade;
}
avg = sum / n;
printf("avg = %.1lf \n", avg);
printf("A = %d \n", A);
printf("B = %d \n", B);
printf("C = %d \n", C);
printf("D = %d \n", D);
printf("E = %d \n", E);
return 0;
}
程序设计题 5. 输出21世纪的所有闰年
#include <stdio.h>
int main(void) {
for (int i = 2000; i < 2099; i++){
if( (i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)){
printf("year = %d \n", i);
}
}
return 0;
}
第4章
例4-1. 格雷戈里公式求π的近似值
#include <stdio.h>
#include <math.h>
int main(void)
{
int denominator, flag; //flag 做一个标志符,依次叠加,通过判断flag的奇偶,来确顶 item 的正负值关系
double molecule, item, pi;
denominator = 1;
flag = 1;
molecule = 1.0;
item = 1.0;
while (fabs(item) >= 0.0001)
{
if (flag & 1 == 1)
{ //此项是奇数
item = molecule / denominator * 1;
}
else
{
item = molecule / denominator * -1;
}
pi = (pi + item);
denominator += 2;
flag++;
}
pi = 4 * pi;
printf("计算到了第%d项,此时item = %lf \n", flag, item);
printf("pi = %f \n", pi);
return 0;
}
例4-2 学生成绩判断,输入一批学生成绩,统计及格和不及格的人数,60分及格
#include <stdio.h>
#include <math.h>
int main(void)
{
int passNum, failNum; //定义及格人数和不及格人数
double grade, sumGrade, avg; //定义单个成绩 总成绩 平均分
passNum = failNum = 0;
sumGrade = 0;
avg = 0;
printf("请输入学生的成绩:");
scanf("%lf" , &grade);
while ( grade > 0 )
{
sumGrade += grade;
if ( grade >= 60 ) {
passNum ++;
}else{
failNum ++;
}
scanf("%lf" , &grade); // 读入一个新数据
}
avg = sumGrade / (passNum + failNum);
printf("总人数:%d \n", passNum + failNum);
printf("平均分:%lf \n", avg);
printf("及格人数: %d , 不及格人数: %d \n", passNum, failNum);
return 0;
}
例4-3 输入一个整数判断它的位数
#include <stdio.h>
#include <math.h>
int main(void) {
int number, count;
int num;
printf("请输入一个整数:");
scanf("%d", &number);
num = fabs(number);
do{
count++;
num = num / 10;
// printf("num = mum /10 =%d \n",num);
// printf("count = %d \n",count);
}while (num != 0);
printf("count = %d", count);
return 0;
}
例4-4 判断素数. 定义是 除1和自身不能被其他整数整除
#include <stdio.h>
#include <math.h>
int main(void) {
int i, num;
printf("请输入一个正整数: ");
scanf("%d", &num);
for (i = 2; i < sqrt(num); i++)
{
if ( num % 2 == 0){
printf("No \n");
break;
}
}
if (i > sqrt(num) ) {
printf("Yes \n");
}
return 0;
}
例4-5 逆序输出正整数
#include <stdio.h>
int main(void) {
int number = 12345;
while (number != 0 )
{
printf("%d ",number % 10);
number = number / 10;
}
return 0;
}
例4-10 求100内所有的素数,没行输出10个
#include <stdio.h>
#include <math.h>
int main(void)
{
int limit = 100;
int m, n, i, count;
count = 0;
for (m = 2; m < limit; m++)
{
n = sqrt(m);
for (i = 2; i <= n; i++)
{
if (m % i == 0)
{
break;
}
}
if (i > n)
{
printf("%6d", m);
count++;
}
if (count % 10 == 0)
{
printf("\n");
}
}
return 0;
}
例4-11 输出斐波那契数列的前 10 项 1 1 2 3 5 8 13 21 34 55
#include <stdio.h>
#include <math.h>
int main(void)
{
int x1, x2;
int x;
x1 = x2 = 1;
printf("%6d%6d", x1, x2);
for (int i = 0; i < 8; i++)
{
x = x1 + x2;
printf("%6d ",x);
x1 = x2;
x2 = x;
}
return 0;
}
例4-12 穷举算法
问题描述: 男一人搬3块砖,女一人搬砖2块,小孩2人搬砖1块。请列举出 45人搬45砖的搜有情况。
#include <stdio.h>
#include <math.h>
int main(void) {
int x, y, z;
for ( x = 0; x <= 45; x++){
for ( y = 0; y <= 45; y++){
for ( z = 0; z <= 45; z++){
if ( x + y + z == 45 && 3 * x + 2 *y + 0.5 * z == 45) {
printf("x = %d , y = %d , z = %d \n",x, y, z);
}
}
}
}
return 0;
}
//--------------------------------//
#include <stdio.h>
#include <math.h>
int main(void) {
int x, y, z;
for ( x = 0; x <= 15; x++){
for ( y = 0; y <= 22; y++){
z = 45 - x - y;
if(3 * x + 2 *y + 0.5 * z == 45){
printf("x = %d , y = %d , z = %d \n",x, y, z);
}
}
}
return 0;
}
习题选择题
1.A 2.C 3.D 4.A 5.B 6.B 7.C 8.A
1.在循环体内使用break和continue的作用相同吗?
- 同,break 终止了循环/跳出了循环,循环不会在继续执行下去了。而continue只是结束了本次执行的循环,下一次的循环还是会继续执行的.
+break 关键字只能用在 循环语句 和 switch 语句中,而 continue就只能用在 循环语句中。
- while ( !x ) { } …. ! 非 去反的意思。表达式为真一直执行,表达式为假不执行。1 为 true 0 为 false ,在此种 换成while (2) 任何一个 非0的数 都将会无限的循环下去。 !1 = !2 =!3 =0 =false,!0 = 1 = true
习题填空题
习题程序设计题
习题 3.1 输入一批整数,以负数/0为结束标志,求其中的偶数和。
注意我下面 (num & 1) == 0 我用了括号,如果没用括号,因为优先级的问题先进行了 1== 0,然后 num & 0 一定是0,判断进不去…… 注意这个小细节。 ```include
int main(void) { int num , evenSum; printf(“输入一批整数,以负数/0为结束标志: \n”); scanf(“%d”, &num); while (num > 0) { if ( (num & 1) == 0) { evenSum += num; } scanf(“%d”, &num); } printf(“evenSUm = %d \n”, evenSum); return 0; }
###### 习题 3.2 计算
include
include
int main(void) { double s,x,item; // 输入的实数 double fact(int n); // 声明阶乘函数 s = 0; printf(“请输入一个实数:\n”); scanf(“%le”,&x); item = x; int i = 1; while ( fabs(item) >= 0.00001 ) { item = pow(x , i) / fact(i); s += item; i++; printf(“item = %.6f , s = %.6f \n”,item ,s); } printf(“s = %.6f \n”, s); return 0; }
// 定义一个球阶乘的函数 double fact(int n) { double fact = 1; for (int i = 1; i <= n; i++) { fact *= i; } return fact; }
###### 习题 3.3 输入一个整数,求各位数字之和以及位数
include
include
int main(void) { int number, num, remainder, sum, count; // number 为输入的整数,num 为整数的绝对值 printf(“Enter a number: \n”); scanf(“%d”, &number);
num = abs(number);
count = 1;
sum = 0;
while(num !=0 ){
remainder = num % 10;
num = num / 10;
count ++;
sum += remainder;
}
printf("位数为: %d , 各位数之和为: %d \n", count, sum);
return 0;
}
###### 习题3.4 输入一个正整数 n ,求 2/1+3/2+5/3+8/5+ ... 的前n项之和(保留两位小数)
include
int main (void) { int number, m, n, t; // m 为分子,n 为分母 double item, sum; // item 为每一项,sum为求和的值 printf(“输入一个正整数: \n”); scanf(“%d”, &number);
m = 2;
n = 1;
sum = 0;
for (int i = 1; i <= number; i++) {
item = m / n * 1.0;
sum += item;
n = m;
m = t + n;
n = t;
}
printf("sum = %.2f \n", sum);
return 0;
}
###### 习题3.5 输入两个正整数a和n,求 a + aa + aaaa + aa...a 的前n项之和
include
int main(void) { int a, n, item, sum; printf(“请输入两个正整数a和n: \n”); scanf(“%d%d”, &a, &n); sum = 0; item = a;
for (int i = 0; i < n; i++)
{
sum += item;
item = 10 * item + a;
}
printf("sum = %d \n", sum);
return 0;
}
###### 习题3.6 1元硬币换1分、3分、5分。要求这三种银币各至少1枚,列举所有的可能。
include
int main(void){
int x, y, z; // 5分 2分 1分
for (x = 1; x < 20; x++){
for (y = 1; y < 50; y++){
for (z = 1; z < 100; z++){
if (5 * x + 2 * y + z == 100){
printf("5分-%d枚,2分-%d枚,1分-%d枚 \n", x, y, z);
}
}
}
}
return 0;
}
###### 习题3.7 求1~10000 之间所有,各未数立方根之和 = 自身的数 (例如 1^3 +5^3 +3^3 = 153)
include
include
int main(void) {
int number, remainder, sum;// 位数 和 余数
for (int i = 1; i <= 10000; i++){
number = i;
sum = 0;
while (number != 0) {
remainder = number % 10;
number = number / 10;
sum = sum + pow(remainder, 3);
}
if (sum == i) {
printf("i = %d \n", i);
}
}
return 0;
}
###### 习题3.8 验证哥德巴赫猜想输出6~100,所有偶数 = 质数 + 质数
include
int fun1(int n); int main(void) { int i, m; int count = 0; for (m = 6; m <= 100; m = m+2) { for(i = 3; i <= m/2; i = i+2){ if(fun1(i) && fun1(m-i)){ printf(“%4d = %4d + %4d;”, m, i, m-i); count++; if(count % 5 == 0){ printf(“\n”); } } } } return 0; }
// 判断一个数是为质数,返回true表示是质数,返回false表示不是质数。 int fun1(int n) { int i,flag = 1; if(n == 1){ flag = 0; } for (i = 2; i <= n/2; i++){ if (n % i == 0) { flag = 0; break; } } return flag; }
###### 习题3.9
###### 习题3.10
###### 习题3.11
###### 习题3.12
###### 习题3.13
###### 习题3.14
#### 第5章
##### 例5-1 求圆柱体体积
include
int main (void) { double height, radius, volume; double cylinder(double r,double h); printf(“Enter radius and heifht : \n”); scanf(“%lf%lf”, &radius, &height); volume = cylinder(radius,height); printf(“volume = %.3f \n”, volume); return 0; }
double cylinder(double r,double h) { double v; v = 3.1415926 r r * h; return v; }
##### 例5-4 求100以内的所有质数
include
include
int main(void) { int count = 0; int prime(int n); for (int i = 2; i <= 100; i++) { if( prime(i)){ printf(“%d ,”, i); count++; if (count % 10 == 0) { printf(“\n”); } }
}
return 0;
}
int prime (int n)
{
int flag = 1;
if (n == 1){
flag = 0;
}
for (int i = 2; i <= sqrt(n) ; i++)
{
if (n % i == 0){
flag = 0;
break;
}
}
return flag;
}
##### 例5-9 静态变量求范围阶乘 1!~n!
include
double fact(int n);
int main(void) { int i,n; printf(“Input n: \n”); scanf(“%d”, &n);
for (i = 1; i <= n; i++){
printf("%3d!=%.0f\n", i , fact(i));
}
return 0;
}
double fact(int n) { static double f = 1; //将每次的计算结构存放在静态的变量中 f *= n; return(f); }
##### 习题选择题
DDBCCB
##### 习题填空题
其中一道选择题的思考 下列打印的值是多少?<br />#include <stdio.h><br />
void fun(int a, int b, int c){<br />
c = a * b;<br />
}<br />
int main(void){<br />
int c ;<br />
for(int i = 1; i <= 10; i++){<br />
fun(2, 3, c);<br />
printf("%d\n", c);<br />
} <br />
return 0;<br />
}
> fun(2, 3, c); 和上面自定义的函数都是迷惑条件,不用管。<br />
将这道题定义为 int c ,打印c d的值是多少?<br />
是 0 吗?,**其实不是的** 。完整的定义c为,`auto c int` 而 auto类型的变量不给赋值,它是随机的,所以打印出来是10个一样的随机整数,我自己电脑打印出来的是16;如果我们 static c; 那么它就会给赋上默认值为 0;
##### 习题程序设计题
---
#### 第6章
##### 略过... ....
---
#### 第7章
##### 练习7-1
> 编写程序,输入一个正整数n (1 < n <= 10),再输入n个整数,输出这几个数的平均值(保留两位小数)
include
int main(void) {
int n, sum = 0;
double avg = 0;
printf("请输入一个正整数n : \n");
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++){
printf("输入第%d个数 \n", i+1);
scanf("%d", &arr[i]);
}
for (int i = 0; i < n; i++){
sum += arr[i];
}
avg = 1.0 * sum / n;
printf("average = %.2lf \n", avg);
return 0;
}
##### 练习7-2.
> 编写程序,输入一个正整数n (1 < n <= 10),再输入n个整数,逆序输出输入的数
// 编写程序,输入一个正整数n (1 < n <= 10),再输入n个整数,逆序输出输入的数
include
int main(void) {
int n, sum = 0;
double avg = 0;
printf("请输入一个正整数n : \n");
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++){
printf("输入第%d个数 \n", i+1);
scanf("%d", &arr[i]);
}
printf("正序输出 : ");
for (int i = 0; i < n; i++){
printf("%d, ",arr[i]);
}
printf("\n");
printf("反序输出 : ");
for (int i = n -1; i >= 0; i--){
printf("%d, ",arr[i]);
}
return 0;
}
```
