C语言函数题模板 c语言函数填空题

在c语言中如何实现函数模板各种用 C 语言实现C语言函数题模板的模板可能在使用形式上有所不同 。现以一个求和函数 Sum 为例C语言函数题模板,用 CTemplate 可写如下:
template R Sum(const T *array, int n)
{
R sum = 0;
for (int i = 0 ; in ;i)
sum= i;
return sum;
}
如果不是内置类型C语言函数题模板,该模板隐式地需要 有R R::operator =(T)运算符可用 。
1. 使用函数指针作为 Functor 替换者
Typedef struct tagAddClass
{
Void (*add)(char* r1, const char* r2);
Int elemSize;
Char sum[MAX_ELEM_SIZE];
} AddClass;
void Sum(AddClass* self, const char* array, int n)
{
for (int i = 0 ; in ;i)
self-add(self-sum, arrayi*self-elemSize);
}
使用时:
Void AddInt(char* r1, const char* r2) {
*(long*)r1= *(int*)r2; }
AddClass addClass = {AddInt, 2, 0 };
Int array[100];
【C语言函数题模板 c语言函数填空题】Read(array);
Sum(addClass, array, 100); …..
2. 用宏作为Functor的替换者
#define GenSumFun(SumFunName, Add, RetType, ElemType)
RetType SumFunName (const ElemType *array, int n) \
{
RetType sum = 0;
for (int i = 0 ; in ;i)
Add(sum, i);
return sum; }
使用时:
#define AddInt(x, y) ((x)= (y))
GenSumFun(SumInt, AddInt, long, int) …..
Int array[100];
Read(array);
Long sum = SumInt(array, 100); …..
3. 所有可替换参数均为宏
至少需要一个额外的文件(实现文件)为 impsum.c
/* impsum.c */
RetType FunName(const ElemType *array, int n)
{
RetType sum = 0;
for (int i = 0 ; in ;i)
Add(sum, i);
return sum; }
使用时:
#undef RetType
#undef FunName
#undef ElemType
#undef Add
#define AddInt(x, y) ((x)= (y))
#define RetType long
#define FunName SumInt
#define ElemType int
#define Add AddInt
#include impsum.c …..
Int array[100];
Read(array);
Long sum = SumInt(array, 100);
4. 总结:
第一种方法 , 易于跟踪调试,但是效率低下 , 适用于对可变函数(函数指针)的效率要求不高,但程序出错的可能性较大(复杂) , 模板函数(Sum)本身很复杂 , 模板参数也比较复杂(add)的场合 。
第二种方法,效率高,但很难跟踪调试,在模板函数和模板参数本身都很复杂的时候更是如此 。
第三种方法 , 是C语言函数题模板我最近几天才想出的,C语言函数题模板我认为是最好的,在模板参数(Add)比较复杂时可以用函数(第二种也可以如此),简单时可以用宏,并且,易于调试 。在模板函数本身很复杂,而模板参数比较简单时更为优越 。但是,可能有点繁琐 。
一个简单的C语言函数题#includestdio.h
#define STUDENT 10
#define CLASS 5
int student_i=0,class_i=0;
main()
{
void average(int course[STUDENT][CLASS], float aver[CLASS]);
void highest(int course[STUDENT][CLASS]);
int course[STUDENT][CLASS] = {{38, 45, 52, 70, 88}, {47, 58, 19, 65, 48},
{80, 19, 64, 5, 47}, {81, 69, 9, 43, 88}, {10, 96, 28, 90, 33},
{4, 88, 22, 43, 32}, {17, 94, 70, 67, 19}, {27, 82, 86, 67, 98},
{34, 4, 92, 15, 84}, {57, 9, 66, 76, 65}};
float aver[CLASS]={0};
average(course, aver);
highest(course);
}
void average(int course[STUDENT][CLASS], float aver[CLASS])
{
int i,j;
for(i=0;iCLASS;i)
for(j=0;jSTUDENT;j)
aver[i] =course[j][i];
printf("每一门课程的平均分:\n");
for(i=0;iCLASS;i)
printf("%5.2f\n",aver[i]/=10);
printf("\n");
}
void highest(int course[STUDENT][CLASS])
{
int i,j;
int highest;
for(i=0;iCLASS;i)
{
highest=course[0][i];
for(j=0;jSTUDENT;j)
if(course[j][i]highest)
{highest=course[j][i];
student_i=j;
class_i=i;}
printf("第%d门课程分数最高的学生及其课程:第%d名学生的第%d门课程分数为%d\n",i 1,student_i 1, class_i 1,highest);
}
}
你看看行不行
C语言函数模板问题首先,C没有函数模版 。C才有 。
其次,template class T是函数声明的一部分,所以下面函数实现应该是:
template class T
void swap(T a,T b){
int temp;
temp=a;
a=b;
b=temp;
}
最后 , #include iostream , 在标准的C函数中,std的域中已经有一个swap函数 。
而且前面也using namespace了 。函数声明重复 。
两个办法:
1 swap(i,j);改为::swap(i,j); //全局化 。
2 swap改个名字 。
四道C语言函数题,谢谢了1.等长字符串交换
#define MAXSIZE 30
#includeiostream.h
void exchange(char *a,char *b)
{
int i=0;
char c[MAXSIZE];
while(a[i]!='\0')
{
c[i]=a[i];
a[i]=b[i];
b[i]=c[i];
i;
}
}
int main()
{
char a[MAXSIZE],b[MAXSIZE];
cout"输入两个等长字符串:"endl;
cinab;
exchange(a,b);
coutaendlbendl;
return 0;
}
C语言函数编程题修改后C语言函数题模板的C语言程序C语言函数题模板:
#include stdio.h
void triangle(int g)
{
int n=1, m;/* 修改处1 */
for(n;n=g; n)
{
for(m=1;m=2*n-1;m) /* 修改处2 */
putchar('*');
putchar('\n');
}
}
void rectangle(int g)
{
int n=1, m;/* 修改处3 */
for(n;n=g;n)
{
for(m=1;m=3;m)/* 修改处4 */
putchar('*');
putchar('\n');
}
}
int main()
{
int i,k;
printf("请输入行数(大于3):");
scanf("%d",i);
printf("请选择图形:1---三角形\t2---矩形\t3---小旗 :");
scanf("%d",k);
if(k==1)
{
triangle(i);
}
if(k==2)
{
rectangle(i);
}
if(k==3)
{
triangle(i);
rectangle(i);
}
return 0;
}
关于C语言函数题模板和c语言函数填空题的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读