要求一 、

1)C高级第三次PTA作业(1)

题目6-1

1.设计思路

     (1)主要描述题目算法

         第一步:将月份分别赋值;

         第二步:利用switch语句,输入月份;

         第三步:返回变量的地址值。

      (2)流程图

     

2.实验代码

char *getmonth(int n)
{
switch(n)
{
case 1:return"January";
case 2:return"February";
case 3:return"March";
case 4:return"April";
case 5:return"May";
case 6:return"June";
case 7:return"July";
case 8:return"August";
case 9:return"September";
case 10:return"October";
case 11:return"November";
case 12:return"December";
default:return NULL;
}
}

3.本题调试过程碰到问题及解决办法

 

      错误信息1:

       错误原因:月份英文打错。

题目6-2

1.设计思路

     (1)主要描述题目算法

         第一步:将星期分别赋值给一堆数组指针,赋初值为-1;

         第二步:用strmcp函数比较数组中每行元素与输入的字符串是否相同,相同则等于开始定义的函数;

         第三步:返回变量值。

   2.实验代码

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

3.本题调试过程碰到问题及解决办法

 

      错误信息:

       错误原因:赋初值时,令a=1了,以至于错误。

改正方法:将a=-1。

       

题目6-3

1.设计思路

     (1)主要描述题目算法

         第一步:定义数组,用strlen函数计算每行元素长度;

         第二步:利用for循环和if语句,比较大小,当定义元素长度大于max,交换;

         第三步:返回max的值。

   

2.实验代码

int max_len( char *s[], int n ){
int i,count=0,j,q[20]={0};
for(i=0;i<n;i++){
for(j=0;*(*(s+i)+j)!='\0';j++){
}
q[i]=j;
}
count=q[0];
for(i=0;i<n;i++){
if(q[i]>count){
count=q[i];
}
}
return count;
}

3.本题调试过程碰到问题及解决办法

 

      错误信息:

       错误原因: 应令count=q[0];,但直接写成 count=q[i];使交换进行不了,编译错误。

题目6-4

1.设计思路

     (1)主要描述题目算法

         第一步:定义s字符数组,定义s=ch1时的下表,并赋给一个整型变量;

         第二步:用for循环和if语句,将s[i]赋给指针字符j,爱循环中,若s[i]!=ch2.输出s[i],否则。s[i]加一,换行回到 j;

         第三步:输出换行,返回 j。

   

2.实验代码

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

3.本题调试过程碰到问题及解决办法

 

      错误信息1:

       错误原因:当if((s+i)==ch1)循环时,弄成了if((s+i)ch2)。

       改正方法: if(*(s+i)ch1),并且,应逐次增加j的大小确定ch1到ch2之间的字符。

题目 编程题

1.设计思路

     (1)主要描述题目算法

         第一步:定义a,b组成的数组大小;

         第二步:利用for循环和if语句,慢慢划掉能被2整除的数和3后面所有能被3整除的数。。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数;

 

2.实验代码

#include <stdio.h>
int main ()
{
int a=201,b=3945;
int *p = (int *)malloc((a*b) *sizeof(int));
int *q = (int *)malloc((a*b) *sizeof(int));
int i=0,j;
for(i=0;i<(a*b);i++)
{
p[i] = i+1;
}
for(i=0;i<(a*b);i++)
{
for(j = i+1;j<=(a*b);j++)
{
if((p[i] !=1) && ( p[j] != 1) ){
if(p[j]%p[i] ==0)
{
p[j] = 1;
}
}
}
}
j=0;
for(i=0;i<(a*b);i++)
{
if(p[i] != 1)
{
printf(" %d",p[i]);
j++;
}
if(j == 5)
{
printf("\n");
j=0;
}
}
}

2)C高级第三次PTA作业(2)  

题目6-1

1.设计思路

     (1)主要描述题目算法

         第一步:在readlist函数中,将输入的值存储在链表里,用while循环时条件,在while循环内进行动态分配;

         第二步:在getodd函数中,对链表结点中date的值进行判断,将奇数偶数date分别存储在一个新的链表中;

         第三步:返回链表的头结点。

      (2)流程图

       

2.实验代码

