《C程序设计(第五版)》

《C程序设计(第五版)》

第一章

例1.1

输出 This is a C program.

1
2
3
4
5
6
#include<stdio.h>  //编译预处理指令,调入函数库中的函数,即标准输入输出函数scanf和printf
int main() //定义主函数main int为函数类型-整型
{ //函数开始
printf("This is a C program.\n"); //输出语句 \n是换行符
return 0; //函数执行完毕时返回函数值0
} //函数结束

// 单行注释
/* */ 块式注释
header file 头文件
standard input & output stdio

例1.2

求两个整数之和.

1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
int main()
{
int a,b,sum;
a=123;
b=456;
sum=a+b;
printf("sum is %d\n",sum); //变量sum的值将取代字符串中的%d
return 0;
}

%d 某输出格式

例1.3

求两个整数中的较大者.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
int main()
{
int max(int x, int y);
int a, b, c;
scanf_s("%d,%d", &a, &b); //这里使用scanf_s函数代替scanf函数
c = max(a, b); //a和b为max函数的参数,为实际参数,它们的值将传送给max函数中的 参数x和y,为形式参数
printf("max=%d\n", c);
return 0;
}
int max(int x, int y) //自定义函数
{
int z;
if (x > y)z = x;
else z = y;
return(z);
}

& 位运算符(取地址)
C语言无法正常使用scanf怎么回事?-知乎

习题6

求三个整数中的较大者.

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
int main()
{
int a, b, c, max;
scanf_s("%d %d %d", &a, &b, &c);
max = a; //打擂台算法
if (b > max)max = b;
if (c > max)max = c;
printf("max=%d\n", max);
return 0;
}

if条件判断语句

第二章

例2.1/2.18

求5!

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
int main()
{int i,t;
t=1;
i=2;
while(i<=5)
{
t=t*i;
i=i+1;
}
printf("%d\n,t");
return 0;
}

while循环语句

例2.3

判定2000-2500年中的每一年是否为闰年,并将结果输出.
符合下面两个条件之一的即为闰年.
1)能被4整除但不能被100整除
2)能被100整除但不能被400整除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
int main()
{
int i;
for (i = 2000; i <= 2500; i++)
{
if (i % 4 == 0 && i % 100 != 0) //不等号!= 取余运算式%
{
printf("%d ", i);
}
else if (i % 100 == 0 && i % 400 == 0)
{
printf("%d ", i);
}
}
return 0;
}

for循环语句

例2.4/例2.19

求1-1/2+1/3-1/4+…+1/99-1/100.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
int main()
{
int sign=1; //分子“1”
double deno=2.0,sum=1.0,term; //双精度型变量
while(deno<=100)
{
sign=-sign; //变号
term=sign/deno;
sum=sum+term;
deno=deno+1; //分母

}
printf("%f\n",sum);
return 0;
}

%f 某输出格式

例2.5

给出一个大于或等于3的正整数,判断它是不是一个素数.
判断一个数n(n≥3)是否为素数的方法:
将n作为被除数,将2~n的各个整数先后作为除数,如果只有n可被整除,则n为素数.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>
int main()
{
int n; //输入值
int m; //辅助判断
int k; //除数
scanf_s("%d", &n);
for (k = 2; k <= n; k++) //k用作除数,用于判断是否为素数
{
m = n % k; //取余
if (m == 0) break; //break满足if条件后跳出for循环
}
if (k >= n)
{
printf("%d是素数\n", n);
}
else
{
printf("%d不是素数\n", n);
}
return 0;
}

习题4(1)

交换两个变量的值.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
int main()
{
int a, b, c; //c作为中间变量
printf("请输入两个整数值用于交换,中间用英文逗号分隔\n");
scanf_s("%d,%d", &a, &b);
c = b;
b = a;
a = c;
printf("交换后,它们的值如下\n");
printf("a=%d\n", a);
printf("b=%d\n", b);
return 0;
}

作业1

判断一个数能否同时被3和5整除.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
int main()
{
int a;
printf("请输入一个整数值\n");
scanf_s("%d",&a);
if (a % 3 == 0 && a % 5 == 0) //逻辑运算符 且&&
printf("这个数能够同时被3和5整除\n");
else
printf("这个数不能同时被3和5整除\n");

return 0;
}

习题4(2)

依次输入10个数,输出其中的最大值.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
int main()
{
int n, max, i = 1;
printf("请依次输入10个整数值\n");
scanf_s("%d", &n);
max = n;
while (i <= 9) //第一个数在while循环前面,所以这里是9
{
printf("请继续\n");
scanf_s("%d", &n);
if (n > max)max = n; //打擂台
i = i + 1;
}
printf("max=%d\n", max);
return 0;
}

