C语言第二次实验报告

一、思路及方法

11-8 螺旋方阵

设计二维数组,通过对方阵的行和列进行特征分析找出其中规律,利用循环即可将方阵输出。

12-8 删除重复字符

设计思路:

1.定义二个数组,并赋初值为0

2.读取一个字符串

3.判断数组中被填充的位置,填充的是非0值,没填充的是0值

实现方法:

str1中每个字符的assic码作为str2的下标值,并把对应位置填充为1,同一个字符的assci值相同,所以这样就去掉了重复字符。

13-5 判断回文字符串

设计字符型数组,并利用指针来传递输入内容;通过函数来判断是否为回文。

14-5指定位置输出字符串

实验题目:本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。

设计思路:先找到ch1,将其赋值给一个指针,从指针的地址开始,输出知道遇见ch2,停止,返回指针。

15-10 找最长的字符串

设计动态链表,对每项内容分别进行判断和处理。

二、部分源程序

11-8 螺旋方阵

复制代码
  for(i=0;i<m;i++){
    for(j=i;j<n-i;j++){
      a[i][j]=N;
      N++;
    }
    for(j=i+1;j<n-i;j++){
      a[j][n-i-1]=N;
      N++;
    }
    for(j=n-i-2;j>=i;j--){
      a[n-i-1][j]=N;
      N++;
    }
    for(j=n-2-i;j>=i+1;j--){
      a[j][i]=N;
      N++;
    }
  }
  for(i=0;i<n;i++){
    for(j=0;j<n;j++)
    printf("%3d",a[i][j]);
    printf("\n");
  }
复制代码

12-6 删除重复字符

for(i=0;str1[i];i++)
{
str2[str1[i]]=1;//str1中每个字符的assic码作为str2的下标值,并把对应位置填充为1,同一个字符的assci值相同,所以这样就去掉了重复字符
}
for(i=0;i!=256;i++)
if(str2[i]==1)//判断数组中被str1填充的位置,填充的是非0值,没填充的是0值
printf("%c",i);//输出str2的下标值,对应str1中的字符值
putchar('\n');
 

 13-5 判断回文字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
bool palindrome( char *s )
{
  int i=0,n,m;
  n=strlen(s);
  if(n%2==0){
    m=n/2;
    for(i=0;i<=m;i++){
      if(s[i]!=s[n-1-i]){
        return false;
      }
    }
    return true;
  }
  else{
    m=n/2+1;
    for(i=0;i<=m;i++){
      if(s[i]!=s[n-1-i]){
        return false;
      }
    }
    return true;
  }
}

14-6 指定位置输出字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
char *match( char *s, char ch1, char ch2 ){
int i=0;
while(*s!='\0'&&*s!=ch1)
 s++;
char *p=s;
while(*s!='\0'&&*s!=ch2){
printf("%c",*s);
s++;
i++;
}
if(*s==ch2)
printf("%c\n",*s);
else
printf("\n");
return p;
}

15-10 找最长的字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdio.h>
#include<string.h>
int main()
{
  int N,i,j,k;
  char str[10000][100];
  int a,b;
  scanf("%d",&N);
  for(i=0;i<N;i++)
    scanf("%s",str[i]);
  a=strlen(str[0]);
  b=0;
  for(i=1;i<N;i++){
    if(a<strlen(str[i])){
     a=strlen(str[i]);
     b=i;
    }
  }
  printf("The longest is: %s",str[b]);
  return 0;
}

三、心得体会

1.在创建链表时一定要注意对每个链表进行空间的分配,核对链表最后一个的NEXT是否指向NULL。

2.定义嵌套结构时一定要注意能否正确的表示嵌套起来的结构内的部分。

3.审题不清:在15-10 找最长的字符串中误以为找的是最大字符串

4.对数组的界限不清:导致运行结果出现乱码

 
 
 
 
好文要顶 关注我 收藏该文

posted on 2018-01-26 01:36  十号风球  阅读(170)  评论(0编辑  收藏  举报