c语言程序设计课后习题解答与实验指导

c语言程序设计课后习题解答与实验指导,第1张

#include<stdio.h>

int max(int x,int y,int z)

{

int t

t=x>y?x:y

t=t>z?t:z

return(t)

}

int min(int x ,int y,int z)

{

int t

t=x<y?x:y

t=t<z?t:z

return(t)

}

int aver(int x ,int y,int z)

{

int t

t=(x+y+z)/3

return(t)

}

void main()

{ int x,y,z,a,b,c

scanf("%d,%d,%d",&x,&y,&z)

a=(*max)(x,y,z)

b=(*min)(x,y,z)

c=(*aver)(x,y,z)

printf("%d,%d,%d\n",a,b,c)

}

建议改成:

#include<stdio.h>

int max(int x,int y,int z)

{

int t

t=x>y?x:y

t=t>z?t:z

return(t)

}

int min(int x ,int y,int z)

{

int t

t=x<y?x:y

t=t<z?t:z

return(t)

}

float aver(int x ,int y,int z)

{

int t

t=(float)((x+y+z)/3.0)

return(t)

}

void main()

{ int x,y,z,a,bfloat c

scanf("%d,%d,%d",&x,&y,&z)

a=(*max)(x,y,z)

b=(*min)(x,y,z)

c=(*aver)(x,y,z)

printf("max=%d\nmin=%d\naver=%g\n",a,b,c)

}

/* Note:Your choice is C IDE */

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <conio.h>

#define N 100

struct student

{

char num[10]

char name[10]

char tel[11]

}

/* 以下是函数原型说明,被调函数的定义在主调函数后面时,要加此部分 */

void myprint()

void mycreate()

void mydisplay()

void mysearch()

/* sch_num与sch_name函数被mysearch调用 */

void sch_num(FILE *fp)

void sch_name(FILE *fp)

void mymodify()

void myadd()

void mydelete()

/* del_num与del_name函数被mydelete调用 */

void del_num(FILE *fp)

void del_name(FILE *fp)

void mysort()

/* sort_num与sort_name函数被mysort调用 */

void sort_num()

void sort_name()

void main()

{

char choose,yes_no

do

{

myprint() /* 显示主菜单 */

printf(" ")

choose=getch()

switch(choose)

{

case '1': mycreate() break /* 创建 */

case '2': mydisplay()break /* 显示 */

case '3': mysearch() break /* 查询 */

case '4': mymodify() break /* 修改 */

case '5': myadd() break /* 添加 */

case '6': mydelete() break /* 删除 */

case '7': mysort() break /* 排序 */

case '0': break

default:printf("\n%c为非法选项!\n",choose)

}

if(choose=='0')

break

printf("\n要继续选择吗(Y/N)?\n")

do

{

yes_no=getch()

}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n')

}while(yes_no!='Y'||yes_no!='y')

}

void myprint() /* 显示菜单界面 */

{

printf("\n\n\n\n\n\n\n\n")

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

printf(" | 请输入选项编号(0-7): |\n")

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

printf(" | 1--创建信息管理系统 |\n")

printf(" | 2--显示信息管理系统 |\n")

printf(" | 3--查询信息管理系统 |\n")

printf(" | 4--修改信息管理系统 |\n")

printf(" | 5--添加信息管理系统 |\n")

printf(" | 6--删除信息管理系统 |\n")

printf(" | 7--排序信息管理系统 |\n")

printf(" | 0--退出 |\n")

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

}

/* 定义创建信息管理系统的函数 */

void mycreate()

{

int i=1

struct student temp

FILE *fp

fp=fopen("d:\\lbh\\guanli.dat","w")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

printf("\n 请输入第1个记录:\n")

printf(" 学号(用#结束输入):")

do

{

gets(temp.num)

}while(strcmp(temp.num,"")==0)

printf(" 姓名(用#结束输入):")

gets(temp.name)

printf(" 电话号码(用#结束输入):")

gets(temp.tel)

while(temp.num[0]!='#'&&temp.name[0]!='#'&&temp.tel[0]!='#')

{

fprintf(fp,"%23s%15s%15s\n",temp.num,temp.name,temp.tel)

i++

printf("\n 请输入第%d个记录:\n",i)

printf(" 学号(用#结束输入):")

do

{

gets(temp.num)

}while(strcmp(temp.num,"")==0)

printf(" 姓名(用#结束输入):")

gets(temp.name)

printf(" 电话号码(用#结束输入):")

gets(temp.tel)

}

fclose(fp)

}

