西北农林科技大学 c语言上机 实习7答案

实习七答案

1、 电话薄管理程序设计

/* exer 7-1 手机电话簿管理 */

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

int N=0; /* 定义全局变量,代表电话簿长度 */ struct stud /* 定义结构类型 */ {

char name[15];

char phone_num[15];

char mobile_num[15];

} book[100];

void creat( );

void insert( );

void search( );

void delete( );

void output( );

int main(void)

{

int k;

do

{

printf(" 0: exit\n");

printf(" 1: creat\n");

printf(" 2: search\n");

printf(" 3: insert\n");

printf(" 4: delete\n");

printf(" 5: output\n");

printf("please select:");

scanf("%d",&k);

switch(k)

{

case 0:

exit(0);

case 1:

creat( );

break;

case 2:

search( );

break;

case 3: /* 定义结构数组 */ /* 函数的原型声明 */ /* 主函数 */ /* 打印菜单项 */ /* 输入选择项 */ /* 退出函数 */

insert( );

break;

case 4:

delete( );

break;

case 5:

output( );

break; /* 调用子函数 */

default:

exit(0);

}

}

while(1);

return 0;

}

void creat(void) /* 生成子函数 */

{

char appella[15];

getchar();

while(1) /* 输入结构数组 */ {

gets(appella);

if(*appella=='*') break; /* 输入*,则结束 */ strcpy(book[N].name, appella);

gets(book[N].phone_num);

gets(book[N].mobile_num);

N++; /* 统计长度 */ }

}

void search(void) /*查找子函数 */

{

char appella[15];

int i=0;

getchar();

gets(appella);

while(i<N && strcmp(book[i].name,appella)!=0)

{

i++;

}

if(i<N)

printf("%s %s %s\n",

book[i].name,book[i].phone_num,book[i].mobile_num);

else

printf("not found");

}

void insert(void) /* 插入子函数 */

{

getchar();

gets(book[N].name);

gets(book[N].phone_num);

gets(book[N].mobile_num);

N++; /* 长度加1 */

}

void delete(void) /*删除子函数 */

{

char appella[15];

int i=0,j;

getchar();

gets(appella);

while(i<N && strcmp(book[i].name,appella)!=0)

{

i++;

}

if(i<N)

{

for(j=i+1; j<N; j++)

{

book[j-1] = book[j];

}

N--; /* 长度减1 */ }

else

printf("not found");

}

void output(void) /* 输出子函数 */

{

int i;

for(i=0; i<N; i++)

printf("%s %s %s\n",

book[i].name,book[i].phone_num,book[i].mobile_num); }

2、 正负数判断

/* exer 8-1 判断数是正数、负数 */

#include<stdio.h>

int main(void)

{

short num,mask,bit;

mask = 0x8000; /* 构造掩码 */ scanf("%hx",&num); /* 输入数据 */ bit = (mask & num)?1:0; /* 取出第一位 */ if(bit == 0)

printf("is positive number\n"); /* 输出正数 */ else

printf("is negative number\n"); /* 输出负数 */ return 0;

}

3、 偶数位清零

/* exer 8-3 将偶数位清零,其它位保留 */

#include<stdio.h>

int main(void)

{

unsigned short a,b,mask;

mask = 0x5555; /* 构造掩码 */ scanf("%hx",&a); /* 输入数据a */

b = a & mask; /* 与掩码按位与 */ printf("%x\n",b); /* 输出 */

return 0;

}

4、 结构体的定义与引用

#include<stdio.h>

/*定义结构体*/

struct employee

{

char name[100];

char ID[20];

int age;

float salary;

};

int main()

{

/*定义结构体变量*/

struct employee staff;

/*输入数据*/

gets(staff.name);

gets(staff.ID);

scanf("%d", &staff.age);

scanf("%f", &staff.salary);

/*输出数据*/

puts(staff.name);

puts(staff.ID);

printf("%d\n", staff.age);

printf("%.2f\n", staff.salary); return 0;

}

5、 结构体数组的定义与引用 #include<stdio.h>

/*定义结构体*/

struct employee

{

char name[100];

char ID[20];

int age;

float salary;

};

int main()

{

int i = 0;

float MaxSalary = 0.0f;

/*定义结构体变量*/

struct employee staff[5];

/*输入数据*/

for(i = 0; i < 5; i++)

{

scanf("%s", staff[i].name); scanf("%s", staff[i].ID); scanf("%d", &staff[i].age); scanf("%f", &staff[i].salary); }

MaxSalary = staff[0].salary; for(i = 1; i < 5; i++)

{

if(staff[i].salary > MaxSalary) MaxSalary = staff[i].salary; }

printf("%.2f\n", MaxSalary); return 0;

}

 

