C语言第二次实验报告
题目一:
一. 实验题目,设计思路,实现方法:
实验题目:
11-5 打印杨辉三角
设计思路:本题要求输入N,可以打印出N行杨辉三角。先定义个二维数组,赋值然后要用一个式子表示杨辉三角的概念,使其能够显示出来。
二:源程序:
include<stdio.h>
int main()
{
int i,j,n;
int a[10][10];
scanf("%d",&n);
for(i=0;i<n;i++)
{
a[i][i]=1;
a[i][0]=1;
for(j=1;j<=i-1;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
printf(" ");
}
for(j=0;j<=i;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
return 0;
}
三:遇到的问题及解决方法,心得体会
之前没有想通该怎么去用二维数组表示杨辉三角,不知道该从何下手,也不知道该怎么运用二维数组去实现,后来想到了用for语句实现主对角线的运算。
题目二:
一. 实验题目,设计思路,实现方法:
实验题目:
12-3 字符串逆序
设计思路:本题要求输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。先定义一个字符串,然后取字符串的长度,再定义i,用for循环实现逆序。
二. 源代码
include <stdio.h>
include <string.h>
int main()
{
char str[81];
gets(str);
int str_len;
str_len = strlen(str);
int i;
for(i = str_len-1; i >= 0; i--){
printf("%c", str[i]);
}
return 0;
}
三:遇到的问题及解决方法,心得体会
刚开始想得不够全面,没有考虑到逆序的次数,for循环中取的范围不对,后来经同学指点会了。
题目三:
一. 实验题目,设计思路,实现方法:
实验题目:
13-2利用指针寻找最大值
设计思路:本题要求实现一个计算输入的两数的和与差的简单函数。px和py是用户传入的两个整数的指针。函数findmax是要找到两个指针中存放的最大值。所以定义一个数,用if-else语句先通过判断指针值的大小,再根据定义的m列出式子找最大值。
二. 源代码
void findmax( int *px, int *py, int *pmax )
{
int m;
if(*px>0&&*py>0)
m=*px-*py;
else if(*px<0&&*py<0)
m=*px-*py;
else if(*px>0&&*py<0)
m=*px-*py;
if(*px<0&&*py>0)
*pmax=*py;
if(m>0)
*pmax =*px;
else
*pmax=*py;
}
三:遇到的问题及解决方法,心得体会
没能够很好的找准关系去处理找最大值问题,后来通过if-else语句展开思路。
题目四:
一. 实验题目,设计思路,实现方法:
实验题目:
14-5 指定位置输出字符串
设计思路:本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。通过指针的运用,实现达到指针地址的目的,这样就有了指定的位置,也对应了字符串。
二. 源代码
char *match( char *s, char ch1, char ch2 )
{
int i,j,k,b;
b=strlen(s);
char *a;
a=s;
for(i=0;i<=b;i++)
{
if(a[i]==ch1) break;
}
if(i==b)
{
if(a[i]==ch1)
{
printf("%s",a+i);
return &a[i];
}
else
{
printf("\n");
return 0;
}
}
if(i<b)
{
for(j=i+1;j<=b;j++)
{
if(a[j]==ch2) break;
}
for(k=i;k<=j;k++)
{
printf("%c",a[k]);
}
printf("\n");
}
return &a[i];
}
三:遇到的问题及解决方法,心得体会
应该好好掌握指针这一部分的运用,通过更多的练习和看更多的代码去弄懂。
题目五:
一. 实验题目,设计思路,实现方法
实验题目:
15-7 递归求Fabonacci数列
设计思路:本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:f(n)=f(n−2)+f(n−1) (n≥2),其中f(0)=0,f(1)=1。用函数实现递归思想求出数列。
二. 源代码
int f( int n )
{
int result;
if(n == 0)
result = 0;
else if(n == 1)
result = 1;
else
result = f(n - 2) + f(n - 1);
return result;
}
三:遇到的问题及解决方法,心得体会
不太理解递归的运用及其解决方法。