/* 定义显示信息管理系统的函数 */

void mydisplay()

{

int n=0

struct student temp

FILE *fp

fp=fopen("d:\\lbh\\guanli.dat","r+")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

// clrscr()

printf(" 学号 姓名 电话号码\n")

while(feof(fp)==0)

{

fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel)

printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel)

n++

}

if(n==0)

printf("\n 文件中无记录!\n")

else

printf("\n 文件中共有%d个记录!\n",n)

fclose(fp)

}

/* 定义查询信息管理系统的函数 */

void mysearch()

{

char c

FILE *fp

fp=fopen("d:\\lbh\\guanli.dat","r+")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

printf("\n 按学号查询(h),还是按姓名查询(m)?")

c=getch()

if(c=='h'||c=='H')

sch_num(fp) /* 按学号查询 */

if(c=='m'||c=='M')

sch_name(fp) /* 按姓名查询 */

else

printf("\n 非法字符!\n")

fclose(fp)

}

/* 定义按学号查询信息管理系统的函数 */

void sch_num(FILE *fp)

{

int flag=0,n=0

char tempnum[10]

struct student temp

printf("\n 请输入要查询记录的学号:")

gets(tempnum)

while(feof(fp)==0)

{

fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel)

if(strcmp(tempnum,temp.num)==0)

{

if(flag==0)

printf(" 学号 姓名 电话号码\n")

printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel)

flag=1

}

n++

}

if(n==0)

printf("\n 文件中无记录!\n")

else

if(flag==0)

printf("\n 文件中无此人!\n")

}

/* 定义按姓名查询信息管理系统的函数 */

void sch_name(FILE *fp)

{

int flag=0,n=0

char tempname[10]

struct student temp

printf("\n 请输入要查询记录的姓名:")

gets(tempname)

while(feof(fp)==0)

{

fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel)

if(strcmp(tempname,temp.name)==0)

{

if(flag==0)

printf(" 学号 姓名 电话号码\n")

printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel)

flag=1

}

n++

}

if(n==0)

printf("\n 文件中无记录!\n")

else

if(flag==0)

printf("\n 文件中无此人!\n")

}

/* 定义修改信息管理系统的函数 */

void mymodify()

{

char c

int n=0

struct student *find,temp,record[100],*p/* 最多100个记录 */

FILE *fp

fp=fopen("d:\\lbh\\guanli.dat","r+")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

p=record

while(feof(fp)==0)

{

fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

p++

n++

}

fclose(fp)

if(n==0)

{

printf("\n 文件中无记录!\n")

return

}

printf("\n 请输入要修改记录的学号:")

gets(temp.num)

for(p=recordp<record+np++)

if(strcmp(temp.num,p->num)==0)

{

find=p/* find记住修改记录的位置 */

break

}

if(p==record+n)

{

printf("\n 无此人!\n")

return

}

do

{

printf("\n 请输入正确的学号:")

do

{

gets(temp.num)

}while(strcmp(temp.num,"")==0)

printf(" 请输入正确的姓名:")

gets(temp.name)

printf(" 请输入正确的电话号码:")

gets(temp.tel)

for(p=recordp<record+np++)

if((strcmp(temp.num,p->num)==0)&&(p!=find))

{

printf("\n 学号重复,要重新输入吗(Y/N)?")

do

{

c=getch()

}while(c!='Y'&&c!='y'&&c!='N'&&c!='n')

putchar('\n')

break

}

if(p==record+n)

{

*find=temp /* find指向需要修改记录的位置 */

break

}

}while(c=='Y'||c=='y')

fp=fopen("d:\\lbh\\guanli.dat","r+")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

for(p=recordp<record+np++)

fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

fclose(fp)

}

