zoukankan      html  css  js  c++  java
  • C语言第二次实验作业

    题目:计算天数,编写程序计算某年某月某日是该年的第几天(11-3)

    思路:相方法将从一月一日开始加到输入的年月日,计算天数;

    方法:使用数组,把每一个月份的对应天数存储到矩阵中,再通过循环计算出总天数;

    源程序:#include <stdio.h>
                    int main(){
            int a[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
            int y,m,d,k,flag=0;
            scanf("%d/%d/%d",&y,&m,&d);
            if(y%400==0||(y%4==0&&y%100!=0))flag=1;
            for(k=1;k<m;k++)d+=a[flag][k];
            printf("%d",d);
            return 0;
              }

    遇到的问题:写时没想到能用两列分别代表闰年和非闰年,导致未想到用矩阵的方法,异常麻烦

    心得:这种比叫确定的数需要相加的类型题用矩阵或数组好做;

    题目:字符串转换成十进制整数(输入一个以#结束的字符串,先滤去所有的非十六进制字符,组成一个新的十六进制字符串,编写程序将该字符串转换成十进制整数输出;若在第一个十六进制字符前存在字符‘-’,则表示其为负数。(12-5)

    思路:先输入一个字符串,再判断什么时候出现第一个十六进制字符,记住下标,再判断在这个下标之前的位置是否含‘-’,若有,则跳出循环且说明该数是负数,若没有,则是正数。

    方法:定义一个字符数组输入字符串,记录第一个十六进制字符的下标,再利用for循环检查从k=0到k=i-1的字符是否出现‘-’;最后将新字符串转换成数字即好。

    源程序

    #include <stdio.h>
    int main(){
      char a[80],b[80];
      int i=0,d=0,k=0,c;
      long m;
      while((a[i]=getchar())!='#'){                               //输入字符串
        i++;
      }
      for(k=0;k<i;k++){
        if((a[k]<='9'&&a[k]>='0')||(a[k]<='F'&&a[k]>='A')||(a[k]<='f'&&a[k]>='a')){
          c=k;
          k=i;
        }}                                                                    //判断第一个十六进制字符出现的位置
      for(k=0;k<c;k++){
        if(a[k]=='-'){
          printf("-");
          k=c;
        }
      }                                                                       //判断是否为负数
      for(k=0;k<i;k++){
        if((a[k]<='9'&&a[k]>='0')||(a[k]<='F'&&a[k]>='A')||(a[k]<='f'&&a[k]>='a')){
         b[d]=a[k];
         d++;
        }}                                                                     //建立一个新字符串
       for(k=0;k<d;k++){
       if(b[k]<='9'&&b[k]>='0')m=m*16+b[k]-'0';
       else if(b[k]<='F'&&b[k]>='A')m=m*16+b[k]-'A'+10;
       else if(b[k]<='f'&&b[k]>='a')m=m*16+b[k]-'a'+10;
        }                                                                    //将字符串转化为对应的整数
        printf("%ld",m);

      return 0;
    }

    遇到的问题:写程序时未想到直接将负号输出,一直想着保存在数组里,导致出错;

    心得:很多题目也许看着复杂,但静下心来想一下并不会很复杂;

    题目使用函数选择法排序,要求实现一个用选择法对整数数组进行简单排序的函数13-4

    思路使用两个循环,一个循环用以计算循环次数,一个循环用以数组遍历比较;

    方法使用循环嵌套,外循环计数,内循环用以比较出最小的数

    源程序

    #void sort( int a[], int n ){

      int i,min,index,k;

      for(i=0;i<n;i++){

        min=i;

        for(k=i+1;k<n;k++){

          if(a[k]<a[min])min=k;

        }

        index=a[i];

        a[i]=a[min];

        a[min]=index;

      }

    }

    遇到的问题外循环和内循环的下标联系未搞清楚;

    心得C语言题目很锻炼思维,能使思路更清晰

    题目给字符串排序,给输入的五个字符串按从小到大排序14-8

    思路数类似数组元素的选择排序

    方法 调用strcmp函数和strcpy函数

    源程序

    #include<stdio.h>

    #include<string.h>

    int main(void)

    {

        int i,j;

        char a[5][80], t[80];//改大了点,不然字符串太长会超出数组范围

        

        for (i = 0; i < 5; i++)

        {

            scanf("%s",a[i]);

        }

        for (i = 1; i < 5; i++)

        {

            for (j =0; j < 5-i ;j++)

            if (strcmp(a[j], a[j+1]) > 0)

            {

            strcpy(t,a[j]);

            strcpy(a[j], a[j + 1]);

            strcpy(a[j + 1], t);

            }

        }

        printf("After sorted: ");

        for (i = 0; i < 5; i++)

        puts(a[i]);

        return 0;

    }遇到的问题对字符串函数的调用不是很理解;

    心得C语言中有很多函数用了后很方便,我们要学习的有很多

     题目求链式表表长15-4

    思路从表头开始,计算链表中有效节点的个数;

    方法 利用指针

    源程序

     int Length( List L ){

      int len=1;

      if(L==NULL)return 0;

      else {

        while(L->Next!=NULL){

          len++;

          L=L->Next;

        }

        return len;

      }

    }

    遇到的问题define不是很理解,对函数名看不大懂;

    心得学习一门课程要理解性学习;

  • 相关阅读:
    OpenSLAM
    CAD&CG GDC 2018大会论文录用名单
    hdu4328(经典dp用悬线法求最大子矩形)
    hdu3729(二分图)
    hdu 4055(经典问题)
    Codeforces Round #207 (Div. 1) B (gcd的巧妙运用)
    hdu1066(经典题)
    zoj3662(dp)
    zoj3659(经典并查集)
    hdu4565(矩阵快速幂+经典的数学处理)
  • 原文地址:https://www.cnblogs.com/huyaoco/p/8358053.html
Copyright © 2011-2022 走看看