C语言550例编程实例说明

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>:包含数学函数头文件,提供sqrtsin等函数。
  • 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函数从键盘输入两个整数,分别存储到变量ab中。&是取地址运算符,用于获取变量的内存地址。
  • printf("%d+%d=%d", a, b, a + b);:计算ab的和并输出。

实例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;:定义整型变量xint类型的最大值(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;:声明无符号整型变量sn
  • 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;:声明整型变量abcd,并初始化ab为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;:声明整型变量ab(输入的两个整数)和t(临时变量,用于交换)。
  • 交换过程:
    1. t = a;:将a的值存放到临时变量t中。
    2. a = b;:将b的值存放到a中。
    3. 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;:声明双精度浮点型变量xy
  • scanf("%lf %lf", &x, &y);:使用scanf函数从键盘输入两个双精度浮点数,分别存储到变量xy中。
  • 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(自变量)、abcd(系数)和f(多项式的值)。
  • scanf("%lf%lf%lf%lf%lf", &x, &a, &b, &c, &d);:使用scanf函数从键盘输入五个双精度浮点数,分别存储到变量xabcd中。
  • 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函数从键盘输入一个大写字母和一个整数,分别存储到变量chn中。
  • (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;:声明整型变量ab
  • 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);:输出变量ab的值。

实例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;:声明整型变量nxy
  • scanf("%d%d%d", &n, &x, &y);:使用scanf函数从键盘输入三个整数,分别存储到变量nxy中。
  • 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;:声明整型变量abc,并分别初始化为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;:声明整型变量abc,用于存储输入的三个整数。
  • int maxV, minV;:声明整型变量maxV(最大值)和minV(最小值)。
  • scanf("%d %d %d", &a, &b, &c);:使用scanf函数从键盘输入三个整数,分别存储到变量abc中。
  • 初始化:
    • maxV = a;:先假设a是最大值。
    • minV = a;:先假设a是最小值。
  • 求最大值:
    • if (b > maxV) maxV = b;:如果b大于当前最大值maxV,则更新maxVb
    • if (c > maxV) maxV = c;:如果c大于当前最大值maxV,则更新maxVc
  • 求最小值:
    • if (b < minV) minV = b;:如果b小于当前最小值minV,则更新minVb
    • if (c < minV) minV = c;:如果c小于当前最小值minV,则更新minVc
  • 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;:声明整型变量ab,用于存储输入的两个整数。
  • scanf("%d %d", &a, &b);:使用scanf函数从键盘输入两个整数,分别存储到变量ab中。
  • if (a < b):判断a是否小于b
  • 如果a < b,则按ab的顺序输出。
  • 否则,按ba的顺序输出。

实例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;:声明整型变量nxynum,其中n是邮票总数,x是每页贴的邮票数,y是总页数,num是剩余邮票数。
  • scanf("%d%d%d", &n, &x, &y);:使用scanf函数从键盘输入三个整数,分别存储到变量nxy中。
  • num = n - ceil(y * 1.0 / x);:计算剩余邮票数,其中ceil(y * 1.0 / x)是向上取整得到的需要的邮票数。
  • if (num >= 0):判断剩余邮票数是否大于等于0。
  • 如果是,则输出剩余邮票数。
  • 否则,输出0,确保邮票数不会是负数。
相关推荐
Desirediscipline1 小时前
#define _CRT_SECURE_NO_WARNINGS 1
开发语言·数据结构·c++·算法·c#·github·visual studio
小O的算法实验室2 小时前
2026年SEVC SCI2区,面向无人机路径规划的领域专用算子进化算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
weixin_477271692 小时前
同人象:(两军停战谈判结盟的现场直播)马王堆帛书《周易》原文及甲骨文还原周朝生活现象《函谷门
算法·图搜索算法
nudt_qxx2 小时前
CUDA编程模型与硬件执行层级对应关系
linux·人工智能·算法
m0_531237172 小时前
C语言-分支与循环语句练习2
c语言·开发语言·算法
AIpanda8882 小时前
什么是AI销冠系统和AI提效软件系统?主要区别和应用场景是什么?
算法
程序员酥皮蛋3 小时前
hot 100 第三十三 33.排序链表
数据结构·算法·链表
蚊子码农3 小时前
算法题解记录-2452距离字典两次编辑以内的单词
开发语言·算法·c#
重生之后端学习3 小时前
207. 课程表
java·数据结构·算法·职场和发展·深度优先