C语言--第三次作业
要求一 、
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语言--第三次作业的更多相关文章
- C语言第三次作业总结
本次作业的亮点 总体情况 大部分同学基本掌握了单层循环结构的写法,懂得了代码调试的过程 PTA通过率及作业质量都不错,希望再接再厉 推荐博客 黄毓颖 推荐理由:代码思路清晰,格式良好:调试过程相当形象 ...
- C语言 第三次作业--函数
1.本章学习总结 1.1 思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 学习C语言也半个学期了,前天也才刚刚进行了半期考试,emmm,成绩很差,可以反应出来我这半学期学习的效果并不 ...
- C语言第三次作业---单层循环结构
一.PTA实验作业 题目一.最佳情侣身高差 1.实验代码 int N;//存放输入的人数 char sex; double hight1,hight2;//分别存放输入的身高和输出的身高 scanf( ...
- C语言第三周作业---单层循环
一.PTA实验作业 题目1 1.实验代码 int N = 0,i; char sex; float a[9], height; scanf("%d\n", &N); for ...
- C语言第三次作业--嵌套循环
一.PTA实验作业 题目1:硬币数 1. 本题PTA提交列表 2. 设计思路 步骤一:定义整型变量fen5,fen2,fen1,表示1分2分和5分,零钱数额x,总硬币数total,换法count 步骤 ...
- C语言--第三周作业
一.PTA作业中4个题目 1.7-9 A乘以B 要求:输入的两个整数:A是你学号前两位数字,B是你学号后两位数字 a.代码 #include <stdio.h> int main () { ...
- C语言——第三次作业
题目1.A乘以B 1.实验代码 #include <stdio.h> int main() { int A,B,C; scanf("%d %d",&A,& ...
- c语言第三次作业。
---恢复内容开始--- (一)改错题 计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数. 源代码 : 第一次编译: 错误原因:if 后面有分号 改正方法:去掉分号 ...
- C语言——第三次作业(2)
作业要求一 PTA作业的提交列表 第一次作业 第二次作业 一道编程题: 有一个axb的数组,该数组里面顺序存放了从1到a*b的数字.其中a是你大学号的前三位数字,b是你大学号的后四位数字,比如你的学号 ...
- C语言--第三周作业评分和总结(5班)
作业链接:https://edu.cnblogs.com/campus/hljkj/CS2017-5/homework/1073 一.评分要求 要求1 完成PTA第三周所有题(20分). 要求2 4道 ...
随机推荐
- http之post和get请求的区别
GET请求 GET /books/?sex=man&name=Professional HTTP/1.1 Host: www.wrox.com User-Agent: Mozilla/5.0 ...
- 17初识select
多路复用 select 同时监控多个文件描述符的输入输出 <sys/types.h> <sys/times.h> <sys/select.h> int select ...
- CCPC-Wannafly Winter Camp Day3 (Div2, onsite)
Replay Dup4: 没想清楚就动手写? 写了两百行发现没用?想的还是不够仔细啊. 要有莽一莽的精神 X: 感觉今天没啥输出啊, 就推了个公式?抄了个板子, 然后就一直自闭A. 语文差,题目没理解 ...
- 《零起点,python大数据与量化交易》
<零起点,python大数据与量化交易>,这应该是国内第一部,关于python量化交易的书籍. 有出版社约稿,写本量化交易与大数据的书籍,因为好几年没写书了,再加上近期"前海智库 ...
- Eclipse配置tomcat8.5.7报错:The Apache Tomcat installation at this directory is version 8.5.27. A Tomcat 8.0 installation is...
Eclipse配置tomcat8.5.7报错:The Apache Tomcat installation at this directory is version 8.5.27. A Tomcat ...
- 20162314 Experiment 4 - Graph
Experiment report of Besti course:<Program Design & Data Structures> Class: 1623 Student N ...
- Linux 下源码编译安装 vim 8.1
前言 目前 linux 的各个发行版基本上都是带了一个 vi 编辑器的,而本文要说的 vim 编辑器对 vi 做了一些优化升级,更好用.当我们需要远程操作一台 linux 服务器的时候,只能使用命令行 ...
- [微信开发] - UnionID以及微信开放平台
- 使用 if 表达式
由于 if 本质上是一个原函数,它的返回值就是满足条件分支表达式的值,因此,if 表达式也可以用作内联函数.我们以 check_positive( )为例进行说明.尽管条件表达式中不另写 return ...
- redis优缺点
redis主要是一个内存数据库.很多时候是被作为缓存来使用.redis的优势主要体现在和其他缓存方案进行比较,redis的不足主要是和其他数据库进行比较时体现的. 优点: 读写性能优异 支持数据持久化 ...