struct ListNode *readlist() {
int number;
struct ListNode *p = NULL,*head = NULL,*tail = NULL;
scanf("%d",&number);
while(number!=-1&&number>0 ) {
p = (struct ListNode*)malloc(sizeof(struct ListNode));
p->data = number;
if(head == NULL) {
head = p;
} else {
tail->next = p;
}
tail = p;
scanf("%d",&number);
}
if(head == NULL) {
return NULL;
}
tail->next = NULL;
return head;
}
struct ListNode *getodd( struct ListNode **L ) {
struct ListNode *p = *L,*head1 = NULL,*r = NULL,*L1 = NULL,*r1 = NULL;
while(p!=NULL&&p->data>0) {
if(p->data%2!=0) {
if(head1 == NULL) {
head1 = p;
} else {
r->next = p;
}
r = p;
} else {
if(L1 ==NULL) {
L1 = p;
} else {
r1->next = p;
}
r1 = p;
}
p = p->next;
}
if(head1==NULL){
return NULL;
} else {
r->next = NULL;
}
if(L1==NULL) {
*L = NULL;
} else {
r1->next = NULL;
*L = L1;
}
return head1;
}

3.本题调试过程碰到问题及解决办法

 

      错误信息1:

       错误原因: r1->next = p,时直接用了 r->next = p;

       

题目6-2

1.设计思路

     (1)主要描述题目算法

         第一步:在createlist函数中将输入的学号,姓名和分数存储到链表中,用while循环,返回链表的头结点;

         第二步:在deletelist函数中定义链表的结点,若结点中的分数小于规定的值,释放此结点的内存;

         第三部:返回主函数。

      (2)流程图(4分)

2.实验代码

struct stud_node *createlist() {
int num,score;
char name[20];
struct stud_node *p,*head=NULL,*tail=NULL;
p = (struct stud_node*)malloc(sizeof(struct stud_node));
scanf("%d",&num); while (num != 0)
{
p = (struct stud_node *)malloc (sizeof (struct stud_node));
scanf ("%s %d", p->name, &p->score);
p->num = num; if (head == NULL)
head = p;
else
tail->next = p;
tail = p;
scanf ("%d", &num);
}
return head;
}
struct stud_node *deletelist( struct stud_node *head, int min_score ) {
struct stud_node *L=head,*head1=NULL,*tail1=NULL;
while(L!=NULL) {
if(L->score>=min_score)
{
if(head1==NULL) {
head1 = L;
} else {
tail1->next = L;
}
tail1 = L;
} else {
free(L);
}
L=L->next;
}
if(head1==NULL) {
return NULL;
} else {
tail1->next =NULL;
}
return head1;
}

3.本题调试过程碰到问题及解决办法

 

      错误信息:

       错误原因:while (num != 0),忽略了学号不能等于0的情况,因当学号为0时不需要输入姓名及分数,代表结束。

       

题目6-3

1.设计思路

     (1)主要描述题目算法

         第一步:在ListNode *list1中储存字符的内存大小;

         第二步:ListNode *list2中储存字符的内存大小;

         第三步:用for循环和if语句交换,用ListNode函数合并两个列表。

第四步:返回。

 

2.实验代码

struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2) {
struct ListNode *p1=list1;
int length=0;
int array[100];
for(p1=list1;p1!=NULL;p1=p1->next) {
array[length] = p1->data;
length++;
}
p1=list2;
for(;p1!=NULL;p1=p1->next) {
array[length] = p1->data;
length++;
}
int i,j,t;
for(i=0;i<length-1;i++) {
for(j=i+1;j<length;j++) {
if(array[j]<array[i]) {
t =array[j];
array[j]=array[i];
array[i] = t;
}
}
}
struct ListNode *q,*head1 = NULL,*tail1=NULL;
i=0;
while(i<length) {
q = (struct ListNode *)malloc(sizeof(struct ListNode));
q->data = array[i];
if(head1 == NULL) {
head1 = q;
} else {
tail1->next = q;
}
tail1 = q;
tail1->next = NULL;
i++;
}
return head1;
}

3.本题调试过程碰到问题及解决办法

 

      错误信息:

       错误原因: struct ListNode q,head1 = NULL,*tail1=NULL; i=0;时,令i=1了,以至于错误;

改正方法:将i=0.

  

要求三、学习总结和进度

1、总结两周里所学的知识点,回答下列问题?

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

答:数组元素全为指针的数组称为指针数组。指针数组是一个数组,并且数组元素都为指针。二级指针是指一个指针指向的是另外一个指针,可以储存指针。

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

6-2 查找星期

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

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

答:节省空间,可自由决定数组长度。不可以,不初始化会使指针存入一个不确定的地址,破坏系统正常工作。

2、Git:https://git.coding.net/GUANCHENG/101.git

3、点评3个同学的本周作业。

张心悦:http://www.cnblogs.com/zxy980612/p/8858885.html

孙铭婧:http://www.cnblogs.com/sun031915/p/8836088.html

王姝雯:http://www.cnblogs.com/phsudie/p/8759331.html

4、请用表格和折线图呈现你本周(4/9 8:00~4/23 8:00)的代码行数和所用时间、博客字数和所用时间。

