什么是完整的程序?

什么是完整的程序?,第1张

一个完整的程序由程序号, 程序内容和程序结束三部分组成。

1,头文件:头文件包含要在程序中调用的库函数(例如printf、scanf等)包含在头文stdio.h中。Sin、Tan、sqrt和数学计算中使用的其他函数包含在头文件math.h中。在程序中调用库函数,和#include或#include“头文件名”必须写在程序的开头。

2. 主要功能:程序的主体部分,算法的主干部分。

3. 子函数:在主函数中使用的方法。为了避免主函数过长所带来的误差,算法中的某个过程将被挑选出来并用子函数实现。子函数在主函数中调用,并在主函数外部定义。

4. Struct:可选,是一种特殊的数据类型,由程序员根据需要定义。

#include <stdio.h>

#include <stdlib.h>

#include<string.h>

#define MENU_NUM 7

#define N 3

typedef struct s1

{

char no[11]/*学号由10个字符组成*/

char name[15]/*学生姓名*/

float score[N]/*各门课成绩*/

float sum/*总分*/

float average/*平均分*/

int order/*名次*/

struct s1 *next/*指向后继结点的指针*/

}STUDENT/*定义结构体类型*/

STUDENT * head=NULL

void InputData( STUDENT * ptr )

void PrintMenu( )

int Menu_Select( )

void Init( )

void create( )

void print( )

void Delete( )

void append()

void computer()

main()

{

int key

while(1) {

key=Menu_Select()

switch(key)

{

case 0: Init()

//初试化链表。也就是若链表不为空则释放链表中所有数据,将head置为空(NULL)

break

case 1: create()

//创建链表,输入数据

break

case 2: Delete()

//删除一个指定学号的记录数据

break

case 3: print()

//打印链表中所有数据

break

case 4: computer()

//计算链表中所有人的总分和平均分

break

case 5: append()

//追加一个数据到链表的尾部

break

case 6: Init()

//释放链表

exit(0)

}

}

}

void PrintMenu( )

{

int i

char * menu[]={

"0. Init list",

"1. Enter list",

"2. Delete a record from list",

"3. Print list",

"4. Compute the score",

"5. Insert record to list",

"6. Quit"

}

printf("\n\n")

for (i=0i<MENU_NUMi++)

printf("%s\n",menu[i])

printf("\nEnter your choice(0-6):")

}

int Menu_Select( )

{

int key

PrintMenu( )

scanf("%d",&key)

return key

}

void Init( )//初始化单链表。也就是释放链表中的所有数据

{

STUDENT *p,*ptr//定义两个临时指针变量p,ptr

p=headptr=head//将两个临时变量指向头指针head ;

while(ptr!=NULL)

{

ptr=ptr->next//ptr指向下一个结构数据

free(p)//释放p所指向的结构数据的内存

p=ptr//将p指向ptr所指向的数据

}

head=NULL//将head指向NULL

}

void create( )//创建单链表

{

STUDENT *pt, *pth=NULL//定义两个指针变量:pt指向即将申请新的数据内存,pth指向当前数据

while(1)

{

pt=(STUDENT *)malloc(sizeof(STUDENT))//让pt指向新申请的内存空间

InputData(pt)//输入数据,存放到pt所指向的结构数据。注意让pt的next指向NULL

if (strcmp(pt->no,"@")==0)

{

free(pt)//释放pt所指向的内存空间

break//退出循环

}

else if (head==NULL)

{

pth=pt

head=pt//将头指针head和pth指向pt

}

else

{

pth->next=pt//将pth的next指向pt

pth=pt//将pth指向pt

}

}

}

void print( ) //打印单链表中所有数据

{ int i=0

STUDENT *p//第一个指针p

p=head//将p指向head

printf("\n")

printf("******************************STUDENT******************************\n")

printf("|rec|no| name | sc1| sc2| sc3| sum | ave |order|\n")

printf("|---|----------|----------------|----|----|----|------|-----|-----|\n")

//打印表头

while (p!=NULL)

{

printf("|%3d|%10s|%-16s|%4.1f|%4.1f|%4.1f|%6.2f|%5.1f|%5d|\n",

++i,p->no,p->name,p->score[0],p->score[1],p->score[2],

p->sum,p->average,p->order)//打印p所指向的结构中的所有数据。注意打印数据间的分隔线

p=p->next//将p指向p的下一个结构数据

}

printf("********************************END********************************\n")//打印表尾

}

void Delete( ) //删除一个记录

{

STUDENT *p,*pth//定义两个指针p,pth

char no[11]//定义一个整数no(用来存储输入的学号)

printf("intput delete no\n")

scanf("%s",no)//用输入语句输入一个学号存储到no中

p=headpth=head//将p和pth都指向头指针

if (strcmp(p->no,no)==0) //也就是若头指针指向的数据需要删除

{

head=head->next//将head指针指向head的下一个数据;

free(p)//释放p所指向的数据

}

else

{

p=p->next//将p指向p的下一个数据

while ( p!=NULL)

{

if (strcmp(p->no,no)==0) //找到了要删除的数据

{

pth->next=p->next//将pth的next指向p的next

free(p)//释放p

break//退出循环

}

else

{

pth=pth->next//将pth指向pth的next 或 将pth指向p

p=p->next//将p指向p的next

}

}

}

}

void append()

{

STUDENT *p,*pth//定义两个指针变量p,pth

pth=head//将pth指向head

while ( pth->next!=NULL)

{

pth=pth->next//ptr指向ptr的next

}

p=(STUDENT *)malloc(sizeof(STUDENT))//将p指向新申请的内存空间

InputData(p)p->next=NULL//数据数据存储到p所指向的内存空间,注意将p的next置为NULL

pth->next=p//将ptr的next指向p

}

void InputData( STUDENT *ptr )

{ int i

printf("enter no:")

scanf("%s",ptr->no)

if (strcmp(ptr->no,"@")==0 ) return

printf("enter name:")

scanf("%s",ptr->name)

for(i=0i<3i++)

{

printf("shuru chengji\n")

scanf("%f",&ptr->score[i])

}

ptr->sum=0

ptr->average=0

ptr->order=0

ptr->next=NULL

}

void computer()

{

STUDENT *p

p=head

for(pp=p->next)

{

p->sum=p->score[0]+p->score[1]+p->score[2]

p->average=(p->score[0]+p->score[1]+p->score[2])/3

}

}

1.

判别闰年可以用这个函数。

返回1为闰年,0为非闰年(平年)

int

IsLeapYear(int

year)

{

if(year%400

==

0)

return

1

if(year%4

==

0

&&

year%100

!=0)

return

1

return

0

}

2.这个可以用循环来做。也可以用公式。

循环的话比较简单,公式效率比较高。

int

sum

=

0

for(i=1i<=100i++)

sum

+=

i

3.角度换弧度,在math.h里好像有相关的函数。可以参照数学公式,用角度除以360就可以了。但是要注意的是,这里要采用浮点型。

4.这个问题不是很明白。你输入的时候难道不能确定它的类型吗?难道你是用字符串来输入的?

如果是用字符串输入的话,只需要观察字符串中有没有小数点就可以了。如果有的话,小数点后如果是全0的话,就是整数。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8003025.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存