代码改变世界

C语言第二次实验报告

2018-01-25 11:10  黑鹰1096  阅读(1420)  评论(0编辑  收藏  举报

一、实验题目、设计思路、实现方法

    1.实验题目

     11-4 判断上三角矩阵

     12-2 统计字符出现次数

     13-3 在数组中查找指定元素

     14-7 找最小的字符串

      15-10 找最长的字符串

    2.实验设计思路,实现方法

    11-4:上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。本题要求编写程序,判断一个给定的方阵是 否上三角矩阵。

    12-2:本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。

    13-3:本题要求实现一个在数组中查找指定元素的简单函数。

函数接口定义:

int search( int list[], int n, int x );

其中list[]是用户传入的数组;n0)是list[]中元素的个数;x是待查找的元素。如果找到

则函数search返回相应元素的最小下标(下标从0开始),否则返回1。

    14-7:本题要求编写程序,针对输入的N个字符串,输出其中最小的字符串。

    15-10:本题要求编写程序,针对输入的N个字符串,输出其中最长的字符串。

二,源程序

   11-4 判断上三角矩阵:

 #include<stdio.h>
int main()
{
 int t,j,n,k,i;
 scanf("%d",&t);
 int b[10]={0};
 for(k=0;k<t;k++){
   scanf("%d",&n);
   int a[n][n];
   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<i;j++)
  {
   if(a[i][j]!=0)
   b[k]=1;
  }
   } 
 }for(i=0;i<t;i++){
  if(b[i]!=1)
  printf("YES\n");
  else
  printf("NO\n");
 }
 return 0;
}

12-2 统计字符出现次数:

#include <stdio.h>
#include<stdio.h>
int main()
{
 int b,s=0,i=0;
 char a,x[80];
 scanf("%s",&x);
 while((x[i]=getchar())!='\n')
 i++;
 scanf("%c",&a);
 x[i]='\0';
 for(i=0;x[i]!='\0';i++)
 if(x[i]>='A'&&x[i]<='Z'||x[i]>='a'&&x[i]<='z')
 {
  s=b;
  s*=i;
 }
 printf("%d\n",s);
 return 0;
 
}

13-3 在数组中查找指定元素:

#include <stdio.h>
#define MAXN 10

int search( int list[], int n, int x );

int main()
{
    int i, index, n, x;
    int a[MAXN];

    scanf("%d", &n);
    for( i = 0; i < n; i++ )
        scanf("%d", &a[i]);
    scanf("%d", &x);
    index = search( a, n, x );
    if( index != -1 )
        printf("index = %d\n", index);
    else
        printf("Not found\n");

    return 0;
}
int search( int list[], int n, int x )
{
  int i;
  for(i=0;i<n;i++)
  {
    if(list[i]==x)
    return i;
  }
  return -1;
}

14-7 找最小的字符串:

#include<stdio.h>
#include<string.h>
int main()
{
  int N,i,a;
  char str[1000][1000];
  char *c;
  scanf("%d\n",&N); 
  for(i=0;i<N;i++)
  gets(str[i]);
  c=str[0];
  for(i=1;i<N;i++){
    if(strcmp(c,str[i])>0)
      c=str[i];
  }
  printf("Min is: %s",c);
  return 0;
}

15-10 找最长的字符串:

#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;
}

三.遇到的问题及解决方法,心得体会

问题:编译错误,部分正确,段错误,答案错误。

解决的方法:如出现编译错误时,用DEV软件来进行辩解差不多都是不是单词写错就是多加或少加符号。一般情况下DEV可以全部的编译错误都能查得到。部分正确是这道编译题需要几种功能,可你只满足了其中的一些。所以得要写其他的几种功能的代码,从而就得到正确的答案。答案错误是虽可以运行,但是得不到正确的答案。其原因可能是由于你所写的一些数字或一语句用的不准确而所得到的。只要能够把其中的一些错误的语句或数字找到之后把错误的调整过来就ok了。段错误不知道这个最难找的一个,到现在我几乎没有找对过一次。

心得体会:从一开始的瞎写到现在稍微会写那么一点,在这一学期收获还不错。C语言就稍微懂了那么一点点,最起码最近还没出现过编译错误这一句。现在简单的代码还可以打得出来打的时候也没那么麻烦,思路也比较清晰,但是一旦遇到稍微难一点就开始要蒙了什么都不会。从指针开始就蒙了更不用说文件了。