c语言 第二次实验报告
一·实验题目,设计思路,实现方法
11-7 找鞍点
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
本题要求编写程序,求一个给定的n阶方阵的鞍点。
利用双重for循环,分别比较各列元素和各行元素即可。
12-4字符串大小写字母转换
本题要求编写程序,对一个以“#”结束的字符串,将其小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其他字符不变输出。
先判断为大写字母还是小写字母,再通过+32或-32来进行转换。
13-2利用指针寻找最大值
本题要求实现一个简单函数,找出两个数中的最大值。
函数接口定义:
void findmax( int *px, int *py, int *pmax );
其中px和px是用户传入的两个整数的指针。函数findmax应找出两个指针所指向的整数中的最大值,存放在pmax指向的位置。
因为利用指针函数不仅是传值,还可以通过所指向地址的变化来传递变量。所以在比较完大小之后还可以进行转换。
14-6通讯录的录入与显示
通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。 本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。
构建包含通讯录信息的结构数组,利用下标查找。
15-7用递归求斐波那契数列
本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:
f(n)=f(n−2)+f(n−1) (n≥2),其中f(0)=0,f(1)=1。
利用递归思想,在函数里调用函数本身来实现复杂的循环计算。
二·源程序
11-7找鞍点
for(i=0; i<n; i++)
{
y=i;
for(p=0; p<n; p++)
{
if(a[i][k]<=a[i][p])
{
k=p;
}
}
for(j=0; j<n; j++)
{
if(a[y][k]>a[j][k])
{
y=j;
break;
}
}
if(i==y)
{
flag=0;
break;
}
12-4字符串大小转换
{
if(str[i]>='a'&&str[i]<='z')
str[i]=str[i]-32;
else if(str[i]>='A'&&str[i]<='Z')
str[i]=str[i]+32;
i++;
}
13-2利用指针寻找最大值
void findmax( int *px, int *py, int *pmax )
{
int a,b,max=0;
if(*px>*py){
*pmax=*px;
}else if(*px<*py){
*pmax=*py;
}
}
14-6通讯录的录入与显示
14-6 通讯录的录入与显示
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct ren{
char name[100];
char sex[100];
char sheng[100];
char shou[100];
char zuo[100];
};
int main(){
struct ren r1[100];
int n,m,i,j,a;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%s",r1[i].name);
scanf("%s",r1[i].sheng);
scanf("%s",r1[i].sex);
scanf("%s",r1[i].zuo);
scanf("%s",r1[i].shou);
}
scanf("%d",&m);
for(j=0;j<m;j++){
scanf("%d",&a);
if(a<=n-1&&a>=0){
printf("%s ",r1[a].name);
printf("%s ",r1[a].zuo);
printf("%s ",r1[a].shou);
printf("%s ",r1[a].sex);
printf("%s\n",r1[a].sheng);
}else{
printf("Not Found\n");
}
}
}
15-7用递归求斐波那契数列
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;
}
三、遇到的问题和解决办法。
一、没有掌握指针的思想。
二、没有透彻理解递归的用法与精髓(类似“雇佣”制)。
三、还不能掌握链表的基本操作。