本文已参与「新人创作礼」活动,一起开启掘金创作之路
笔者觉得任何的理论都比不上亲手实验来的印象深刻,代码看的多了,打的多了,语法和定义也就记得很清楚了,当然笔者也在向这方面一步步努力。接下来给读者带来比较经典的c语言函数的例题,用例题来包含知识点,以点带面。
矩阵转置
题目:
解析:对于方阵的行列互换,根据高等数学的知识,即沿对角线进行元素的互换,知道这个知识后就很好理解和编程了。
#include<stdio.h>
void inv(int a[][3])
{
int i,j;
int temp;
for(i=0;i<3;i++)
{
for(j=i+1;j<3;j++)
{
temp = a[i][j];
a[i][j] = a[j][i];
a[j][i] = temp;
}
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d",a[i][j]);
}
printf("\n");
}
}
int main()
{
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
inv(a);
return 0;
}
最长单词的输出
题目:
解析:显然句子中,每个单词之间由空格隔开,这也是我们记录单词个数和长度的关键。
#include<stdio.h>
#include<string.h>
int main()
{
int alphabetic(char);
int longest(char string[]);
int i;
char line[90];
printf("input one line:\n");
gets(line);
printf("the longest word is :");
for(i=longest(line);alphabetic(line[i]);i++)
{
printf("%c",line[i]);
}
printf("\n");
return 0;
}
int alphabetic(char c)
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
{
return 1;
}
else
{
return 0;
}
}
int longest(char string[])
{
int len=0,i,length=0,flag=1,place=0,point;
for(i=0;i <= strlen(string);i++)
{
if(alphabetic(string[i]))
{
if(flag)
{
point=i;
flag=0;
}
else
{
len++;
}
}
else
{
flag=1;
if(len>=length)
{
length=len;
place=point;
len=0;
}
}
}
return place;
}
递归求n阶勒让德多项式的值
题目:
解析:对于递归,还记得最经典的例子就算汉诺塔问题,哈哈哈(笔者至今还印象深刻)。下面对n阶勒让德多项式值的求解运用的也是递归的思想,即函数本身调用本身,知道输出结果,这也是递归的魅力之处,希望读者能好好体会一下。
#include<stdio.h>
float derland(int n,float x)
{
float f;
if(n==0)
{
f=1;
}
else if(n==1)
{
f=x;
}
else
{
f=((2*n-1)*x-derland(n-1,x)-(n-1)*derland(n-2,x))/n;
}
return f;
}
int main()
{
int n;
float x,result;
printf("input n and x:\n");
scanf("%d%f",&n,&x);
result=derland(n,x);
printf("the result is %f\n",result);
return 0;
}
谢谢大家的悉心阅读,比心。