C语言的第二次实验报告

一、思路及方法

11-8 螺旋方阵

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

12-6 字符串转换成十进制整数

设计字符数组,用getchar函数逐个截取,并设定以#为结束符;将每个符合条件的数组元素,利用ASCII码的十进制关系进行变化并输出。

13-5 判断回文字符串

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

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

通过定义结构数组,通过循环输入和输出存储内容。

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 字符串转换成十进制整数

  while((str[i]=getchar())!='#')
  i++;
  for(j=0;j<=i;j++){
    if(str[j]=='-'){
     k=j;
     break;
    }
  } 
 for(j=0;j<=i;j++){
    if((str[j]<='9'&&str[j]>='0')||(str[j]<='F'&&str[j]>='A')||(str[j]<='f'&&str[j]>='a')){
    a=j;
    break;
    }
  }
  b=k;
  k=0;
  for(j=0;str[j]!='\0';j++){
    if((str[j]<='9'&&str[j]>='0')||(str[j]<='F'&&str[j]>='A')||(str[j]<='f'&&str[j]>='a')){
      c[k]=str[j];
      k++;
    }
  }
  c[k]='\0';
  int number=0;
  for(i=0;c[i]!='\0';i++){
    if(c[i]>='0'&&c[i]<='9')
    number=number*16+c[i]-'0';
    else if(c[i]>='a'&&c[i]<='f')
    number=number*16+c[i]-'a'+10;
    else if(c[i]>='A'&&c[i]<='F')
    number=number*16+c[i]-'A'+10;
  }

 13-5 判断回文字符串

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 通讯录的录入与显示

#include<stdio.h>
struct message {
  char name[100];
  char birth[100];
  char sex;
  char number[100],phone[100];
};
int main()
{
  int N,n;
  scanf("%d",&N);
  struct message s[11];
  int i,j,k;
  for(i=0;i<N;i++)
    scanf("%s %s %c %s %s",&s[i].name,&s[i].birth,&s[i].sex,&s[i].number,&s[i].phone);
  
  scanf("%d",&n);
  for(i=0;i<n;i++){
  scanf("%d",&k);
  if(k<N&&k>=0){
    printf("%s %s %s %c %s\n",s[k].name,s[k].number,s[k].phone,s[k].sex,s[k].birth);
  }
  else
  printf("Not Found\n");
  }
  return 0;
}

15-10 建立学生信息链表

void input()
{
int num,score;
char name[20];
struct stud_node *p;
scanf("%d",&num);
while(num){
p=(struct stud_node *)malloc(sizeof(struct stud_node));
scanf("%s %d",name,&score);
p->num=num;
p->score=score;
strcpy(p->name,name);
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
scanf("%d",&num);
}
}

  

三、心得体会

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

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

3.在用利用自定义函数的功能时指针可以避免返回值的书写。

4.灵活运用ASCII码和getchar();注意%c会“吃”空格。

5灵活分析目标要求的特征,可以通过特点进行总结,使函数作用域扩大。

转载于:https://www.cnblogs.com/liu601525221/p/8351887.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值