C语言第二次实验报告

时间:2021-03-13 01:42:20

一.实验题目,设计思路,实现方法
11-8 螺旋方阵 所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。

12-8 删除重复字符本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。      

13-6 数组循环右移本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(0)个位置。

14-6 通讯录的录入与显示通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。 本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。

0​​a1​​an1​​)变换为(anm​​an1​​a0​​a1​​anm1​​)(最后m个数循环移至最前面的m个15-8 十进制转换二进制要求实现一个函数,将正整数n转换为二进制后输出。                                                                                                                                                                                                                                                                                                                                                                                                                              

二 设计思路:                                                                                                                                                                                                                                                                                                                                                               

11-8 螺旋方阵 所谓“螺旋方阵”:
实现方法这 :这一题最关键的是数字在数组中存放的位置,用到for循环来控制数字的位置,通过for循环的连用来控制数字出现的位置。
12-8 删除重复字符本:
实现方法:先对输入的字符进行排序,让后将排好序的字符进行比较相同的字符只取一放入新的数组中,从而达到字符删除的目的。

13-6 数组循环右移:

实现方法:利用三层for循环来控制,最外层循环来控制循环往后移动的位数,第二层循环控制每位的移动,最内层循环用来控制循环后新数组最开始那位是多少。

14-6 通讯录的录入与显示

实现方法:利用结构体实现通讯录里面信息的存储,再利用for循环对信息进行输入,定义数组控制编号。

15-8 十进制转换二进制:

利用递归的方法解决,如果数字为1或者0,直接输出该数字,如果数字不是这两个数字则继续调用该函数。


三.源程序
11-8 螺旋方阵
 for(i=0;i<(n+1)/2;i++)
 {
  for(j=i;j<(n-i);j++)
      a[i][j]=s++;
  for(j=i+1;j<(n-i);j++)
      a[j][n-i-1]=s++;
  for(j=n-i-2;j>=i;j--)
      a[n-i-1][j]=s++;
  for(j=n-i-2;j>=(i+1);j--)
      a[j][i]=s++;
 }
12-8 删除重复字符
 for(j=0;j<c;j++){
  min=j;
  for(i=j+1;i<c;i++)
  if(str[min]>str[i])
  min=i;
  t=str[min];
  str[min]=str[j];
  str[j]=t;
 }
 /*以上是用于对字符串的排序,根据ascii码的大小进行调整*/
 for(i=0;i<c;i++){
  for(j=i;j<c;j++){
      if(((' '<=str[j]&&str[j]<='~'))&&(str[j]==str[i])){
       str_pr[k]=str[j];
    for(int x=0;x<c;x++){
     if(str_pr[k]==str[x]){
      str[x]=0;
     }
    }
    k++;
   }
  }
 }
    /*去除排好字符组中的重复字符,并带入新的str_pr字符组*/
 for(i=0;i<k;i++){
  printf("%c",str_pr[i]);
 }
13-6 数组循环右移
    for(i=0;i<m;i++) //移动次数
    {
        temp=a[n-1];   //保存最后一位数
        for(k=n-1;k>=0;k--)    
        {      
            a[k]=a[k-1];    //向后移动
            if(k==0)
            {
                a[k]=temp;
            }
        }
    }

14-6 通讯录的录入与显示

struct friends
{
 char name[20];
 char birthday[20];
 char sex[20];
 char tel[20];
 char sel[20];
}f[10];
int main()
{
 int n,k,i,a[20];
 scanf("%d",&n);
 for(i=0;i<n;i++)
     scanf("%s %s %s %s %s",f[i].name,f[i].birthday,f[i].sex,f[i].tel,f[i].sel);
 scanf("%d",&k);
 for(i=0;i<k;i++)
     scanf("%d",&a[i]);
 for(i=0;i<k;i++)
 {
  if(a[i]>=0&&a[i]<n)
      printf("%s %s %s %s %s\n",f[a[i]].name,f[a[i]].tel,f[a[i]].sel,f[a[i]].sex,f[a[i]].birthday);
  else
      printf("Not Found\n");
 }
 return 0;
}

15-8 十进制转换二进制

void dectobin( int n )
{
  int t;
  if(n==0||n==1)
  printf("%d",n%2);
  else
  {
    t=n;
    dectobin(n=n/2);
    printf("%d",t%2);
  }
}



四.遇到的问题及解决方法,心得体会
对for循环的使用还是有些生硬,多级for循环的使用就不太会,对结构体的定义使用还有一些模糊,,感觉对知识的熟练程度还不够。