C语言550例编程实例说明
本文档包含了C语言编程的550个实例,按照章节顺序组织,每个实例都附有详细的代码解释。
第1章 C语言编程入门
实例1.1:Hello World
功能:输出"Hello World!"到控制台。
代码:
#include <stdio.h> // 包含stdio.h头文件,提供输入输出功能
int main(void)
{
printf("Hello World!"); // 使用printf函数输出Hello World!
return 0; // 函数返回值0,表示程序正常结束
}
解释:
#include <stdio.h>:包含标准输入输出头文件,提供printf等函数。int main(void):主函数,程序的入口点。printf("Hello World!"):使用printf函数输出字符串"Hello World!"。return 0:函数返回值0,表示程序正常结束。
实例1.2:输出多行文本
功能:输出多行文本到控制台。
代码:
#include <stdio.h>
int main(void)
{
printf("��ϲ��C����!\n");
printf("ѧ�ñ����Ҫ��д���룬ʵ����ʵ����ʵ��!!!\n");
return 0;
}
解释:
printf("��ϲ��C����!\n"):输出"��ϲ��C����!"并换行。printf("ѧ�ñ����Ҫ��д���룬ʵ����ʵ����ʵ��!!!\n"):输出"ѧ�ñ����Ҫ��д���룬ʵ����ʵ����ʵ��!!!"并换行。\n:换行符,使输出内容换行。
实例1.3:输出表格
功能:输出一个简单的表格到控制台。
代码:
#include <stdio.h>
int main(void)
{
printf("ѧ��\t����\t�Ա�\t����\n");
printf("001\t����\t��\t20\n");
return 0;
}
解释:
printf("ѧ��\t����\t�Ա�\t����\n"):输出表格标题行,使用\t作为制表符分隔各列。printf("001\t����\t��\t20\n"):输出表格数据行,包含学号、姓名、性别和年龄。\t:制表符,使输出内容对齐。
实例1.4:简单算术运算
功能:输出简单算术运算的结果。
代码:
#include <stdio.h>
int main(void)
{
printf("1+2=%d\n", 1 + 2); // 计算1+2的结果为3
printf("3+4=%d\n", 3 + 4); // 计算3+4的结果为7
return 0;
}
解释:
printf("1+2=%d\n", 1 + 2):计算1+2的结果并输出,%d是整数格式说明符。printf("3+4=%d\n", 3 + 4):计算3+4的结果并输出。
实例1.5:复杂算术运算
功能:输出复杂算术运算的结果。
代码:
#include <stdio.h>
int main(void)
{
printf("(1 + 8) * 2 - 9 / 4 + 5 = %d\n", (1 + 8) * 2 - 9 / 4 + 5); // 结果为21
return 0;
}
解释:
(1 + 8) * 2 - 9 / 4 + 5:按照运算符优先级计算,结果为21。- 运算符优先级:括号 > 乘法和除法 > 加法和减法。
实例1.6:输出数字的平方和立方
功能:输出1-5的平方和立方。
代码:
#include <stdio.h>
int main(void)
{
printf("number square cube\n");
printf("%d\t%d\t%d\n", 1, 1 * 1, 1 * 1 * 1);
printf("%d\t%d\t%d\n", 2, 2 * 2, 2 * 2 * 2);
printf("%d\t%d\t%d\n", 3, 3 * 3, 3 * 3 * 3);
printf("%d\t%d\t%d\n", 4, 4 * 4, 4 * 4 * 4);
printf("%d\t%d\t%d\n", 5, 5 * 5, 5 * 5 * 5);
return 0;
}
解释:
- 输出1-5的平方和立方,使用
\t作为制表符分隔各列,使输出内容对齐。
实例1.7:不同进制的输出
功能:以不同进制输出数字13。
代码:
#include <stdio.h>
int main(void)
{
printf("ʮ��������13��ʮ�������ǣ�%d\n", 13); // 十进制
printf("ʮ��������13�İ˽������ǣ�%o\n", 13); // 八进制
printf("ʮ��������13��ʮ���������ǣ�%x", 13); // 十六进制
return 0;
}
解释:
%d:十进制格式说明符。%o:八进制格式说明符。%x:十六进制格式说明符。
实例1.8:浮点数运算
功能:输出浮点数运算的结果。
代码:
#include <stdio.h>
int main(void)
{
printf("1.1+2.2=%f\n", 1.1 + 2.2); // 输出1.1+2.2=3.300000
printf("3.3+4.4=%f\n", 3.3 + 4.4); // 输出3.3+4.4=7.700000
return 0;
}
解释:
%f:浮点数格式说明符。- 浮点数运算结果会自动保留6位小数。
实例1.9:数学函数的使用
功能:使用数学函数计算平方根和正弦值。
代码:
#include <stdio.h>
#include <math.h> // 预处理指令包含math.h头文件
int main(void)
{
printf("%f", sqrt(8) + sin(30 * 3.14159 / 180));
return 0;
}
解释:
#include <math.h>:包含数学函数头文件,提供sqrt和sin等函数。sqrt(8):计算8的平方根。sin(30 * 3.14159 / 180):计算30度的正弦值,注意sin函数的参数是弧度,所以需要将角度转换为弧度。
实例1.10:IPv6地址计算
功能:计算IPv6地址的数量。
代码:
#include <stdio.h>
#include <math.h>
int main(void)
{
printf("IPv6�ĵ�ַ���Է��䣺%f��\n",
ldexp(1.0, 128) / 1000000 / (365 * 24 * 60 * 60));
return 0;
}
解释:
ldexp(1.0, 128):计算2的128次方,即IPv6地址的总数。ldexp(1.0, 128) / 1000000 / (365 * 24 * 60 * 60):计算IPv6地址的数量(以百万为单位)。
实例1.11:输入两个数并求和
功能:输入两个整数,计算它们的和并输出。
代码:
#include <stdio.h>
int main(void)
{
int a, b; // 声明两个整型变量
printf("�������������������������м��ÿո�ָ���");
scanf("%d%d", &a, &b); // 格式输入函数scanf从键盘接收数据并存入变量a和b中
printf("%d+%d=%d", a, b, a + b); // 输出结果
return 0;
}
解释:
int a, b;:声明两个整型变量,用于存储输入的两个整数。scanf("%d%d", &a, &b);:使用scanf函数从键盘输入两个整数,分别存储到变量a和b中。&是取地址运算符,用于获取变量的内存地址。printf("%d+%d=%d", a, b, a + b);:计算a和b的和并输出。
实例1.12:变量的地址和大小
功能:输出变量的地址、值和大小。
代码:
#include <stdio.h>
int main(void)
{
int a = 10; // 声明整型变量a并初始化为10
printf("����a�ĵ�ַ�ǣ�%#x, ������ֵ�ǣ�%d\n", &a, a);
printf("����aռ%d���ֽڣ�", sizeof(a)); // sizeof运算符计算变量a占用的字节数
return 0;
}
解释:
int a = 10;:声明整型变量a并初始化为10。&a:获取变量a的内存地址。%#x:以十六进制格式输出地址,带有前缀0x。sizeof(a):计算变量a占用的字节数。
实例1.13:不同整型数据类型的大小
功能:输出不同整型数据类型的大小和值。
代码:
#include <stdio.h>
int main(void)
{
int iVar = 10; // 声明整型变量
signed siVar = -10; // 等价于signed int siVar;
unsigned uiVar = 20; // 等价于unsigned int uiVar;
short sVar = 10; // 等价于short int sVar;
long lVar = 40; // 等价于long int lVar;
unsigned long ulVar; // 等价于unsigned long int lVar;
long long llVar = 200; // 等价于long long int llVar;
unsigned long long ullVar = 100; // 等价于unsigned long long int ullVar;
printf("int ռ���ֽ�����%d, iVar = %d\n", sizeof(int), iVar);
printf("short ռ���ֽ�����%d, sVar = %hd\n", sizeof(short), sVar);
printf("long ռ���ֽ�����%d, lVar = %ld\n", sizeof(long), lVar);
printf("long long ռ���ֽ�����%d, llVar = %lld\n",
sizeof(long long), llVar);
return 0;
}
解释:
- 不同整型数据类型的大小:
int:通常占用4个字节。short:通常占用2个字节。long:通常占用4个字节(在32位系统)或8个字节(在64位系统)。long long:通常占用8个字节。
- 格式说明符:
%d:用于输出int类型。%hd:用于输出short类型。%ld:用于输出long类型。%lld:用于输出long long类型。
实例1.14:整数溢出
功能:演示整数溢出的情况。
代码:
#include <stdio.h>
int main(void)
{
int x = 2147483647; // 定义整型变量为最大值2^31-1
int y = x + 1; // y的值为2147483648
printf("x=%d, y=%d\n", x, y);
return 0;
}
解释:
int x = 2147483647;:定义整型变量x为int类型的最大值(2^31-1)。int y = x + 1;:计算x + 1,由于超过了int类型的最大值,发生整数溢出。- 整数溢出会导致结果变为
int类型的最小值(-2^31),这是因为整型变量在内存中是以补码形式存储的。
实例1.15:计算1到n的和
功能:输入一个正整数n,计算1到n的和并输出。
代码:
#include <stdio.h>
int main(void)
{
unsigned int s, n; // 声明变量
scanf("%u", &n);
s = (n + 1) * n / 2; // 使用公式计算1~n的和
printf("s = %u\n", s); // 输出计算结果
return 0;
}
解释:
unsigned int s, n;:声明无符号整型变量s和n。scanf("%u", &n);:使用scanf函数从键盘输入一个无符号整数,存储到变量n中。s = (n + 1) * n / 2;:使用等差数列求和公式计算1到n的和。%u:无符号整数格式说明符。
实例1.16:将秒数转换为天、小时、分钟和秒
功能:输入一个秒数,将其转换为天、小时、分钟和秒并输出。
代码:
#include <stdio.h>
int main(void)
{
long long seconds; // 存储输入的秒数
printf("����������");
scanf("%lld", &seconds);
printf("%lld�� = ", seconds);
int days = seconds / 86400; // 一天的秒数86400
int hours = (seconds % 86400) / 3600; // 一小时的秒数3600
int minutes = (seconds % 3600) / 60; // 一分钟的秒数60
int remaining_seconds = seconds % 60;
printf("%d�죬%dСʱ, %d���ӣ�%d��", days, hours, minutes, remaining_seconds);
return 0;
}
解释:
long long seconds;:声明长整型变量seconds,用于存储输入的秒数。scanf("%lld", &seconds);:使用scanf函数从键盘输入一个长整数,存储到变量seconds中。- 计算天、小时、分钟和剩余秒数:
days = seconds / 86400;:计算天数,一天有86400秒。hours = (seconds % 86400) / 3600;:计算小时数,一小时有3600秒。minutes = (seconds % 3600) / 60;:计算分钟数,一分钟有60秒。remaining_seconds = seconds % 60;:计算剩余秒数。
%lld:长整数格式说明符。
实例1.17:反转三位数
功能:输入一个三位数,将其反转后输出。
代码:
#include <stdio.h>
int main(void)
{
int x, a, b, c;
scanf("%d", &x);
a = x / 100; // 百位
b = x /10 % 10; // 十位
c = x % 10; // 个位
printf("%d%d%d\n", c, b, a);
return 0;
}
解释:
int x, a, b, c;:声明整型变量x(输入的三位数)、a(百位数字)、b(十位数字)和c(个位数字)。a = x / 100;:计算百位数字,使用整数除法。b = x / 10 % 10;:计算十位数字,先除以10得到前两位,再对10取余得到十位数字。c = x % 10;:计算个位数字,对10取余。printf("%d%d%d\n", c, b, a);:按个位、十位、百位的顺序输出,实现反转。
实例1.18:自增运算符的使用
功能:演示自增运算符的使用。
代码:
#include <stdio.h>
int main(void)
{
int a = 7, b = 7, c, d;
a = a + 1; // 将a的值加1
c = a++; // 后缀形式,先返回a的值,再自增1
d = ++b; // 前缀形式,先自增1,再返回b的值
printf("a = %d, b = %d, c = %d, d = %d\n", a, b, c, d);
return 0;
}
解释:
int a = 7, b = 7, c, d;:声明整型变量a、b、c和d,并初始化a和b为7。a = a + 1;:将a的值加1,此时a的值为8。c = a++;:使用后缀自增运算符,先将a的当前值(8)赋给c,然后a自增1,此时a的值为9,c的值为8。d = ++b;:使用前缀自增运算符,先将b自增1(此时b的值为8),然后将b的当前值赋给d,此时d的值为8。
实例1.19:交换两个变量的值
功能:输入两个整数,交换它们的值并输出。
代码:
#include <stdio.h>
int main(void)
{
int a, b, t;
printf("����������������ֵ��");
scanf("%d %d", &a, &b);
printf("����ǰa = %d, b = %d\n", a, b);
t = a; // a的值存放到t中
a = b; // b的值存放到a中
b = t; // t的值存放到b中
printf("������a = %d, b = %d\n", a, b);
return 0;
}
解释:
int a, b, t;:声明整型变量a、b(输入的两个整数)和t(临时变量,用于交换)。- 交换过程:
t = a;:将a的值存放到临时变量t中。a = b;:将b的值存放到a中。b = t;:将t中存储的原a的值存放到b中。
实例1.20:输入八个整数并求和
功能:输入八个整数,计算它们的和并输出。
代码:
#include <stdio.h>
int main(void)
{
int c1, c2, c3, c4, c5, c6, c7, c8;
scanf("%d%d%d%d%d%d%d%d", &c1, &c2, &c3, &c4, &c5, &c6, &c7, &c8);
printf("%d\n", c1 + c2 + c3 + c4 + c5 + c6 + c7 + c8);
return 0;
}
解释:
int c1, c2, c3, c4, c5, c6, c7, c8;:声明八个整型变量,用于存储输入的八个整数。scanf("%d%d%d%d%d%d%d%d", &c1, &c2, &c3, &c4, &c5, &c6, &c7, &c8);:使用scanf函数从键盘输入八个整数,分别存储到八个变量中。printf("%d\n", c1 + c2 + c3 + c4 + c5 + c6 + c7 + c8);:计算八个整数的和并输出。
实例1.21:计算圆的面积和周长
功能:输入圆的半径,计算圆的面积和周长并输出。
代码:
#include <stdio.h>
#define PI 3.14159 // 宏定义
int main(void)
{
float radius, area, circumference; // 定义相关的变量
printf("������һ��Բ�İ뾶��");
scanf("%f", &radius); // 输入半径
area = PI * radius * radius; // 计算圆的面积
circumference = 2 * PI * radius; // 计算圆的周长
printf("�뾶Ϊ%.2f��Բ������ǣ�%.2f\n", radius, area);
printf("�뾶Ϊ%.2f��Բ���ܳ��ǣ�%.2f\n", radius, circumference);
return 0;
}
解释:
#define PI 3.14159:宏定义,将PI定义为3.14159。float radius, area, circumference;:声明浮点型变量radius(半径)、area(面积)和circumference(周长)。scanf("%f", &radius);:使用scanf函数从键盘输入一个浮点数,存储到变量radius中。- 计算公式:
- 面积 = π × 半径²
- 周长 = 2 × π × 半径
%.2f:以浮点数格式输出,保留2位小数。
实例1.22:计算表达式的值
功能:输入两个实数x和y,计算表达式2x + 5 - y的值并输出。
代码:
#include <stdio.h>
int main(void)
{
double x, y; // 双精度型变量
scanf("%lf %lf", &x, &y);
printf("%g\n", 2 * x + 5 - y);
return 0;
}
解释:
double x, y;:声明双精度浮点型变量x和y。scanf("%lf %lf", &x, &y);:使用scanf函数从键盘输入两个双精度浮点数,分别存储到变量x和y中。printf("%g\n", 2 * x + 5 - y);:计算表达式2 * x + 5 - y的值并输出,%g是双精度浮点数格式说明符,会自动去除多余的小数位。
实例1.23:计算多项式的值
功能:输入x和系数a、b、c、d,计算多项式ax³ + bx² + cx + d的值并输出。
代码:
#include<stdio.h>
int main(void)
{
double x, a, b, c, d, f;
scanf("%lf%lf%lf%lf%lf", &x, &a, &b, &c, &d);
f = a * x * x * x + b * x * x + c * x + d;
printf("%.7f",f);
return 0;
}
解释:
double x, a, b, c, d, f;:声明双精度浮点型变量x(自变量)、a、b、c、d(系数)和f(多项式的值)。scanf("%lf%lf%lf%lf%lf", &x, &a, &b, &c, &d);:使用scanf函数从键盘输入五个双精度浮点数,分别存储到变量x、a、b、c和d中。f = a * x * x * x + b * x * x + c * x + d;:计算多项式ax³ + bx² + cx + d的值。printf("%.7f",f);:以浮点数格式输出多项式的值,保留7位小数。
实例1.24:字符输入输出
功能:输入一个字符,输出该字符及其ASCII值。
代码:
#include <stdio.h>
int main(void)
{
char c;
printf("������һ���ַ�: ");
c = getchar(); // 从标准输入读取一个字符并赋值给变量c
printf("��������ַ���: ");
putchar(c); // 将字符c输出到标准输出
printf("\n���ַ���ASCIIֵ�ǣ�%d", c);
return 0;
}
解释:
char c;:声明字符型变量c。c = getchar();:使用getchar函数从标准输入(键盘)读取一个字符,存储到变量c中。putchar(c);:使用putchar函数将字符c输出到标准输出(屏幕)。printf("\n���ַ���ASCIIֵ�ǣ�%d", c);:输出字符c的ASCII值,%d是整数格式说明符,字符型变量在输出时会自动转换为整型。
实例1.25:计算两点之间的中点
功能:输入两个点的坐标,计算并输出它们的中点坐标。
代码:
#include <stdio.h>
int main(void)
{
double x1, y1, x2, y2;
printf("�����һ���������:");
scanf("(%lf,%lf)", &x1, &y1); // 输入时用(3.4,5.6)形式表示坐标
getchar(); // 读取换行符
printf("����ڶ����������:");
scanf("(%lf,%lf)", &x2, &y2);
double x, y;
x = (x1 + x2) / 2;
y = (y1 + y2) / 2;
printf("�е��ǣ�(%f,%f)", x, y);
return 0;
}
解释:
double x1, y1, x2, y2;:声明双精度浮点型变量,用于存储两个点的坐标。scanf("(%lf,%lf)", &x1, &y1);:使用scanf函数从键盘输入第一个点的坐标,输入格式为(x,y)。getchar();:读取输入缓冲区中的换行符,避免影响后续输入。scanf("(%lf,%lf)", &x2, &y2);:使用scanf函数从键盘输入第二个点的坐标。double x, y;:声明双精度浮点型变量,用于存储中点的坐标。x = (x1 + x2) / 2;:计算中点的x坐标。y = (y1 + y2) / 2;:计算中点的y坐标。printf("�е��ǣ�(%f,%f)", x, y);:输出中点的坐标。
实例1.26:计算存款利息
功能:输入本金、年利率和存款年限,计算到期时的本息和并输出。
代码:
#include <stdio.h>
#include <math.h>
int main(void)
{
float rate, capital, deposit;
int n;
// 用户输入
printf("�����뱾��Ԫ����");
scanf("%f", &capital);
printf("�����������ʣ�%%����");
scanf("%f", &rate);
printf("�����������ޣ�");
scanf("%d", &n);
// 计算本息
float factor = 1.0 + rate / 100;
deposit = capital * pow(factor, n);
// 输出结果
printf("����ʱ������õı���֮��Ϊ��%.2fԪ\n", deposit);
return 0;
}
解释:
float rate, capital, deposit;:声明浮点型变量rate(年利率)、capital(本金)和deposit(本息和)。int n;:声明整型变量n(存款年限)。scanf函数:从键盘输入本金、年利率和存款年限。float factor = 1.0 + rate / 100;:计算每年的本息因子。deposit = capital * pow(factor, n);:使用pow函数计算本息和,公式为:本息和 = 本金 × (1 + 年利率)^年限。printf("����ʱ������õı���֮��Ϊ��%.2fԪ\n", deposit);:输出本息和,保留2位小数。
实例1.27:计算贷款还款
功能:输入贷款总额、年利率和每月还款额,计算前3个月的剩余贷款余额并输出。
代码:
#include <stdio.h>
int main(void)
{
// 定义5个变量:贷款总额、年利率、每月还款、月利率、剩余贷款
float loan, rate, payment, interestRate, remaining;
// 获取用户输入
printf("����������ܶԪ����");
scanf("%f", &loan);
printf("�����������ʣ�%%����");
scanf("%f", &rate);
printf("������ÿ�>>����Ԫ����");
scanf("%f", &payment);
interestRate = rate / 1200;// 计算月利率
// 计算前3个月的剩余贷款
remaining = loan + loan * interestRate - payment;
printf("��1�λ����Ĵ������Ϊ��%.2fԪ\n", remaining);
remaining = remaining + remaining * interestRate - payment;
printf("��2�λ����Ĵ������Ϊ��%.2fԪ\n", remaining);
remaining = remaining + remaining * interestRate - payment;
printf("��3�λ����Ĵ������Ϊ��%.2fԪ\n", remaining);
return 0;
}
解释:
float loan, rate, payment, interestRate, remaining;:声明浮点型变量loan(贷款总额)、rate(年利率)、payment(每月还款额)、interestRate(月利率)和remaining(剩余贷款余额)。scanf函数:从键盘输入贷款总额、年利率和每月还款额。interestRate = rate / 1200;:计算月利率,公式为:月利率 = 年利率 / 12 / 100。- 计算每月剩余贷款余额:
- 第1个月:剩余贷款 = 贷款总额 + 贷款总额 × 月利率 - 每月还款额
- 第2个月:剩余贷款 = 第1个月剩余贷款 + 第1个月剩余贷款 × 月利率 - 每月还款额
- 第3个月:剩余贷款 = 第2个月剩余贷款 + 第2个月剩余贷款 × 月利率 - 每月还款额
printf函数:输出前3个月的剩余贷款余额,保留2位小数。
实例1.28:输出字符菱形
功能:输入一个字符,输出由该字符组成的菱形。
代码:
#include <stdio.h>
int main(void)
{
char ch; // 定义存储1个字符的变量
printf("������1���ַ���");
scanf("%c", &ch) ;
printf(" %c\n", ch); // 第1行1个字符,前有4个空格
printf(" %c %c\n", ch, ch); // 第2行2个字符,前有3个空格
printf(" %c % c %c\n", ch, ch, ch); // 第3行3个字符,前有2个空格
printf(" %c %c %c %c\n", ch, ch, ch, ch); // 第4行4个字符,前有1个空格
printf("%c %c %c %c %c\n", ch, ch, ch, ch, ch); // 第5行5个字符,前有0个空格
return 0;
}
解释:
char ch;:声明字符型变量ch。scanf("%c", &ch);:使用scanf函数从键盘输入一个字符,存储到变量ch中。printf函数:输出由字符ch组成的菱形,每行的字符数和前导空格数不同,形成菱形效果。
实例1.29:大小写字母转换
功能:输入一个小写字母,输出对应的大写字母及其ASCII值。
代码:
#include <stdio.h>
int main(void)
{
char lowerch, upperch;
printf("������Сд��ĸ��");
scanf("%c", &lowerch);
upperch = lowerch - 32; // 将小写字母的ASCII值减32
printf("%c��Ӧ�Ĵ�д��ĸΪ��%c\n", lowerch, upperch);
printf("%c��%c��Ӧ��ASCII��ֵ�ֱ�Ϊ%d��%d\n", lowerch, upperch,
lowerch, upperch);
return 0;
}
解释:
char lowerch, upperch;:声明字符型变量lowerch(小写字母)和upperch(大写字母)。scanf("%c", &lowerch);:使用scanf函数从键盘输入一个小写字母,存储到变量lowerch中。upperch = lowerch - 32;:将小写字母转换为大写字母,因为小写字母的ASCII值比对应的大写字母大32。printf函数:输出小写字母、对应的大写字母及其ASCII值。
实例1.30:字母加密
功能:输入一个大写字母和一个整数n,将该字母向后移动n位(循环)并输出。
代码:
#include <stdio.h>
int main(void)
{
char ch;
int n;
scanf("%c%d", &ch, &n);
printf("%c �滻���� %c\n", ch, (ch - 'A' + n) % 26 + 'A');
return 0;
}
解释:
char ch;:声明字符型变量ch,用于存储输入的大写字母。int n;:声明整型变量n,用于存储移动的位数。scanf("%c%d", &ch, &n);:使用scanf函数从键盘输入一个大写字母和一个整数,分别存储到变量ch和n中。(ch - 'A' + n) % 26 + 'A':计算加密后的字母:ch - 'A':将大写字母转换为0-25的数字。+ n:向后移动n位。% 26:处理循环,确保结果在0-25范围内。+ 'A':将数字转换回大写字母。
printf函数:输出原字母和加密后的字母。
实例1.31:布尔类型的使用
功能:演示布尔类型的使用。
代码:
#include <stdio.h>
int main(void)
{
_Bool b;
printf("sizeof(_Bool) = %d\n", sizeof(_Bool));
b = 3; // 因为3≠0,所以b的值为1
printf("b = %d \n", b);
b = b - 3; // 因为b - 3表达式的值为-2≠0,所以b的值为1
printf("b = %d \n", b);
b = 0;
printf("b = %d \n", b);
return 0;
}
解释:
_Bool b;:声明布尔类型变量b。sizeof(_Bool):计算布尔类型的大小,通常为1字节。b = 3;:将非零值赋给布尔变量,b的值为1(真)。b = b - 3;:计算b - 3,结果为-2(非零),所以b的值为1(真)。b = 0;:将零值赋给布尔变量,b的值为0(假)。printf函数:输出布尔变量的大小和值。
实例1.32:类型转换
功能:演示隐式类型转换和显式类型转换。
代码:
#include <stdio.h>
int main(void)
{
int a, b;
a = 29.99 + 10.98; // 表达式自动转换
b = (int) 29.99 + (int) 10.99; // 强制类型转换
printf("a = %d, b = %d", a, b);
return 0;
}
解释:
int a, b;:声明整型变量a和b。a = 29.99 + 10.98;:计算29.99 + 10.98,结果为40.97,然后隐式转换为整型40,存储到变量a中。b = (int) 29.99 + (int) 10.99;:先将29.99和10.99分别强制转换为整型29和10,然后计算29 + 10,结果为39,存储到变量b中。printf("a = %d, b = %d", a, b);:输出变量a和b的值。
实例1.33:向上取整
功能:输入n、x、y,计算n - ceil(y / x)并输出,其中ceil是向上取整函数。
代码:
#include<stdio.h>
#include<math.h>
int main(void)
{
int n,x,y;
scanf("%d%d%d", &n, &x, &y);
int num = n - ceil((double)y / x); // 强制类型转换和表达式自动转换
// int num = n - ceil(y * 1.0 / x);
printf("%d", num);
return 0;
}
解释:
int n,x,y;:声明整型变量n、x和y。scanf("%d%d%d", &n, &x, &y);:使用scanf函数从键盘输入三个整数,分别存储到变量n、x和y中。int num = n - ceil((double)y / x);:计算n - ceil(y / x),其中:(double)y / x:将y强制转换为双精度浮点型,然后与x相除,结果为双精度浮点型。ceil((double)y / x):使用ceil函数对结果进行向上取整。n - ceil((double)y / x):计算差值,结果自动转换为整型,存储到变量num中。
printf("%d", num);:输出变量num的值。
实例1.34:复合赋值运算符
功能:演示复合赋值运算符的使用。
代码:
#include <stdio.h>
int main(void)
{
int num = 10;
num += 5; // 复合赋值运算符,等价于 num = num + 5
printf("num += 5 的结果为:%d\n", num);
num -= 3; // 复合赋值运算符,等价于 num = num - 3
printf("num -= 3 的结果为:%d\n", num);
num *= 2; // 复合赋值运算符,等价于 num = num * 2
printf("num *= 2 的结果为:%d\n", num);
num /= 4; // 复合赋值运算符,等价于 num = num / 4
printf("num /= 4 的结果为:%d\n", num);
num %= 3; // 复合赋值运算符,等价于 num = num % 3
printf("num %%= 3 的结果为:%d\n", num);
return 0;
}
解释:
int num = 10;:声明整型变量num并初始化为10。- 复合赋值运算符:
num += 5;:等价于num = num + 5,结果为15。num -= 3;:等价于num = num - 3,结果为12。num *= 2;:等价于num = num * 2,结果为24。num /= 4;:等价于num = num / 4,结果为6。num %= 3;:等价于num = num % 3,结果为0。
printf函数:输出每次运算的结果。
实例1.35:逗号运算符
功能:演示逗号运算符的使用。
代码:
#include <stdio.h>
int main(void)
{
int a = 10, b = 20, c = 30;
a = b, c; // 先执行a = b,再执行c
printf("a=%d\n", a); // 输出a的值为20
a = (b, c); // (b,c)是一个表达式,值为c
printf("a=%d\n", a); // 输出a的值30
return 0;
}
解释:
int a = 10, b = 20, c = 30;:声明整型变量a、b和c,并分别初始化为10、20和30。a = b, c;:逗号运算符的优先级最低,所以先执行a = b(将b的值20赋给a),然后执行c(无实际操作)。printf("a=%d\n", a);:输出a的值为20。a = (b, c);:括号的优先级最高,所以先计算(b, c),逗号表达式的值为最后一个表达式的值,即c的值30,然后将30赋给a。printf("a=%d\n", a);:输出a的值为30。
第2章 选择语句
实例2.1:求三个数的最大值和最小值
功能:输入三个整数,输出它们的最大值和最小值。
代码:
#include <stdio.h>
int main(void)
{
int a, b, c; // 3个变量存储输入的3个整数
int maxV, minV; // 2个变量分别用于存储3个数中的最大值和最小值
printf("请输入3个整数\n");
scanf("%d %d %d", &a, &b, &c);
maxV = a; // 先设a为最大值
minV = a; // 先设a为最小值
// 之后依次与b、c和maxV比较,如果更大则替换
if (b > maxV)
maxV = b;
if (c > maxV)
maxV = c;
// 之后依次与b、c和minV比较,如果更小则替换
if (b < minV)
minV = b;
if (c < minV)
minV = c;
printf("最大值为:%d\n最小值为:%d\n", maxV, minV);
return 0;
}
解释:
int a, b, c;:声明整型变量a、b和c,用于存储输入的三个整数。int maxV, minV;:声明整型变量maxV(最大值)和minV(最小值)。scanf("%d %d %d", &a, &b, &c);:使用scanf函数从键盘输入三个整数,分别存储到变量a、b和c中。- 初始化:
maxV = a;:先假设a是最大值。minV = a;:先假设a是最小值。
- 求最大值:
if (b > maxV) maxV = b;:如果b大于当前最大值maxV,则更新maxV为b。if (c > maxV) maxV = c;:如果c大于当前最大值maxV,则更新maxV为c。
- 求最小值:
if (b < minV) minV = b;:如果b小于当前最小值minV,则更新minV为b。if (c < minV) minV = c;:如果c小于当前最小值minV,则更新minV为c。
printf("最大值为:%d\n最小值为:%d\n", maxV, minV);:输出最大值和最小值。
实例2.2:求绝对值
功能:输入一个整数,输出它的绝对值。
代码:
#include <stdio.h>
int main(void)
{
int x;
printf("请输入一个整数:\n");
scanf("%d", &x);
printf("%d的绝对值是:", x);
if (x < 0)
x = -x; // 取相反数
printf("%d\n", x);
return 0;
}
解释:
int x;:声明整型变量x,用于存储输入的整数。scanf("%d", &x);:使用scanf函数从键盘输入一个整数,存储到变量x中。if (x < 0) x = -x;:如果x小于0,则取其相反数,得到绝对值。printf("%d\n", x);:输出x的绝对值。
实例2.3:判断小写字母
功能:输入一个字符,判断它是否是小写字母。
代码:
#include <stdio.h>
int main(void)
{
char ch;
printf("请输入一个字符:\n");
scanf("%c", &ch);
if (ch >= 'a' && ch <= 'z')
{
printf("%c 是小写字母。\n", ch);
}
return 0;
}
解释:
char ch;:声明字符型变量ch,用于存储输入的字符。scanf("%c", &ch);:使用scanf函数从键盘输入一个字符,存储到变量ch中。if (ch >= 'a' && ch <= 'z'):判断ch是否在小写字母的ASCII范围内('a'到'z')。- 如果是小写字母,则输出相应的提示信息。
实例2.4:比较两个数的大小
功能:输入两个整数,按从小到大的顺序输出。
代码:
#include <stdio.h>
int main(void)
{
int a, b;
scanf("%d %d", &a, &b);
if (a < b)
printf("%d %d\n", a, b); // 若a<b
else
printf("%d %d\n", b, a); // 若b<=a
return 0;
}
解释:
int a, b;:声明整型变量a和b,用于存储输入的两个整数。scanf("%d %d", &a, &b);:使用scanf函数从键盘输入两个整数,分别存储到变量a和b中。if (a < b):判断a是否小于b。- 如果
a < b,则按a、b的顺序输出。 - 否则,按
b、a的顺序输出。
实例2.5:计算剩余邮票数
功能:输入n、x、y,计算n - ceil(y / x)并输出,结果不能为负数。
代码:
#include <math.h>
int main(void)
{
int n, x, y, num;
scanf("%d%d%d", &n, &x, &y);
num = n - ceil(y * 1.0 / x); // 剩余邮票数
if (num >= 0)
printf("%d", num);
else
printf("0"); // 确保邮票数不会是负数
return 0;
}
解释:
int n, x, y, num;:声明整型变量n、x、y和num,其中n是邮票总数,x是每页贴的邮票数,y是总页数,num是剩余邮票数。scanf("%d%d%d", &n, &x, &y);:使用scanf函数从键盘输入三个整数,分别存储到变量n、x和y中。num = n - ceil(y * 1.0 / x);:计算剩余邮票数,其中ceil(y * 1.0 / x)是向上取整得到的需要的邮票数。if (num >= 0):判断剩余邮票数是否大于等于0。- 如果是,则输出剩余邮票数。
- 否则,输出0,确保邮票数不会是负数。