第三次作业
2018-04-14 12:53 梁圣然 阅读(253) 评论(4) 编辑 收藏 举报6-1 输出月份英文名
一.设计思路:
(1)描述算法
1.仔细阅读题目,了解题意
2.定义一个整形n 并输入n为月份 定义一个指针变量为s
3.通过函数getmonth将其转换为英文输出赋给s
4.如果输入的在范围之外则返回空指针
(2).流程图
二.实验代码
char *getmonth( int n )
{
char *month[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
if(n>=1 && n<=12){
return month[n-1];
}
else {
return NULL;
}
}
三.调试过程中解决办法碰到的问题和
错误信息
错误原因 &&和的意思 ||或的意思注意符号语言
改正方法 将||改成&&
6-2 查找星期
一.设计思路:
(1)描述算法
1.仔细阅读题目,了解题意
2.定义一个n 和数组s[masx]输入字符串s为星期
3.调用函数getindex定义j为负1 i循环变量,字符指针数组 char day[7{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
4.定义字符型指向指针的指针**q=day 在for中循环变量i i<7 执行if(strcmp(s,(q+i))==0) 条件成立执行j=i break跳出这个循环
5.跳出循环返回j
(2).流程图
略
二.实验代码
int getindex( char *s ){
int j=-1,i;
char *day[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
char **q=day;
for(i=0;i<7;i++){
if(strcmp(s,*(q+i))==0){
j=i;
break;
}
}
return j;
}
三.调试过程中解决办法碰到的问题和
错误信息
错误原因 *(q+i)指向的是day中地址比较 **(p+i)所指的是字符串中day中的值
改正方法 将**(q+i) 改成*(q+i)
6-3 计算最长的字符串长度
一.设计思路
(1)描述算法
1.仔细阅读题目,了解题意
2.定义两个整形变量i n 定义一个字符指针数组 char *string[MAXN] = {NULL}
3.for循环赋值i=0条件为i<n;在for循环中动态分配内存其大小为20字节输入一个字符串并赋给string[i]
4.调用函数 max_len 定义i j max并赋值 利用for循环条件为i<n 利用strlen函数计算字符串的长度
5.利用if语句开始比较并记录下最大下标 最后返回max
(2).流程图
二.实验代码
int max_len( char *s[], int n )
{
int i=0,j;
int max=0;
for(i=0;i<n;i++)
{
j = strlen(s[i]);
if(max < j)
max = j;
}
return max;
}
三.调试过程中解决办法碰到的问题和
错误信息
错误原因 注意;号问题
改正方法 for循环条件不加;号 改正在每个语句后都想加;的习惯
6-4 指定位置输出字符串
一.设计思路
(1)描述算法
1.仔细阅读题目,了解题意
2.定义一个字符数组 两个字符 一个指针变量
3.输入一个字符串换行 并输入两个字符
4.调用函数match 函数中定义i j for循环条件(s+i)!='\0' 利用if条件为循环输入字符串中的每个字符与ch1对比
5.找到后将s[i]地址赋给指针chara 即ch1的地址 利用for循环条件为((s+j)!=ch2)&&((s+j)!='\0')找到ch2输出
6.如果不存在chr2 返回a 如果存在返回s+i
(2).流程图
略
二.实验代码
char *match( char *s, char ch1, char ch2 ){
int i,j;
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;
}
三.调试过程中解决办法碰到的问题和
错误信息 部分正确
错误原因 做题太马虎
改正方法 for循环条件不加;号 改正在每个语句后都想加;的习惯
第五题
#include <stdio.h>
#include <stdlib.h>
#define N 20
#define M 39
void delete(int s[N][M],int x);
int main()
{
int i,j,a[N][M],num=1;
for(i=0;i<N;i++){
for(j=0;j<M;j++){
a[i][j]=num;
num++;
}
} //创建一个二维数组,元素从1 到N*M
a[0][0]=0; //a[0][0]=1不是质数,将它赋值为0
for(i=0;i<N;i++){
for(j=0;j<M;j++){
if(a[i][j]!=0){
delete(a,a[i][j]); //调用函数进行筛选法 ,每调用函数一次数组a,a的值都会发生变化,不是质数的元素赋值为0
}
}
}
for(i=0;i<N;i++){
for(j=0;j<M;j++){
if(a[i][j]!=0){
printf("%d\t",a[i][j]);
}
}
} //将所有的指数(数组中不为0的数)输出
return 0;
}
void delete(int s[N][M],int x){
int i,j;
for(i=0;i<N;i++){
for(j=0;j<M;j++){
if(i!=0||j!=0){ //跳过a[0][0],
if(s[i][j]%x==0&&s[i][j]!=x){
s[i][j]=0;//将所有的能被想整除的数赋值为0
}
}
}
}
}
6-1 奇数值结点链表
一.设计思路
(1)描述算法
1.仔细阅读题目,了解题意
2.定义一个结构体,成员名整型data,结构体指针next
3.在主函数中 定义结构体指针L,Odd,L=调用函数的readlist将函数的返回值,Odd=调用函数getodd函数的返回值
4.在readlist函数中,建立一个链表将链表的头地址返回给主函数
5.在getodd函数中,定义结构体指针变量head=NULL,q=NULL,p,w=NULL,head1=NULL,如果L!=NULL就利用for循环,for(head=*L;head!=NULL;head=head->next),在for循环中利用if语句判断head->data%2!=0 成立的话head1=head,不成立执行p->next=head,执行if语句之后 p=head,如果head->data%2!=0不成立,执行else中的语句 判断q==NULL,成立q=head,不成立w->next=head,在if语句之后执行w=head,执行完for循环后p->next=NULL,如果w!=NULL执行w->next=NULL。最后L=q。在第一个if不满足时返回NULL,在最后返回head1.
6.调用函数printlist,将奇数链表打印出来,在调用函数printlist 将偶数链表打印出来
(2).流程图
二.实验代码
struct ListNode *readlist(){
struct ListNode *head=NULL,*p=NULL,*q=NULL;
int data;
p=q=(struct ListNode *)malloc(sizeof(struct ListNode));
scanf("%d",&p->data);
while(p->data!=-1){
if(head==NULL){
head=p;
}else{
q->next=p;
}
q=p;
p=(struct ListNode *)malloc(sizeof(struct ListNode));
scanf("%d",&p->data);
}
q->next=NULL;
return(head);
}
struct ListNode *getodd( struct ListNode **L ){
struct ListNode *head=NULL,*q=NULL,*p,*w=NULL,*head1=NULL;
if(*L!=NULL){
for(head=*L;head!=NULL;head=head->next){
if(head->data%2!=0){
if(head1==NULL){
head1=head;
}else{
p->next=head;
}
p=head;
}else{
if(q==NULL){
q=head;
}else{
w->next=head;
}
w=head;
}
}
p->next=NULL;
if(w!=NULL)
w->next=NULL;
*L=q;
}else{
return NULL;
}
return(head1);
}
6-2 学生成绩链表处理
一.设计思路
(1)描述算法
1.仔细阅读题目,了解题意
2.定义一个结构体,成员包括num,字符数组name[20] 整型数score 结构体变量next,
3.在主函数里 定义整型变量min_score,结构体变量p,head=NULL,调用函数creatlist,head等于函数的返回值
4.在creatlist函数中,创建一个列表,将链表的头地址返回给主函数
5.在主函数中输入一个数给min_score,调用函数deletelist,将函数的返回值给head,
6.定义结构体变量p,q,w,通过if语句,条件为head!=NULL,借助for循环条件1为w=head,条件2为w!=NULL条件3为w=w->next,在循环体中借助if语句条件为w->score
(2)流程图
二.实验代码
struct stud_node *createlist(){
struct stud_node *head=NULL,*p=NULL,*q=NULL;
p=q=(struct stud_node *)malloc(sizeof(struct stud_node));
scanf("%d",&p->num);
while(p->num!=0){
scanf("%s %d",p->name,&p->score);
if(head==NULL){
head=p;
}else{
q->next=p;
}
q=p;
p=(struct stud_node *)malloc(sizeof(struct stud_node));
scanf("%d",&p->num);
}
q->next=NULL;
return (head);
}
struct stud_node *deletelist( struct stud_node *head, int min_score ){
struct stud_node *p,*q,*w;
if(head!=NULL){
for(w=head;w!=NULL;w=w->next){
if(w->score<min_score){
for(p=head;min_score<=p->score&&p->next!=NULL;p=p->next){
q=p;
}
if(min_score>p->score){
if(p==head){
head=p->next;
}else{
q->next=p->next;
}
}
}
}
return (head);
}
else{
return NULL;
}
}
6-3 链表拼接
这题是真的的不会呀,前两道题请教的别的同学才做出来的