根据提供的文件信息,我们可以从中提炼出以下几个主要的知识点: ### 1. C语言中的函数指针与函数调用 在给定的代码片段中,可以看到一个函数指针`pFunc`被用来调用不同的函数(`sum`和`swap`)。这种通过函数指针来动态选择调用哪个函数的方法,在C语言编程中非常实用。 #### 函数指针定义 - `int (*pFunc)(int, int);` 这行代码定义了一个指向接受两个整数参数并返回整数类型的函数的指针。 - 在实际使用中,可以将该指针指向具体的函数,如: ```c pFunc = sum; ``` 或者: ```c pFunc = swap; ``` #### 函数调用 - 使用函数指针调用函数可以通过以下几种方式: ```c pFunc(a, b); // 或 (*pFunc)(a, b); // 或 (pFunc->)(a, b); // 注意这种方式在标准C中是非法的,但在某些编译器下可能被支持。 ``` ### 2. 数值交换的实现方法 给定的代码中还包含了一个用于交换两个整数值的函数`swap`。 #### 函数实现 ```c int swap(int a, int b) { cout << "before swap()" << endl; cout << "a=" << a << '\t' << "b=" << b << endl; a = a + b; b = a - b; a = a - b; cout << "after swap()" << endl; cout << "a=" << a << '\t' << "b=" << b << endl; return 0; } ``` 在这个实现中,通过简单的数学运算完成了数值的交换,而没有使用额外的变量。这种方法避免了使用临时变量的空间开销。 ### 3. 字符串比较 虽然这部分代码使用了C++语法,但是核心逻辑仍然可以适用于C语言环境。这里涉及到了字符串的输入、比较以及输出。 #### 字符串的输入 ```c char s1[100], s2[100]; int i = 0, j = 0; printf("s1:"); do { scanf("%c", &s1[i]); } while (s1[i++] != '\n'); s1[i] = '\0'; printf("s2:"); do { scanf("%c", &s2[j]); } while (s2[j++] != '\n'); s2[j] = '\0'; ``` 这段代码使用了`do-while`循环来逐字符读取用户输入,并将每个字符存入相应的字符数组中,直到遇到换行符`\n`才结束。 #### 字符串的比较 ```c i = -1; j = -1; do { i++; j++; if (s1[i] > s2[j] || (s1[i] != '\0' && s2[j] == '\0')) { printf("-1"); break; } else if (s1[i] < s2[j] || (s1[j] != '\0' && s1[i] == '\0')) { printf("1"); break; } else if (s1[i] == '\0' && s2[j] == '\0') printf("0"); } while (s1[i] != '\0' && s2[j] != '\0'); ``` 这里的比较逻辑基于逐字符比较的方式,如果第一个字符串比第二个字符串长或大,则输出-1;如果第一个字符串比第二个字符串短或小,则输出1;若两个字符串相等则输出0。 ### 4. 数组排序示例 此部分代码展示了如何对一个整型数组进行简单排序。 #### 数组排序 ```c int f[10], max, min, a; for (i = 0; i < 10; i++) scanf("%d", &f[i]); a = 0; max = f[0]; for (j = 1; j < 10; j++) if (f[j] > max) { max = f[j]; a = j; } k = f[9]; f[9] = f[a]; f[a] = k; printf("顺序:\n"); for (k = 0; k < 10; k++) printf("%d", f[k]); if (k == 9) printf("\n最大值=%d", f[k]); ``` 该段代码首先通过用户输入填充数组,然后找到数组中的最大值及其索引位置,接着将最大值与最后一个元素进行交换,从而实现了简单排序。 ### 5. 数字月份转换 这个示例展示了如何根据数字计算其对应的月份名称。 #### 数字到月份的转换 ```c int n; cout << "请输入一个3位数:" << endl; cin >> n; if (f(n) >= 1 && f(n) <= 12) { switch (f(n)) { case 1: cout << "January" << endl; break; case 2: cout << "February" << endl; break; case 3: cout << "March" << endl; break; case 4: cout << "April" << endl; break; case 5: cout << "May" << endl; break; case 6: cout << "June" << endl; break; case 7: cout << "July" << endl; break; case 8: cout << "August" << endl; break; case 9: cout << "September" << endl; break; case 10: cout << "October" << endl; break; case 11: cout << "November" << endl; break; case 12: cout << "December" << endl; break; } } else cout << "***" << endl; ``` 这里先定义了一个函数`f`用于计算给定数字各位上的数字之和,然后根据计算结果通过`switch`语句判断对应的月份名称。如果输入数字不在1至12之间,则输出错误信息。 以上是根据给定文件信息整理出的关键知识点。希望这些内容能够帮助您更好地理解相关概念和技术细节。
#include <iostream>
#include <cstdlib>
using std::cout;
using std::endl;
int sum(int a, int b);
int swap(int a, int b);
int main()
{
int a = 10, b = 20;
int (*pFunc)(int, int);
pFunc = sum;
pFunc(a, b);//(*pFunc)(a, b);pFunc->(a, b);
pFunc = swap;
pFunc(a, b);//(*pFunc)(a, b);pFunc->(a, b);
system("PAUSE");
return 0;
}
int sum(int a, int b)
{
cout<<"a + b = "<<a+b<<endl;
return a + b;
}
int swap(int a, int b)
{
cout<<"before swap()"<<endl;
cout<<"a = "<<a<<'\t'<<"b = "<<b<<endl;
a = a + b;
b = a - b;
a = a - b;
cout<<"a = "<<a<<'\t'<<"b = "<<b<<endl;
return 0;
}
比较两个字符串大小
#include <stdio.h>
#include <math.h>
main()
{
char s1[100],s2[100];
int i=0,j=0;
printf("s1:");
do
{
scanf("%c",&s1[i]);
}while(s1[i++]!='\n');
s1[i]='\0';
剩余6页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 这个东西类似于Google的GRPC,但是应用场景是单片机
- labview yolov5实例分割onnxruntime推理,封装dll, labview调用dll,支持同时加载多个模型并
- git-笔记啊啊啊啊啊啊啊啊啊
- 基于SpringBoot+Vue前后端分离的校园二手交易平台源码+数据库-java毕业设计
- Screenshot_2024-10-10-16-59-35-716_com.tencent.mm.jpg
- git李立超啊啊啊啊啊啊
- PAS 7060-2021电动汽车电池的安全环保设计和使用(英).pdf
- MATLAB环境下双树复小波基础及在轴承故障诊断中的应用 程序运行环境为MATLAB R2021B,主要演示双树复小波基础及在轴
- 制动能量回收Simulink模型 四驱制动能量回收simulink模型 四驱电动汽车simulink再生制动模型 MATLAB再
- 基于SpringBoot+Vue校园二手交易平台源码+数据库(毕业设计).zip