/* 定义添加信息管理系统的函数 */

void myadd()

{

char c

int n=0

struct student temp,record[N],*p

FILE *fp

fp=fopen("d:\\lbh\\guanli.dat","r+")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

p=record

while(feof(fp)==0)

{

fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

p++

n++

}

fclose(fp)

do

{

printf("\n 请输入新记录的学号:")

do

{

gets(temp.num)

}while(strcmp(temp.num,"")==0)

printf(" 请输入新记录的姓名:")

gets(temp.name)

printf(" 请输入新记录的电话号码:")

gets(temp.tel)

for(p=recordp<record+np++)

if(strcmp(temp.num,p->num)==0)

{

printf("\n 学号重复,要重新输入吗(Y/N)?")

do

{

c=getch()

}while(c!='Y'&&c!='y'&&c!='N'&&c!='n')

putchar('\n')

break

}

if(p==record+n)

{

*p=temp

break

}

}while(c=='Y'||c=='y')

fp=fopen("d:\\lbh\\guanli.dat","r+")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

for(p=recordp<record+n+1p++)

fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

fclose(fp)

}

/* 定义删除信息管理系统的函数 */

void mydelete()

{

char c

FILE *fp

fp=fopen("d:\\lbh\\guanli.dat","r+")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

printf("\n 按学号删除(h),还是按姓名删除(m)?")

c=getch()

if(c=='h'||c=='H')

del_num(fp) /* 按学号删除 */

if(c=='m'||c=='M')

del_name(fp) /* 按姓名删 */

else

printf("\n 非法字符!\n")

fclose(fp)

}

/* 定义按学号删除信息管理系统的函数 */

void del_num(FILE *fp)

{

int n=0

char tempnum[10]

struct student record[N],*p,*k

p=record

while(feof(fp)==0)

{

fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

p++

n++

}

fclose(fp)

printf("\n 请输入要删除记录的学号:")

gets(tempnum)

for(k=recordk<record+nk++)

if(strcmp(tempnum,k->num)==0)

break /* 找到要删记录结束循环 */

if(k<record+n) /* 提前结束循环,说明找到人 */

for(p=kp<k+n-1p++) /* 向左移一位,相当于删除记录 */

*p=*(p+1)

else

printf("\n 无此人!\n")

fp=fopen("d:\\lbh\\guanli.dat","w")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

for(p=recordp<record+n-1p++)

fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

}

/* 定义按姓名删除信息管理系统的函数 */

void del_name(FILE *fp)

{

int n=0

char tempname[10]

struct student record[N],*p,*k

p=record

while(feof(fp)==0)

{

fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

p++

n++

}

fclose(fp)

printf("\n 请输入要删除记录的姓名:")

gets(tempname)

for(k=recordk<record+nk++)

if(strcmp(tempname,k->name)==0)

break /* 找到要删记录结束循环 */

if(k<record+n) /* 提前结束循环,说明找到人 */

for(p=kp<k+n-1p++) /* 向左移一位,相当于删除记录 */

*p=*(p+1)

else

printf("\n 无此人!\n")

fp=fopen("d:\\lbh\\guanli.dat","w")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

for(p=recordp<record+n-1p++)

fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

}

/* 定义排序信息管理系统的函数 */

void mysort()

{

char c

FILE *fp

fp=fopen("d:\\lbh\\guanli.dat","r+")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

fclose(fp)

printf("\n 按学号排序(h),还是按姓名排序(m)?")

c=getch()

if(c=='h'||c=='H')

sort_num() /* 按学号排序 */

if(c=='m'||c=='M')

sort_name() /* 按姓名排序 */

else

printf("\n 非法字符!\n")

}

/* 定义按学号排序信息管理系统的函数 */

void sort_num()