C语言--第三次作业的更多相关文章

  1. C语言第三次作业总结

    本次作业的亮点 总体情况 大部分同学基本掌握了单层循环结构的写法,懂得了代码调试的过程 PTA通过率及作业质量都不错,希望再接再厉 推荐博客 黄毓颖 推荐理由:代码思路清晰,格式良好:调试过程相当形象 ...

  2. C语言 第三次作业--函数

    1.本章学习总结 1.1 思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 学习C语言也半个学期了,前天也才刚刚进行了半期考试,emmm,成绩很差,可以反应出来我这半学期学习的效果并不 ...

  3. C语言第三次作业---单层循环结构

    一.PTA实验作业 题目一.最佳情侣身高差 1.实验代码 int N;//存放输入的人数 char sex; double hight1,hight2;//分别存放输入的身高和输出的身高 scanf( ...

  4. C语言第三周作业---单层循环

    一.PTA实验作业 题目1 1.实验代码 int N = 0,i; char sex; float a[9], height; scanf("%d\n", &N); for ...

  5. C语言第三次作业--嵌套循环

    一.PTA实验作业 题目1:硬币数 1. 本题PTA提交列表 2. 设计思路 步骤一:定义整型变量fen5,fen2,fen1,表示1分2分和5分,零钱数额x,总硬币数total,换法count 步骤 ...

  6. C语言--第三周作业

    一.PTA作业中4个题目 1.7-9 A乘以B 要求:输入的两个整数:A是你学号前两位数字,B是你学号后两位数字 a.代码 #include <stdio.h> int main () { ...

  7. C语言——第三次作业

    题目1.A乘以B 1.实验代码 #include <stdio.h> int main() { int A,B,C; scanf("%d %d",&A,& ...

  8. c语言第三次作业。

    ---恢复内容开始--- (一)改错题 计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数. 源代码 : 第一次编译: 错误原因:if 后面有分号 改正方法:去掉分号 ...

  9. C语言——第三次作业(2)

    作业要求一 PTA作业的提交列表 第一次作业 第二次作业 一道编程题: 有一个axb的数组,该数组里面顺序存放了从1到a*b的数字.其中a是你大学号的前三位数字,b是你大学号的后四位数字,比如你的学号 ...

  10. C语言--第三周作业评分和总结(5班)

    作业链接:https://edu.cnblogs.com/campus/hljkj/CS2017-5/homework/1073 一.评分要求 要求1 完成PTA第三周所有题(20分). 要求2 4道 ...

随机推荐

  1. The same month as the adidas NMD Singapore is releasing

    Earlier this December 2017, the inaugural adidas NMD Singapore silhouette released in the first colo ...

  2. SqlServer2005 各版本区别

    SQL2005 分五个版本,如下所列, 1.Enterprise(企业版), 2.Development(开发版), 3.Workgroup,(工作群版) 4.Standard,(标准版) 5.Exp ...

  3. hdu6158 The Designer

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6158 题目: The Designer Time Limit: 8000/4000 MS (J ...

  4. uva1401 dp+Trie

    这题说的是给了一个长的字符串长度最大300000,又给了4000个单词 单词的长度不超过100.计算这个字符串能组成多少种不同单词的组合,求出方案总数.dp[i]以第i个字符为开始的字符串能有多少种的 ...

  5. python一段代码 感受一下

    class T():    def aa(self):        write = 1        print '123' class B():            def hehe(self) ...

  6. ng-深度学习-课程笔记-3: Python和向量化(Week2)

    1 向量化( Vectorization ) 在逻辑回归中,以计算z为例,$ z =  w^{T}+b $,你可以用for循环来实现. 但是在python中z可以调用numpy的方法,直接一句$z = ...

  7. 隐藏Apche、Nginx、PHP的版本号提高网站安全性

    隐藏Apache版本号 在apache配置文件httpd.conf中,加入以下代码 ServerTokens Prod ServerSignature Off 隐藏Nginx版本号 在nginx的配置 ...

  8. Java实现获取属性文件的参数值

    Java实现获取属性文件的参数值 1,属性文件内容(analysis.properties),路径必须在:src根目录下: #client data path analysis.client.data ...

  9. -03-PetaLinux通过eMMC方式启动【Xilinx-Petalinux学习】

    前面说的我的硬件上有一颗eMMC的芯片,型号是MTFC4GACAJCN-4M IT,有4GB的容量. BOOT.bin的文件较小,只有不到3MB,但是image.ub的文件根据不同的需求,将来可能会越 ...

  10. double保存小数点后两位

    double getRound(double a){ return (int(a * 100 + 0.5)) / 100.0; };//利用的是强制转换