一、阐述程序设计思想,画出程序流程图,不需要给出代码
1.设计一个函数fun,其作用为使数组中最大元素项与第一位互换,数组中最小元素项与最后一位以为互换。(使用指针实现)
注:循环处(p++)改为(i++)
2.现有两个递增有序链表L1与L2,P1、P2指向两链表头节点。利用两个链表的空间节点及指针P1、P2,构造出两列表合并后的有序递减序列L3。
二、阐述程序设计思想,画出主要流程,并给出代码。
1.选择合适的数据结构保存十个工人信息(包括编号、姓名、工龄和工资)。使用冒泡算法将工人按照工龄从大到小排序,并输出排序后的结果。
程序设计思想:建立结构体数组保存工人信息,通过Input()、Sort()、Print()三个函数分别实现输入、排序(由冒泡排序法,对工人的工龄从大到小进行排序)、输出三个功能。
#include <stdio.h>
#define N 4
struct worker
{
char num[7];
char name[11];
int year;
int salary;
};
void Input(struct worker *p);
void Sort(struct worker *p, int n);
void Print(struct worker *p);
int main(void)
{
struct worker work[N];
int i;
Input(work);
Sort(work,N);
Print(work);
return 0;
}
void Input(struct worker *p)
{
for ( int i = 0; i < N; i++ )
{
printf("请输入第%d个工人信息:", i+1);
scanf("%s%s%d%d", p[i].num, p[i].name, &p[i].year, &p[i].salary);
}
}
void Print(struct worker *p)
{
printf("\n依大到小输出工人的信息:\n");
for ( int i = 0; i < N; i++ )
{
printf("编号:%s,姓名:%s,工龄:%d,工资:%d\n",
(p+i)->num, (p+i)->name, (p+i)->year, (p+i)->salary);
}
}
void Sort(struct worker *p, int n)
{
int i, j;
struct worker temp;
for ( i = 0; i < n-1; i++ )
{
for ( j = 0; j < n-i-1; j++ )
{
if ( p[j].year < p[j+1].year )
{
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
}
}
}
流程图:
2.有一个长度为10的字符串,输入一个字串,调用Find函数找出字符串中含有输入子串的个数,并在主函数输出结果。
设计思想:遍历str字符串,在通过比对其中与s1字串是否有相同的子串,有则count加1,循环遍历一次即可获得相同字串的个数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
int Find(char *str, char *s1);
int main(void)
{
char str[N] = "abacabacac",s1[N];
int count = 0;
printf("请输入一个子串:");
gets(s1); //s1表示子串
count = Find(str,s1);
printf("\n子串个数为:%d", count);
return 0;
}
int Find(char *str, char *s1)
{
int i = 0, j = 0, k = 0;
int count = 0;
while ( str[i] != '\0' )
{
if ( str[i] == s1[0] )
{
while ( s1[j] != 0 ){
if ( str[i+j] == s1[j] )
k++;
j++;
}
if ( k == strlen(s1) ) //判断s1在str中是否有相同子串
count++;
j = 0;
k = 0;
}
i++;
}
return count;
}
流程图:
3.现有ABC三个顺序表,要求在顺序表A中删除BC含有的元素后构建新的顺序表后输出。(结构体中的数据为Int类型)
设计思想:设计两个函数,一个用于初始化和创建顺序表A,B,C;另一个通过嵌套for循环,并比较元素,从而删除A中与B,C相同元素,最后输出A表
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
typedef struct List
{
int data[MaxSize];
int length;
} List;
void Create_List(List *L);
void Delete(List *A, List *B, List *C) ;
int main(void)
{
List A,B,C; //声明表
Create_List(&A);
Create_List(&B);
Create_List(&C);
Delete(&A,&B,&C); //删除后输出
return 0;
}
void Create_List(List *L)
{
int i, value;
for( i = 0; i < MaxSize; i++ )
L->data[i] = 0; //扫除内存,初始为0
L->length = 0; //初始表长为0
printf("请输入表元素:\n");
for( i=0;; i++ )
{
scanf("%d", &value);
if( value == 9999 ) //输入int型数据(9999作为结束,不包含9999)
break;
L->data[i] = value;
L->length++;
}
}
//删除A表中含有BC中的元素
void Delete(List *A, List *B, List *C)
{
int i, j, k;
for ( i = 0; i < A->length; i++ ) //外层一次循环,让B的所有数据和A.data[i];比较
{
for ( j = 0; j < B->length; j++ )
{
if ( B->data[j] == A->data[i] ) //如果B中数据有和A的数据相同,则...
{
for ( k = i; k < A->length; k++ )
A->data[k] = A->data[k+1];
A->length--;
}
}
}
for ( i = 0; i < A->length; i++) //让C和A中数据比较,和上面一样
{
for ( j = 0; j < C->length; j++ )
{
if ( C->data[j] == A->data[i] )
{
for ( k = i; k < A->length; k++ )
A->data[k] = A->data[k+1];
A->length--;
}
}
}
printf("输出结果\n");
for ( i = 0; i < A->length; i++ )
{
printf("%3d", A->data[i]); //输出表A的内容
}
}
流程图:
版权声明:本文为XING_Gou原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。