第 1 章 程序设计入门
1.1 算术表达式
程序 1-1 计算并输出 1+2 的值
#include<stdio.h>
int main(){
printf("%d\\n", 1+2);
return 0;
}
/* 运行结果
3
*/
实验 1~4
int main(){
printf("%d\\n", 3 – 4); // 实验1
printf("%d\\n", 5 * 6); // 实验2
printf("%d\\n", 8 / 4); // 实验3
printf("%d\\n", 8 / 5); // 实验4
return 0;
}
/* 执行结果
-1
30
2
1
*/
程序 1-2 计算并输出 8/5 的值,保留小数点后 1 位
#include<stdio.h>
int main(){
printf("%.1f\\n", 8.0/5.0);
return 0;
}
实验 5~7
#include<stdio.h>
int main(){
printf("%.2f\\n", 8.0 / 5.0); // 实验5
printf("%.1f\\n", 8 / 5); // 实验6
printf("%d\\n", 8.0 / 5.0); // 实验7
return 0;
}
/* 执行结果
1.60
0.0
-1717986918
*/
程序 1-3 复杂的表达式计算
#include<stdio.h>
#include<math.h>
int main(){
printf("%.8f\\n", 1+2*sqrt(3)/(5–0.1));
return 0;
}
1.2 变量及其输入
程序 1-4 a+b 问题
#include<stdio.h>
int main(){
int a, b;
scanf("%d%d", &a, &b);
printf("%d\\n", a+b);
return 0;
}
程序 1-5 圆柱体的表面积
#include<stdio.h>
#include<math.h>
int main(){
const double pi = acos(–1.0);
double r, h, s1, s2, s;
scanf("%lf%lf", &r, &h);
s1 = pi*r*r;
s2 = 2*pi*r*h;
s = s1*2.0 + s2;
printf("Area = %.3f\\n", s)
return 0;
}
1.3 顺序结构程序设计
程序 1-6 三位数反转(1)
#include<stdio.h>
int main(){
int n;
scanf("%d", &n);
printf("%d%d%d\\n", n%10, n/10%10, n/100);
return 0;
}
程序 1-7 三位数反转(2)
#include<stdio.h>
int main()
{
int n, m;
scanf("%d", &n);
m = (n%10)*100 + (n/10%10)*10 + (n/100);
printf("%03d\\n", m);
return 0;
}
程序 1-8 变量交换(1)
#include<stdio.h>
int main(){
int a, b, t;
scanf("%d%d", &a, &b);
t = a;
a = b;
b = t;
printf("%d %d\\n", a, b);
return 0;
}
程序 1-9 变量交换(2)
#include<stdio.h>
int main(){
int a, b;
scanf("%d%d", &a, &b);
a = a + b;
b = a – b;
a = a – b;
printf("%d %d\\n", a, b);
return 0;
}
程序 1-10 变量交换(3)
#include<stdio.h>
int main(){
int a, b;
scanf("%d%d", &a, &b);
printf("%d %d\\n", b, a);
return 0;
}
1.4 分支结构程序设计
程序 1-11 鸡兔同笼
#include<stdio.h>
int main(){
int a, b, n, m;
scanf("%d%d", &n, &m);
a = (4*n–m)/2;
b = n–a;
if (m % 2 == 1 || a < 0 || b < 0)
printf("No answer\\n");
else
printf("%d %d\\n", a, b);
return 0;
}
程序 1-12 三整数排序(1)(错误)
#include<stdio.h>
int main(){
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if (a < b && b < c) printf("%d %d %d\\n", a, b, c);
if (a < c && c < b) printf("%d %d %d\\n", a, c, b);
if (b < a && a < c) printf("%d %d %d\\n", b, a, c);
if (b < c && c < a) printf("%d %d %d\\n", b, c, a);
if (c < a && a < b) printf("%d %d %d\\n", c, a, b);
if (c < b && b < a) printf("%d %d %d\\n", c, b, a);
return 0;
}
程序 1-13 三整数排序(2)
#include<stdio.h>
int main(){
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if (a <= b && b <= c) printf("%d %d %d\\n", a, b, c);
else if (a <= c && c <= b) printf("%d %d %d\\n", a, c, b);
else if (b <= a && a <= c) printf("%d %d %d\\n", b, a, c);
else if (b <= c && c <= a) printf("%d %d %d\\n", b, c, a);
else if (c <= a && a <= b) printf("%d %d %d\\n", c, a, b);
else if (c <= b && b <= a) printf("%d %d %d\\n", c, b, a);
return 0;
}
程序 1-14 三整数排序(3)
#include<stdio.h>
int main(){
int a, b, c, t;
scanf("%d%d%d", &a, &b, &c);
if (a > b) { t = a; a = b; b = t; } //执行完毕之后 a≤b
if (a > c) { t = a; a = c; c = t; } //执行完毕之后 a≤c,且 a≤b 依然成立
if (b > c) { t = b; b = c; c = t; }
printf("%d %d %d\\n", a, b, c);
return 0;
}
1.5 注解与习题
实验 A1
int main(){
printf("%d\\n", 11111 * 111111); // 5个1
printf("%d\\n", 111111 * 111111); // 6个1
printf("%d\\n", 111111111 * 111111111); // 9个1
return 0;
}
/* 执行结果
1234554321
-539247567 溢出
1653732529 溢出
*/
实验 A2
#include<stdio.h>
#include<math.h>
int main(){
printf("%f\\n", 11111.0 * 111111.0); // 5个1
printf("%f\\n", 111111.0 * 111111.0); // 6个1
printf("%f\\n", 111111111.0 * 111111111.0); // 9个1
return 0;
}
/* 执行结果
1234554321.000000
12345654321.000000
12345678987654320.000000 double在此环境表示16位有效数字
*/
实验 A3
#include<stdio.h>
#include<math.h>
int main(){
printf("%f\\n", sqrt(–10));
return 0;
}
/* 执行结果
nan
*/
实验 A4
#include<stdio.h>
#include<math.h>
int main(){
printf("%f\\n", 1.0 / 0.0);
printf("%f\\n", 0.0 / 0.0);
return 0;
}
/* 执行结果
inf
nan
*/
实验 A5
#include<stdio.h>
#include<math.h>
int main(){
printf("%d\\n", 1 / 0);
return 0;
}
/*执行结果
*/
实验 B1
实验 B2
实验 B3
实验 B4
习题 1-1 平均数(average)
#include<stdio.h>
int main(){
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
printf("%0.3f\\n", (a + b + c) / 3.0);
return 0;
}
习题 1-2 温度(temperature)
#include<stdio.h>
int main(){
double f;
scanf("%lf", &f);
printf("%.3f\\n", 5 * (f – 32) / 9);
return 0;
}
/* 执行结果
1 输入
-17.222 输出
*/
习题 1-3 连续和(sum)
#include<stdio.h>
int main(){
int n;
scanf("%d", &n);
printf("%d\\n", n * (n + 1) / 2);
return 0;
}
/* 执行结果
100 输入
5050 输出
*/
习题 1-4 正弦和余弦(sin 和 cos)
#include<stdio.h>
#include<math.h>
#define PI acos(–1)
int main(){
int n;
scanf("%d", &n);
printf("%f\\n", sin(n * PI / 180)); // 三角函数的参数是弧度值而不是角度值
printf("%f\\n", cos(n * PI / 180));
return 0;
}
/*
执行结果
0.866025 输入
0.500000 输出
*/
习题 1-5 打折(discount)
#include<stdio.h>
int main(){
const double PRICE = 95.0, DISCOUNT = 0.95;
int cnt;
scanf("%d", &cnt);
if(cnt * PRICE >= 300){
printf("%.2f\\n", cnt * PRICE * DISCOUNT);
}else{
printf("%.2f\\n", cnt * PRICE);
}
return 0;
}
/* 执行结果
4
361.00
*/
习题 1-6 三角形(triangle)
#include<stdio.h>
void swap(int *a, int *b){
int t = *a;
*a = *b;
*b = t;
}
int main(){
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if(a > b) swap(&a, &b);
if(a > c) swap(&a, &c);
if(b > c) swap(&b, &c);
if(a + b <= c){
puts("not a triangle");
return 0;
}
if(a * a + b * b == c * c){
puts("yes");
}else{
puts("no");
}
return 0;
}
/* 执行结果
5 4 3
yes
*/
习题 1-7 年份(year)
#include<stdio.h>
int main(){
int year;
scanf("%d", &year);
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
puts("yes");
}else{
puts("no");
}
return 0;
}
/* 执行结果
2000
yes
*/
问题 1
int类型的最大值为:2147483647,最小值为:-2147483648
问题 2
C语言标准规定:float类型至少能表示6位有效数字,double至少能保持10位有效数字,但是64位系统至少能保存13位有效数字。
问题 3
#include<stdio.h>
#include<float.h>
int main(){
printf("float_true_min: %ef\\n", FLT_TRUE_MIN);
printf("float_min: %ef\\n", FLT_MIN);
printf("float_max: %ef\\n", FLT_MAX);
printf("double_true_min: %ef\\n", DBL_TRUE_MIN);
printf("double_min: %ef\\n", DBL_MIN);
printf("double_max: %ef\\n", DBL_MAX);
printf("long_double_true_min: %Lef\\n", LDBL_TRUE_MIN);
printf("long_double_min: %Lef\\n", LDBL_MIN);
printf("long_double_max: %Lef\\n", LDBL_MAX);
return 0;
}
/* 执行结果
float_true_min: 1.401298e-45f
float_min: 1.175494e-38f
float_max: 3.402823e+38f
double_true_min: 4.940656e-324f
double_min: 2.225074e-308f
double_max: 1.797693e+308f
long_double_true_min: 3.645200e-4951f
long_double_min: 3.362103e-4932f
long_double_max: 1.189731e+4932f
*/
问题 4
逻辑运算符优先级! > && > ||
问题 5
#include<stdio.h>
int main(){
int a = 0, b = 0, x = 0, y = 0;
if(a){
if(b){
x ++ ;
}else{
y ++ ;
}
}
return 0;
}



