c语言第二次实验报告
一.实验题目,设计思路,实现方法
题目一:11-4 判断上三角矩阵
编写一个程序,判断一个矩阵是不是上三角矩阵。
问题:循环条件设置不当,导致错误的重复判断,最终导致结果错误。
题目二:12-8 删除重复字符
编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。
问题:重复字符该如何删除
题目三:14-6 通讯录的录入与显示
通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。 本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。
问题:如何简单地录入与显示一条记录。
解决方法:运用结构数组。
题目四:14-5 指定位置输出字符串
本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。
问题:测试点二(ch1找不到, ch2找到)一直通不过。
题目五:15-3 函数实现字符串逆序
本题要求实现一个字符串逆序的简单函数。函数f
对p
指向的字符串进行逆序操作。要求函数f
中不能定义任何数组,不能调用任何字符串处理函数。
问题:本题要求使用指针实现要求,对于指针的不熟悉造成了很多错误。
二、部分源程序
题目一:
for(i=0;i<n;i++){ for(j=0;j<n;j++) scanf("%d",&a[i][j]); } for(i=1;i<n;i++){ for(j=0;j<n;j++){ if(i>j){ if(a[i][j]==0) f=1; else f=0; } } }
题目二:
for(i=0;i<len;i++){ for(j=i+1;j<len;j++){ if(a[i]>a[j]){ t=a[i]; a[i]=a[j]; a[j]=t; } } } b[0]=a[0]; j=0; for(i=1;i<len;i++){ if(b[j]==a[i]) continue; else{ j++; b[j]=a[i]; } }
题目三:
struct message{ char name[11]; char birth[11]; char gender; char phone[17]; char mobile[17]; }; int main() { int i,n; struct message a[10]; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%s %s %c %s %s\n ",&a[i].name,&a[i].birth,&a[i].gender,&a[i].phone,&a[i].mobile); } int k,t; scanf("%d",&k); for(i=0;i<k;i++){ scanf("%d",&t); if(t>=n||t<0) printf("Not Found\n"); else printf("%s %s %s %c %s\n",a[t].name,a[t].phone,a[t].mobile,a[i].gender,a[t].birth); }
题目四:
char *match( char *s, char ch1, char ch2 ) { int i=0,j=0,len=0; char *p=NULL; len=strlen(s); for(i=0;i<len;i++){ if(s[i]==ch1){ p=&s[i]; for(j=i;j<len;j++){ if(s[j]!=ch2){ printf("%c",s[j]); } else{ printf("%c\n", s[j]); return p; } } } } printf("\n"); return p; }
题目五:
#include<string.h> void f( char *p ) { int len,i,j=0; char c[MAXS]; len=strlen(p); for(i=len-1;i>=0;i--){ c[j]=p[i]; j++; } for(i=0;i<len;i++){ p[i]=c[i]; } }
三、心得体会
1.指针运用时要特别注意,不能返回在自定义函数内定义的地址。
2.要好好运用各种字符串处理函数!!
3.数组下标一定要注意不要越界!!
4.代码一定要多打!!