C语言程序设计-笔记9-函数与程序结构
C语言程序设计-笔记9-函数与程序结构
例10-1 有序表的增删查操作。首先输入一个无重复元素的、从小到大排列的有序表,并在屏幕上显示以下菜单(编号和选项),用户可以反复对该有序表进行插入、删除和查找操作,也可以选择结束。当用户输入编号1-3和相关参数时,将分别对该有序表进行插入、删除和查找操作,输入其他编号,则结束操作。
[1] Insert
[2] Delete
[3] Query
[Other option] End
#include<stdio.h>
#define MAXN 100
int Count=0;
void select(int a[],int option,int value);
void input_array(int a[]);
void print_array(int a[]);
void insert(int a[],int value);
void remov(int a[],int value);
void query(int a[],int value);
int main(void)
{
int option,value,a[MAXN];
input_array(a);
printf("[1] Insert\n");
printf("[2] Delete\n");
printf("[3] Query\n");
printf("[Other option] End\n");
while(1)
{
printf("Input option:");
scanf("%d",&option);
if(option<1 || option>3)
{
break;
}
printf("Input an element:");
scanf("%d",&value);
select(a,option,value);
printf("\n");
}
printf("Thanks.");
return 0;
}
void print_array(int a[])
{
int i;
printf("The ordered array a is:");
for(i=0;i<Count;i++)
{
if(i==Count-1)
{
printf("%d",a[i]);
}
else
{
printf("%d ",a[i]);
}
}
}
void delet(int a[ ],int value)
{
int i,index=-1;
for(i=0;i<Count;i++)
{
if(value==a[i])
{
index=i;
break;
}
}
if(index==-1)
{
printf("Failed to find the data,deletion failed.");
}
else
{
for(i=index;i<Count-1;i++)
{
a[i]=a[i+1];
}
}
Count--;
print_array(a);
}
void select(int a[],int option,int value)
{
switch(option)
{
case 1:
insert(a,value);
break;
case 2:
delet(a,value);
break;
case 3:
query(a,value);
break;
}
}
void input_array(int a[])
{
int i;
printf("Input the number of array elements:");
scanf("%d",&Count);
printf("Input an ordered array element:");
for(i=0;i<Count;i++)
{
scanf("%d",&a[i]);
}
}
void insert(int a[],int value)
{
int i,j;
for(i=0;i<Count;i++)
{
if(value<a[i])
{
break;
}
}
for(j=Count-1;j>=i;j--)
{
a[j+1]=a[j];
}
a[i]=value;
Count++;
print_array(a);
}
void query(int a[],int value)
{
int mid,left=0,right=Count-1;
while(left<=right)
{
mid=(left+right)/2;
if(value==a[mid])
{
printf("The index is:%d",mid);
return;
}
else if(value<a[mid])
{
right=mid-1;
}
else
{
left=mid+1;
}
}
printf("This element does not exist.");
}
例10-2 用递归函数实现求n!。
·#include<stdio.h>
double fact(int n);
int main(void)
{
int n;
scanf("%d",&n);
printf("%f",fact(n));
return 0;
}
double fact(int n)
{
double result;
if(n==1 || n==0)
{
result=1;
}
else
{
result=n*fact(n-1);
}
return result;
}
例10-3 定义函数gcd(m,n),用递归法求m和n的最大公约数。
#include<stdio.h>
int gcd(int m,int n)
{
if(m%n==0)
{
return n;
}
else
{
return gcd(n,m%n);
}
}
int main(void)
{
int a,b,gys;
printf("Enter a,b:");
scanf("%d%d",&a,&b);
gys=gcd(a,b);
printf("%d\n",gys);
return 0;
}
例10-4 编写递归函数reverse(int n)实现将整数n逆序输出。
#include<stdio.h>
void reverse(int num)
{
if(num<=9)
printf("%d",num);
else
{
printf("%d",num%10);
reverse(num/10);
}
}
int main(void)
{
int a;
printf("Enter a:");
scanf("%d",&a);
reverse(a);
return 0;
}
例10-5 汉诺(Hanoi)塔问题。要求用程序模拟盘子搬动过程,并输出搬动步骤。
#include<stdio.h>
void hanoi(int n,char a,char b,char c);
int main(void)
{
int n;
printf("input the number of disk:");
scanf("%d",&n);
printf("the steps for %d disk are:\n",n);
hanoi(n,'a','b','c');
return 0;
}
void hanoi(int n,char a,char b,char c)
{
if(n==1)
{
printf("%c --> %c\n",a,b);
}
else
{
hanoi(n-1,a,c,b);
printf("%c --> %c\n",a,b);
hanoi(n-1,c,b,a);
}
}
例10-6 分治法求解金块问题:老板有一袋金块(共n块,2),两名最优秀的雇员每人可以得到其中一块,排名第一的得到最重的金块,排名第二的则得到袋子中最轻的金块。输入n及n个整数,用分治法求出最重金块和最轻金块。
/*分治法求a[m]-a[n]中最大值的递归函数*/
int max(int a[],int m,int n)
{
int k,u,v;
if(m==n) //数组a中只有1个元素,返回最大值a[m]
{
return a[m];
}
k=(m+n)/2; //计算中间元素的下标
u=max(a,m,k); //递归调用函数max(),在a[m]-a[k]中找出最大值赋给u
v=max(a,k+1,n); //同上
return(u>v)?u:v;
}
int min(int b[],int m,int n)
{
int k,u,v;
if(m==n)
{
return b[m];
}
k=(m+n)/2;
u=min(b,m,k);
v=min(b,k+1,n);
return(u<v)?u:v;
}
int main(void)
{
int n;
printf("Enter n:");
scanf("%d",&n);
int a[n];
int i;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int best,better;
best=max(a,0,n-1);
better=min(a,0,n-1);
printf("%d %d\n",best,better);
return 0;
}
例10-7 欧美国家长度使用英制单位,如英里、英尺、英寸等,其中1英里=1609米,1英尺=30.48厘米,1英寸=2.54厘米。请编写程序将输入的英里转换成米,英尺和英寸转换成厘米。
#include<stdio.h>
#define Mile_to_meter 1609
#define Foot_to_centimeter 30.48
#define Inch_to_centimeter 2.54
int main(void)
{
float foot,inch,mile;
printf("Input mile,foot and inch:");
scanf("%f%f%f",&mile,&foot,&inch);
printf("%f miles=%f meters\n",mile,mile*Mile_to_meter);
printf("%f feet=%f centimeters\n",foot,foot*Foot_to_centimeter);
printf("%f inches=%f centimeters\n",inch,inch*Inch_to_centimeter);
return 0;
}
例10-8 简单的带参数的宏定义。
#include<stdio.h>
#define MAX(a,b) a>b?a:b
#define SQR(x) x*x
int main(void)
{
int x,y;
scanf("%d%d",&x,&y);
x=MAX(x,y);
y=SQR(x);
printf("%d %d\n",x,y);
return 0;
}
例10-9 将例10-7中长度转换的宏定义成头文件length.h,并写出主函数文件。
#include<stdio.h>
#define Mile_to_meter 1609
#define Foot_to_centimeter 30.48
#define Inch_to_centimeter 2.54
int main(void)
{
float foot,inch,mile;
printf("Input mile,foot and inch:");
scanf("%f%f%f",&mile,&foot,&inch);
printf("%f miles=%f meters\n",mile,mile*Mile_to_meter);
printf("%f feet=%f centimeters\n",foot,foot*Foot_to_centimeter);
printf("%f inches=%f centimeters\n",inch,inch*Inch_to_centimeter);
return 0;
}
length.h头文件如下:
#define Mile_to_meter 1609
#define Foot_to_centimeter 30.48
#define Inch_to_centimeter 2.54
例10-10 请在例9-1、例9-2和例9-3的基础上,分模块设计一个学生信息库系统。该系统包含学生基本信息的建立和输出、计算学生平均成绩、按照学生的平均成绩排序以及查询、修改学生的成绩等功能。
//主函数程序文件student_system.c
#include "student.h"
#include "input_output.c" //用文件包含连接各程序文件模块
#include "computing.c"
#include "update.c"
#include "search.c"
int Count=0; //全局变量,记录当前学生总数
int main(void)
{
struct student students[MaxSize]; //定义学生信息结构数组
new_student(students); //输入学生信息结构数组
output_student(students); //显示输入的学生信息结构数组
average(students); //计算每一个学生的平均成绩
sort(students); //按学生的平均成绩排序
output_student(students); //显示排序后的结构数组
modify(students); //修改指定输入的学生信息
output_student(students); //显示修改后的结构数组
return 0;
}
#include <stdio.h>
#include <string.h>
#define MaxSize 50
struct student{
int num;
char name[10];
int computer,english,math;
double average;
};
//输入输出程序文件input_output.c
extern int Count; //外部变量声明
void new_student(struct student students[]) //新建学生信息的函数
{
int i,n;
printf("Input n:");
scanf("%d",&n);
printf("Input the student's number,name and course scores\n");
for(i=1;i<=n;i++)
{
printf("No.%d:",i);
scanf("%d%s%d%d%d",&students[i].num,students[i].name,&students[i].math,\
&students[i].english,&students[i].computer);
Count++;
}
}
void output_student(struct student students[]) //输出学生信息的函数
{
int i;
printf("output the student's number,name and course scores\n");
for(i=1;i<=Count;i++)
{
printf("%d\t %s\t %d\t %d\t %d\n",students[i].num,students[i].name,students[i].math,
students[i].english,students[i].computer);
}
}
//计算程序文件computing.c
extern int Count;
void average(struct student students[])
{
int i;
for(i=0;i<Count;i++)
{
students[i].average=(students[i].math+students[i].english+students[i].computer)/3.0;
printf("%.2f\n",students[i].average);
}
}
//修改程序文件update.c
extern int Count;
void modify(struct student *p) //修改学生成绩的函数
{
int i,num,course,score;
printf("Input the number of the students to be updated:");
scanf("%d",&num);
printf("Choice the course:1. math 2. english 3. computer:");
scanf("%d",&course);
printf("Input the new score:");
scanf("%d",&score);
for(i=0;i<Count;i++,p++)
{
if(p->num==num)
{
break;
}
}
if(i<Count)
{
switch(course)
{
case 1:p->math=score;break;
case 2:p->english=score;break;
case 3:p->computer=score;break;
}
}
}
void sort(struct student students[])//平均成绩排序的函数
{
int i,j,index;
struct student temp;
for(i=0;i<Count-1;++i)
{
index=i;
for(j=i+1;j<Count;j++)
{
if(students[j].average>students[index].average)
{
index=j;
}
}
temp=students[index];
students[index]=students[i];
students[i]=temp;
}
}
//查询程序文件search.c
extern int Count;
void search_student(struct student students[],int num)
{
int i,pos;
for(i=0;i<Count;i++)
{
if(students[i].num==num)
{
break;
}
}
if(i<Count)
{
pos=i;
printf("found the %d student\n"num);
}
else
{
pos=-1;
printf("not found the student\n");s
}
}
C语言程序设计-笔记9-函数与程序结构的更多相关文章
- C语言函数与程序结构
title : C语言函数与程序结构 tags : C语言作用域规则 , 外部变量 ,静态变量 ,寄存器变量,宏定义 grammar_cjkRuby: true --- 外部变量 变量声明用于说明变量 ...
- C语言程序设计第六次作业——循环结构(2)
C语言程序设计第六次作业--循环结构(2) 之前的博客园图片没处理好,对大家说一声抱歉.希望大家能够多多指出我的错误,我来认真修改 ^ - ^ !. (1)改错题 序列求和:输入一个正实数eps,计算 ...
- Go语言学习笔记(7)——函数和方法
Go语言中同时有函数和方法! 函数: go程序必须要包含一个main函数.main函数不能有任何参数和返回值! 1. 定义方法示例: func max(num1, num2 int) int { // ...
- 【Go语言学习笔记】函数做参数和闭包
函数做参数 在Go语言中,函数也是一种数据类型,我们可以通过type来定义它,它的类型就是所有拥有相同的参数,相同的返回值的一种类型.类似于重写(同名覆盖). 回调函数:函数有一个参数是函数类型,这个 ...
- 全国计算机等级考试二级教程-C语言程序设计_第14章_结构体、共用体和用户定义类型
函数的返回值是结构体类型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct ...
- Python3笔记010 - 3.1 程序结构
第3章 流程控制语句 3.1 程序结构 程序设计的基本结构: 顺序结构---顺序执行所有语句 选择结构---选择执行部分语句 循环结构---循环执行部分语句 1.顺序结构 按照顺序执行语句. 2.选择 ...
- 【Intel AF 2.1 学习笔记一】AF程序结构
Intel App Framework(原jqMobi)是用来开发hybrid app的开源免费框架,被intel收编之后发布了最新的2.1版本,最近正在学习.af的所谓程序结构,就是AF网页的架构, ...
- JavaScript语言精粹 笔记02 函数
函数函数对象函数字面量调用参数返回异常给类型增加方法递归作用域闭包回调模块级联套用记忆 函数 1 函数对象 在JS中函数就是对象.对象是“名/值”对的集合并拥有一个连接到原型对象的隐藏连接.对象字 ...
- JAVA语言程序设计-笔记摘录
JAVA 程序语言设计(基础篇) 笔记摘录 为避免输入错误, 不要在nextByte().nextShort().nextInt()等等后面使用nextLine() nextXXXXX()都称为令牌读 ...
- Go语言学习笔记(五) [函数]
日期:2014年7月29日 1.函数定义:func (p type) funcname(q int) (r,s int) {return 0,0 } func: 保留字,用于定义一个函数 ...
随机推荐
- 添加AvalonEdit控件到WinForm
public frmTest() { InitializeComponent(); ElementHost host = new ElementHost(); host.Size = new Size ...
- KingbaseES自动生成列介绍
在KingbaseES中create table语句支持GENERATED column(生成列). 生成列是一种特别的列类型,它的值基于其他列的值计算得出.因此,生成列之于列,有点像视图之于表的关系 ...
- mybatis一次执行多条SQL语句报错
如果这样来写一个 mapper 1 <update id="createTable3" parameterType="map"> 2 drop ta ...
- #轻重链剖分,交互#LOJ 6669 Nauuo and Binary Tree
题目 有一棵大小为\(n\)只知道根节点为1的二叉树, 可以不超过\(3*10^4\)询问两点之间距离, 最后输出除了点1以外其余点的祖先 \(n\leq 3000\) 分析 \(O(n^2)\)的时 ...
- #树状数组、dp#JZOJ 5361 捕老鼠
题目 农夫约的农庄里有\(N\)个仓库,排成了一排,编号为\(1-N\). 假设猫在第\(i\)个仓库点燃艾条,烟雾就会充满该仓库,并向左右扩散\(Ai\)的距离,接着所有\(|i-j|<=Ai ...
- ChatGPT商用网站源码+支持ai绘画(Midjourney)+GPT4.0+GPT3.5key绘画+Prompt角色+实时语音识别输入+后台一键版本更新!
ChatGPT商用网站源码+支持ai绘画(Midjourney)+GPT4.0+GPT3.5key绘画+Prompt角色+实时语音识别输入+后台一键版本更新! 1.网站系统源码介绍: 程序已支持Cha ...
- 探索“智”感生活,HMS Core线上Codelabs挑战赛第4期开始!
HMS Core线上Codelabs挑战赛第4期正式开始!我们向所有实践力超强.创新力满满的开发者发出邀请,用你的超级"码"力,解锁更多应用价值! 生活里,我们被手机"秒 ...
- Effective Python:简介
作者:布雷特·斯拉特金 本书的大部分范例代码都遵循Python 3.7版本的语法规范,Python 3.7发布于2018年6月.另外,书里还会给出一些采用Python 3.8语法规范所写的范例,让大家 ...
- 微软自带的Hyper-V虚拟机使用、VMware16安装Win10虚拟机介绍
一.首先介绍VMware虚拟机. 安装WIN10统虚拟机推荐用VMware16. 1.镜像网址: MSD网址传送门1:https://msdn.itellyou.cn MSD新网址传送门2:https ...
- 【笔记】GO内建容器--数组
go内建容器--数组 1.数量要写在类型的前面 2.可通过_省略变量 3.不仅是range,任何地方都可以使用_来省略变量 4.如果只要i,则可写成for i := range numbers 5.[ ...