习题4(3)

有三个数a,b,c,要求按大小顺序把它们输出.

算法1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h>
int main()
{
int a,b,c,t;
printf("请输入3个整数值,中间用英文逗号分隔\n");
scanf_s("%d,%d,%d", &a,&b,&c);
if (a < b) { //如果a<b,就将a,b互换位置,下面以此类推,最后达到排序的目的
t = a;
a = b;
b = t;
}
if (a < c) {
t = a;
a = c;
c = t;
}
if (b < c) {
t = b;
b = c;
c = t;
}
printf("从大到小依次为: %d,%d,%d \n",a,b,c);
return 0;
}

算法2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdio.h>
int main()
{
int a, b, c, t;
scanf_s("%d,%d,%d", &a, &b, &c);
if (a > b)
{
t = a;
a = b;
b = t;
}

if (c < a)printf("%d,%d,%d", c, a, b);

else if (c > b)
printf("%d,%d,%d", a, b, c);
else
printf("%d,%d,%d", a, c, b);

return 0;
}

习题4(7)

求两个正整数m和n的最大公约数.
辗转相除法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<stdio.h>
#include<stdlib.h> //standard library
int main() {

int m, n, t, r; //m , n为两个随机数;t为中间变量用于交换;r为余数
printf("请输入两个数,中间用英文逗号分隔\n");
scanf_s("%d,%d",&m,&n);
if (n == 0)
//为了保证分母n不是0,将分子m和n交换,分子换成0,分母换成不是0的数,因为分母为0会报错
{
t = m;
m = n;
n = t;
}
//辗转相除法-求最大公约数
while (m % n != 0)
{
//若m%n不为0,循环执行以下语句
r = m % n; //取余存r
m = n;
n = r;
}
//若m%n为0,则跳出循环,此时得到的r则是最大公约数
printf("最大公约数为:%d\n",n);
system("pause");
return 0;
}

习题8(2)

求解一元二次方程.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
double a, b, c, d;
printf("输入方程的系数a,b,c:\n");
scanf_s("%lf%lf%lf", &a, &b, &c);
if (0 == a) {
if (0 == b) {
if (0 != c) {
printf("不构成等式\n");
}
else {
printf("这是恒等式0=0\n");
}
}
else {
printf("这是一元一次方程,根为: %lf\n", -c / b);
}
}
else {
d = b * b - 4 * a * c;//判别式
if (0 == d) {
printf("两个相等实根,x1=x2=%lf\n", -b / (2 * a));
}
else if (d > 0) {
printf("两个不等实根,x1=%lf, x2=%lf\n", (-b + sqrt(d)) / (2 * a), (-b - sqrt(d)) / (2 * a));
}
else {
printf("两个不等虚根,x1=%lf+%lfi, x2=%lf-%lfi\n", -b / (2 * a), sqrt(-d) / (2 * a), -b / (2 * a), sqrt(-d) / (2 * a));
}
}
system("pause");
return 0;
}

第三章

习题1

p=(1+r)^n

1
2
3
4
5
6
7
8
9
#include<stdio.h>
#include<math.h>
int main()
{
float p, r = 0.07, n = 10;
p = pow(1 + r, n); //p=(1+r)^n
printf("p=%f\n", p);
return 0;
}

补码

你可能并不了解的补码-WeChat

例3.3/3.10拓展

输入一个字母,转换其大小写格式后输出.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
int main(){
printf("请输入你需要转换大小写的字母\n");
int d1,d2;
d1=getchar();
if (d1<91 ){
d2=d1+32;
}
else{
d2=d1-32;
}
printf("%c\n",d2);
return 0;
}

第五章

习题3

求两个正整数m和n的最大公约数和最小公倍数.

直接求最小公倍数.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
int main()
{
int m, n, a, b, i = 0;
scanf_s("%d,%d", &n, &m);
do
{
i++;
a = m * i;
b = a % n;
} while (b != 0);
printf("%d", m * i);
}

假设m,n的最大公约数为a,那么他们的最小公倍数就为m*n/a.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main()
{
int a, b, m, n, i, h;
scanf_s("%d,%d", &m, &n);
a = m;
b = n;
do
{
i = a;
a = b % a;
b = i;
} while (a != 0);
h = m * n / b;
printf("%d", h);
return 0;
}

《C程序设计(第五版)》
http://example.com/2023/01/14/CS-C-《C程序设计(第五版)》/
许可协议