本代码适用于:
icoding的实验五并没有一个测试代码,其都是直接编写一个函数的形式,现在把实验五的原型框架代码分享。
实验五为改造一个具体的程序
要求:修改1invertory.c程序,使 inventory 和 num_parts 为 main 函数的局部变量。
每个题目仅仅需要修改一个函数即可
书本原始代码(即需要改造的代码)如下:
/*
*@书本原始代码
*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>
//#include <time.h>
#include <stdlib.h>
#define NAME_LEN 25 //单词的最长长度
#define MAX_PARTS 100 //最多元件数
struct part{ //定义一个零件数据库结构体,结构数组形式(元素为结构体的数组)
int number; //编号
char name[NAME_LEN + 1]; //零件名称
int on_hand; //现有数量
}inventory[MAX_PARTS];
int num_parts = 0; //当前数组中零件的数量
/* 函数声明*/
int read_line(char str[], int n); //读入单词到数组
int find_part(int number); //根据编号查找数组中零件信息
void insert(void); // 增加新零件
void search(void); // 搜索零件
void update(void); // 跟新零件信息
void print(void); // 显示零件信息
/*主函数*/
int main(void)
{
char code;
for(;;)
{
printf("Enter operation code: ");
scanf(" %c", &code);
while(getchar() != '\n')
;
switch(code)
{
case 'i' : insert(); break;
case 's' : search(); break;
case 'u' : update(); break;
case 'p' : print(); break;
case 'q' : return 0;
default: printf("Illegal code \n");
}
printf("\n");
}
system("pause");
return 0;
}
int find_part(int number)
{
int i;
for(i =0; i < num_parts; i++)
if(inventory[i].number == number)
return i;
return -1;
}
void insert(void)
{
int part_number;
if(num_parts == MAX_PARTS)
printf("Database is full; can't add more parts.\n");
printf("Enter part number: ");
scanf("%d", &part_number);
if((find_part(part_number)) >= 0)
{
printf("Part already exists.\n");
return;
}
inventory[num_parts].number = part_number;
printf("Enter part name: ");
read_line(inventory[num_parts].name, NAME_LEN);
printf("Enter quantity on hand: ");
scanf("%d",&inventory[num_parts].on_hand);
num_parts++;
}
void search(void)
{
int i, number;
printf("Enter part number : ");
scanf("%d",&number);
i = find_part(number);
if(i >= 0)
{
printf("Part name: %s\n", inventory[i].name);
printf("Quantity on hand: %d\n", inventory[i].on_hand);
}
else
{
printf("Part not found.\n");
}
}
void update(void)
{
int i, number, change;
printf("Enter part number: ");
scanf("%d", &number);
i = find_part(number);
if(i >= 0)
{
printf("Enter change in quantity on hand: ");
scanf("%d",&change);
inventory[i].on_hand += change;
}
else
{
printf("Part not found.\n");
}
}
void print(void)
{
int i;
printf("Part Number Part Name Quantity on Hand\n");
for(i = 0; i < num_parts; i++)
{
printf("%7d %-25s%11d\n", inventory[i].number, inventory[i].name, inventory[i].on_hand);
}
}
/*读入单词到数组*/
int read_line(char str[], int n)
{
int ch, i = 0;
while(isspace(ch = getchar()))
;
while(ch != '\n' && ch != EOF )
{
if(i < n)
str[i++] = ch;
ch = getchar();
}
str[i] = '\0';
return i;
}
待更新的程序框架
/*
*@待更新框架
*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>
//#include <time.h>
#include <stdlib.h>
#define NAME_LEN 25 //单词的最长长度
#define MAX_PARTS 100 //最多元件数
struct part{ //定义一个零件数据库结构体,结构数组形式(元素为结构体的数组)
int number; //编号
char name[NAME_LEN + 1]; //零件名称
int on_hand; //现有数量
}inventory[MAX_PARTS];
int num_parts = 0; //当前数组中零件的数量
/* 函数声明*/
int find_part(int number, const struct part inv[], int np);//根据编号查找数组中零件信息
void insert(struct part inv[], int *np);// 增加新零件
void search(const struct part inv[], int np);// 搜索零件
void update(struct part inv[], int np);//更新零件信息
void print(const struct part inv[], int np); // 显示零件信息
int read_line(char str[], int n); //读入单词到数组
/*读入单词到数组*/
int read_line(char str[], int n)
{
int ch, i = 0;
while(isspace(ch = getchar()))
;
while(ch != '\n' && ch != EOF )
{
if(i < n)
str[i++] = ch;
ch = getchar();
}
str[i] = '\0';
return i;
}
/*主函数*/
int main()
{
//TODO
}
int find_part(int number, const struct part inv[], int np)
{
//TODO
}
void insert(struct part inv[], int *np)
{
//TODO
}
void search(const struct part inv[], int np)
{
//TODO
}
void update(struct part inv[], int np)
{
//TODO
}
void print(const struct part inv[], int np)
{
//TODO
}
本题目为一个系列题目,目的是考察大家的函数基本功底。使 inventory 和 num_parts 为 main 函数的局部变量。要理解局部变量的意思和意义。大家写程序的时候也尽量不要用全局变量,用局部变量。