问答题

已知C源程序如下:
/*一个使用结构体数组的简单地址列表*/
# include <stdion.h>
# include <stdlib.h>
define MAX 4
struct addr
char name[30];
char street[40];
char city[20];
unsigned long int zip;
addr list [MAX] ;
void init_list (void), enter (void);
void deleteAddr(void), list(void);
int menu select (void), find free (void);
int main (void)
char choice;
init_list();/ *初始化结构体数组*/
for(;;)
choice=menu_select();
switch (choice)
case 1:enter();
break;
case 2:deleteAddr();
break;
case 3:list();
break;
case 4:exit(0);

return 0
/*初始化列表*/
void init_list (void)
register int t;
for(t=0;t<MAX;++t)addr_list[t].name[0]=\0;
/ *获取菜单选择* /
int menu_select (void)
char s[80];
int c;
printf("1. Enter a name\n");
printf("2. Delete a name\n");
printf("3. List the file\n") ;
printf("4. Quit\n") ;
do
printf("\nEnter your choice:");
gets (s);
c=atoi (s);
while(c<1| | c>4);
return c;
/ *增加地址* /
void enter (void)
int slot;
char s[80];
slot=find_free ();
if (slot==-1)
printf("\nList Full") ;
return;
printf("Enter name:");
gets (addr_list [slot] .name);
printf("Enter street:");
gets (addr_list[slot]. street);
printf("Enter city:");
gets(addr_list[slot]. city);
printf("Enter zip:");
gets (s);
addr_list[slot] .zip=strtoul(s, \0,10);
/*查找未用结构*/
int find_free (void)
register int t;
for(t=0; addr_list [t]. name[0] &&t<MAX;++t);
if(t==MAX) return-1; / * no slots free * /
return t;
/*删除地址*/
void deleteAddr(void)
register int slot;
char s[80];
printf("enter record # :");
gets (s);
slot=atoi(s);
if(slot>=0 && slot<MAX)
addr_list [slot]. name[0]:\0;
/ *在屏幕上显示列表*/
void list (void)
register int t;
for(t=0;t<MAX;++t)
if (addr_list [t]. name[0])
printf ("%s\n", addr_list It] . name);
printf("%s\n",addr_list[t] .street);
printf("%s\n",addr list[t] .city);
printf ("%lu\n\n", addr_list [t]. zip);

printf ("\n\n");
画出main函数的控制流程图。

【参考答案】

main函数的控制流程图如下(限于篇幅只显示语句块,不显示具体语句):

图中各判断语句如下:......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题

问答题
已知C源程序如下: * Input today’s date,output tomorrow’s date * * version 2 * #include <stdio.h> struct ydate int day; int month; int year; ; int leap(struct ydate d) if((d.year%4==0&&d.year%100!=0)||(d.year%400==0) return 1; else return 0; int numdays(struct ydate d) int day; static int daytab[]= 31,28,31,30,31,30,31,31,30,31,30,31; if (leap (d)&&d.month==2) day=29; else day=daytab [d.month-1]; return day; int main (void) struct ydate today, tomorrow; printf( format of date is: year,month, day 输入的年、月、日之间应用逗号隔开 n printf( today is: ) ; scanf ( %d, %d, %d , &today. year, &today.month, &today. day) ; while(0>=today.year|| today.year>65535||0>=today.month||today.month>12)||0>= today, day||today, day>numdays (today)) printf( input date error! reenter the day! n ); printf( today is : ); scanf ( %d, %d, %d , &today. year, &today.month, &today. day); if (today. day! =numdays (today)) tomorrow.year:today.year; tomorrow.month=today.month; tomorrow.day=today.day+1; else if(today.month==12) tomorrow.year:today.year+1; tomorrow.month=1; tomorrow.day=1; else tomorrow.year=today.year; tomorrow.month=today.month+1; tomorrow.day=1; printf( tomorrow is :%d,%d,%d n n , tomorrow.year, tomorrow.month, tomorrow.day); (1)画出程序中所有函数的控制流程图。 (2)设计一组测试用例,使该程序所有函数的语句覆盖率和分支覆盖率均能达到100%。如果认为该程序的语句或分支覆盖率无法达到100%,则说明为什么。