第二篇:西北农林科技大学 c语言上机 实习8答案

1. 文本文件中字符个数统计

#include<stdio.h>

#include<stdlib.h>

int main(void)

{

char ch, filename[200];

int count = 0;

FILE *fp;

scanf("%s", filename);

if((fp = fopen(filename, "r")) == NULL)

{

printf("File open error!\n");

exit(1);

}

while((ch = fgetc(fp)) != EOF)

{

count++;

}

printf("%d\n",count);

if( fclose(fp))

{

printf("File close error!\n");

exit(1);

}

return 0;

}

2. 文件中数据的排序

#include<stdio.h>

#include<stdlib.h>

int main(void)

{

int a[10], temp = 0, i = 0, j = 0, k = 0;

char filename1[80], filename2[80];

FILE *fp1,*fp2;

scanf("%s", filename1);

scanf("%s", filename2);

if((fp1 = fopen(filename1, "rb")) == NULL)

{

printf("Input file open error!\n");

exit(1);

}

if((fp2 = fopen(filename2,"wb")) == NULL)

{

printf("Output file create error!\n");

exit(1);

}

for(i = 0; i < 10; i++)

{

fread(&a[i], sizeof(int), 1, fp1); /* 读出数据 */ }

for(i = 0; i < 9; i++)

{

k = i;

for(j = i + 1; j < 10; j++)

if(a[k] > a[j]) k = j;

if(k != i)

{

temp = a[k];

a[k] = a[i];

a[i] = temp;

}

}

for(i = 0; i < 10; i++) /*

{

fwrite(&a[i], sizeof(int), 1, fp2);

}

if( fclose(fp1))

{

printf("Input file close error!\n");

exit(1);

}

if( fclose(fp2))

{

printf("Output file close error!\n");

exit(1);

}

/*验证结果的代码,请不要改动*/

if((fp1 = fopen(filename2, "rb")) == NULL)

{

printf("Result file open error!\n");

exit(1);

}

/* 排序 */ 写入数据 */

for(i = 0; i < 10; i++)

{

fread(&a[i], sizeof(int), 1, fp1); /* 读出数据 */ }

if( fclose(fp1))

{

printf("Result file close error!\n");

exit(1);

}

for(i = 0; i < 9; i++)

printf("%d ", a[i]);

printf("%d\n", a[i]);

return 0;

}

3 二进制数据文件/

#include<stdio.h>

#include<stdlib.h>

int main(void)

{

int a[10], temp = 0, i = 0, j = 0, k = 0;

char filename1[80], filename2[80];

FILE *fp1,*fp2;

scanf("%s", filename1);

scanf("%s", filename2);

if((fp1 = fopen(filename1, "r")) == NULL)

{

printf("Input file open error!\n");

exit(1);

}

if((fp2 = fopen(filename2, "wb")) == NULL)

{

printf("Output file open error!\n");

exit(1);

}

for(i = 0; i < 10; i++)

{

fscanf(fp1, "%d", &a[i]);

fwrite(&a[i], sizeof(int), 1, fp2);

}

if( fclose(fp1))

{

printf("Input file close error!\n"); exit(1);

}

if( fclose(fp2))

{

printf("Output file close error!\n"); exit(1);

}

if((fp1 = fopen(filename2, "rb")) == NULL) {

printf("Result file open error!\n"); exit(1);

}

for(i = 0; i < 10; i++)

{

fread(&a[i], sizeof(int), 1, fp1); }

if( fclose(fp1))

{

printf("Result file close error!\n"); exit(1);

}

for(i = 0; i < 9; i++)

printf("%d ", a[i]);

printf("%d\n", a[i]);

return 0;

}

4. 比较2个文本文件的内容

#include<stdio.h>

#include<stdlib.h>

int main(void)

{

int i = 1, flag = 0;

char filename1[80], filename2[80]; FILE *fp1, *fp2; /* 读出数据 */

scanf("%s", filename1);

scanf("%s", filename2);

if((fp1 = fopen(filename1, "r")) == NULL) {

printf("Input file1 open error!\n"); exit(1);

}

if((fp2 = fopen(filename2,"r")) == NULL) {

printf("Input file2 open error!\n"); exit(1);

}

while(!feof(fp1))

{

if(fgetc(fp1) == fgetc(fp2)) i++;

else

{

flag = 1;

break;

}

}

if (flag)

printf("%d\n", i);

else

printf("is equal\n");

if( fclose(fp1))

{

printf("Input file1 close error!\n"); exit(1);

}

if( fclose(fp2))

{

printf("Input file2 close error!\n"); exit(1);

}

return 0;

}

相关推荐