第三次作业

6-1输出月份英文名#

主要描述题目算法##

第一步:定义指针数组*month[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}
第二步:利用if判断变量n是否满足n>0并且n<=12
第三步:如果是返回month [n-1],如果不是返回NULL

流程图##

实验代码##

char *getmonth( int n )
{
   char *month[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
    if(n>0&&n<=12)
    {
	return month [n-1];}
	else
	return NULL; 
} 

错误信息##

错误原因:部分正确 , 0是答案错误
改正方法:将n的条件改为n>o

6-2查找星期#

主要描述题目算法##

第一步:定义指针数组*day[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
第二步:定义循环变量i、n,将n赋初值--1
第三步:利用for循环,循环判断strcmp(s,day[i]) 是否等于0,如果是将i赋给n,不是继续循环
第四步:返回n。

流程图##

实验代码##

int getindex( char *s )
{
	 char *day[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
	int n=-1;
	int i=0;
    for(i=0; i<7; i++)
    {
        if( strcmp(s,day[i]) == 0 )
        n=i;
       

    }
    return n;  
}

错误信息##

错误原因:答案错误 n没有赋初值
改正方法:将n赋初值为-1

6-3 计算最长的字符串长度#

主要描述题目算法##

第一步:定义循环变量i,定义max和t并赋初值0
第二步: 令max等于数组中的一个元素
第三步:利用for循环,将数组中最大的元素赋值给max
第四步:返回max

流程图##

实验代码##

	int max_len( char *s[], int n )
{
  int i,max=0,t=0;
  max=strlen(s[i]);
  for(i=1;i<n;i++)
  {
     t=strlen(s[i]);
     if(max<t)
     max=t;
  }
  return max;
} 

错误信息##

错误原因:部分错误

改正方法:将max赋初值0

6-4 指定位置输出字符串#

主要描述题目算法##

第一步:定义ij,k和len并且给他们赋初值0
第二步:定义指针数组*p=NULL
第三步:利用for循环遍历数组并且判断s[i] 、s[j]与ch1、ch2关系并交换
第四步: 返回 p

流程图##

实验代码##

char *match( char *s, char ch1, char ch2 ){  
  
    int i=0,j=0,k=0,len=0;  
    char *p=NULL;  
  
 
  
    for(i=0;i<len;i++){  
        if(s[i]==ch1){  
            p=&s[i];  
            for(j=i;j<len;j++){  
                if(s[j]!=ch2){  
                    printf("%c", s[j]);  
                }  
                if(s[j]==ch2){  
                    printf("%c\n", s[j]);  
                    return p;  
                }     
            }  
            printf("\n");  
            return p;  
        }  
    }  
    printf("\n");  
    return p;  
}  

错误信息##

错误原因:段错误
改正方法:将各个变量赋初值

编程题#

有一个axb的数组,该数组里面顺序存放了从1到a*b的数字。其中a是你大学号的前三位数字,b是你大学号的后四位数字,比如你的学号是2017023936,那么数组大小是201 x 3936,数组中顺序存放了1到791136(201和3936的积)的整数. 要求用筛选法,把该数组里的质数找出并打印出来,打印格式为5个质数一行,数字间用空格隔开。

筛选法具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。

主要描述题目算法##

第一步:定义i,j,x,n.定义数组axb[]
第二步:利用3个for循环 来实现题目的要求
第三步:第一个for遍历数组,第二个第三个来求质数并输出

流程图##

实验代码##

#include <stdio.h>
#include <math.h>
int main ()
{
    int n=0,i=0,j=0,x=0;
    n = 201*990;
    int axb[n];

    for(i=1;i<n;i++)
    {
        axb[i-1] = i;
    }
    for(i=1;i<=n;i++)
    {
        for(j=2;j<=sqrt(i);j++)
        {
            if(i%j==0){
                axb[i-1]=1;
            }
        }
    }
    for(i=0,x=0;i<n;i++)
    {
        if(axb[i]!=1){
            printf("%d ",axb[i]);
            x++;
            if(x%5 == 0){
            printf("\n");
            }
        }
    }
    return 0;
}

错误信息##

错误原因:答案错误
改正方法:将j赋值2

学习总结和进度#

1、总结两周里所学的知识点,回答下列问题?(用自己的话表达出你的理解,网上复制粘贴没有分数)(5分)

 (1)如何理解指针数组,它与指针、数组有何关系?为何可以用二级指针对指针数组进行操作?

 (2)将C高级第三次PTA作业(1)任何一个题目改为使用二级指针对指针数组进行操作。

 (3)用指针数组处理多个字符串有何优势?可以直接输入多个字符串给未初始化的指针数组吗?为什么?##

(1)指针数组能更方便的达到我们的要求。因为指针数组可以被指向地址。
(3)可以减少运算时间和内存占用。可以。

我的GIT##

[地址]https://coding.net/u/baisongtao/p/baisongtao/git/tree/master/?public=true

我的评论##

[曹佰强]http://www.cnblogs.com/caobaiqiang/p/8810067.html

记录表##

posted on 2018-04-15 17:08  白松涛  阅读(232)  评论(2编辑  收藏  举报

导航