{

int i,j,k,n=0

char c

struct student record[N],*p,temp

FILE *fp

fp=fopen("d:\\lbh\\guanli.dat","r")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

p=record

while(feof(fp)==0)

{

fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

p++

n++

}

fclose(fp)

printf("\n 按升序(s),还是按降序(j)?")

c=getch()

if(c=='s'||c=='S')/* 按学号的升序排列 */

for(i=0i<n-1i++) /* 选择法排序 */

{

k=i

for(j=i+1j<nj++)

if(strcmp((p+k)->num,(p+j)->num)>0)

k=j

temp=*(p+k)

*(p+k)=*(p+i)

*(p+i)=temp

}

else

if(c=='j'||c=='J')/* 按学号的降序排列 */

for(i=0i<n-1i++) /* 选择法排序 */

{

k=i

for(j=i+1j<nj++)

if(strcmp((p+k)->num,(p+j)->num)<0)

k=j

temp=*(p+k)

*(p+k)=*(p+i)

*(p+i)=temp

}

else

{

printf("\n 非法字符!\n")

return

}

fp=fopen("d:\\lbh\\guanli.dat","w")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

for(p=recordp<record+np++)

{

fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

printf("%23s%15s%15s\n",p->num,p->name,p->tel)

}

fclose(fp)

}

/* 定义按姓名排序信息管理系统的函数 */

void sort_name()

{

int i,j,k,n=0

char c

struct student record[N],*p,temp

FILE *fp

fp=fopen("d:\\lbh\\guanli.dat","r+")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

p=record

while(feof(fp)==0)

{

fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

p++

n++

}

fclose(fp)

printf("\n 按升序(s),还是按降序(j)?")

c=getch()

if(c=='s'||c=='S')/* 按姓名的升序排列 */

for(i=0i<n-1i++) /* 选择法排序 */

{

k=i

for(j=i+1j<nj++)

if(strcmp((p+k)->name,(p+j)->name)>0)

k=j

temp=*(p+k)

*(p+k)=*(p+i)

*(p+i)=temp

}

else

if(c=='j'||c=='J')/* 按姓名的降序排列 */

for(i=0i<n-1i++) /* 选择法排序 */

{

k=i

for(j=i+1j<nj++)

if(strcmp((p+k)->name,(p+j)->name)<0)

k=j

temp=*(p+k)

*(p+k)=*(p+i)

*(p+i)=temp

}

else

{

printf("\n 非法字符!\n")

return

}

fp=fopen("d:\\lbh\\guanli.dat","w")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

for(p=recordp<record+np++)

fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

fclose(fp)

}

第一章 程序设计的基本概念

第一节 C语言的发展历史与特点

第二节 程序与程序设计

第三节 算法与算法的描述

第四节 C语言的上机 *** 作

思考题与习题

第二章 C语言程序设计基础

第一节 C语言的程序结构

第二节 数据类型

第三节 运算符与表达式

思考题与习题

第三章 C程序控制结构

第一节 C程序的三种基本控制结构

第二节 顺序结构

第三节 选择结构

第四节 循环结构

思考题与习题

第四章 数组

第一节 数组与数组元素的概念

第二节 一维数组

第三节 二维数组及多维数组

第四节 字符串与字符数组

思考题与习题

第五章 指针

第一节 指针与指针变量的概念

第二节 指针变量的定义和引用

第三节 指针变量与数组

思考题与习题

第六章 函数

第一节 函数的定义

第二节 函数的嵌套调用

第三节 数组作为函数参数

第四节 指针与函数

第五节 变量的使用范围与存储类别

第六节 不同文件中的函数使用

思考题与习题

第七章 编译预处理

第一节 宏定义

第二节 文件包含

第三节 条件编译

思考题与题

第八章 结构体与共用体

第一节 结构体基础

第二节 结构体数组

第三节 结构体指针

第四节 链表

第五节 位段

第六节 共用体

第七节 枚举类型与自定义类型

思考题与习题

第九章 文件

第一节 文件概述

第二节 文件的打开与关闭

第三节 文件的读/写

第四节 文件的定位

思考题与习题

第十章 程序设计方法

第一节 程序设计的基本概念

第二节 结构化程序设计方法

第三节 程序效率

第四节 程序设计风格

思考题与习题

附录

附录A C语言实验

附录B 标准ABSII码表

附录C C语言中的关键字

附录D 运算符的优先级与结合性


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存