函数题目T1199

计算下列表达式值:

#include<stdio.h>
#include<math.h>
int main()
{
double n,x,i,sum;
scanf("%lf %lf",&x,&n);
sum=sqrt(1+x);
for(i=n-2;i>=0;i–)
{
sum=sqrt((n-i)+sum);
}
printf("%.2lf\n",sum);
return 0;
}

### 函数指针在C/C++中的应用 函数指针是一种特殊的指针类型,它指向的是函数而不是变量。通过使用函数指针,可以动态调用不同的函数,从而实现更灵活的程序设计[^1]。 下面是一个简单的例子来展示如何定义和使用函数指针: ```cpp #include <iostream> using namespace std; // 定义两个简单函数 void funcA() { cout << "Function A called." << endl; } void funcB() { cout << "Function B called." << endl; } int main() { // 声明一个指向返回为void且无参数的函数的指针 void (*funcPtr)(); // 将funcPtr指向funcA funcPtr = funcA; funcPtr(); // 调用funcA // 改变funcPtr指向funcB funcPtr = funcB; funcPtr(); // 调用funcB return 0; } ``` 上述代码展示了如何声明、初始化并使用函数指针。这种技术常用于回调函数或者模拟面向对象编程中的多态行为[^2]。 #### 使用函数指针对数组排序 这里提供了一个基于函数指针的练习题:给定一组整数及其对应的比较逻辑(升序或降序),利用函数指针完成排序操作。 ```cpp #include <iostream> using namespace std; bool ascending(int a, int b) { return a < b; } bool descending(int a, int b) { return a > b; } template<typename CompareFunc> void sortArray(int *arr, size_t n, CompareFunc cmp) { for (size_t i = 0; i < n - 1; ++i) { for (size_t j = 0; j < n - i - 1; ++j) { if (!cmp(arr[j], arr[j + 1])) { swap(arr[j], arr[j + 1]); } } } } int main() { int data[] = {5, 3, 8, 6}; size_t length = sizeof(data)/sizeof(*data); // 升序排列 sortArray(data, length, ascending); for(auto num : data){ cout<<num<<" "; } cout<<endl; // 降序排列 sortArray(data, length, descending); for(auto num : data){ cout<<num<<" "; } return 0; } ``` 此示例说明了如何借助模板与函数指针创建通用的排序算法[^3]。 #### 中文字符串逆置扩展版 对于包含中文字符的情况,由于UTF-8编码下每个汉字可能占用多个字节,因此需特别注意处理方式。以下是改进版本,支持任意长度的Unicode字符串反转[^4]。 ```cpp #include <iostream> #include <algorithm> using namespace std; string reverseString(const string& inputStr){ wstring_convert<codecvt_utf8<wchar_t>, wchar_t> converter; wstring wideStr = converter.from_bytes(inputStr); wreverse(wideStr.begin(), wideStr.end()); return converter.to_bytes(wideStr); } int main(){ string original="我是小萌新"; string reversed=reverseString(original); cout<<reversed<<endl; return 0; } ``` 以上内容涵盖了基础概念介绍以及实际应用场景下的实例分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值