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: 保留字,用于定义一个函数 ...
随机推荐
- Java 本月、上月第一天和最后一天
//本月 @Test public void test01() { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd&qu ...
- Kingbase Create Type 语句使用
Kingbase create type类型创建语句 说明: KingbaseES 数据库中,可以通过CREATE TYPE语句定义一种新的数据类型. 有八种形式的CREATE TYPE.它们分别创建 ...
- C#添加自定义控件
1.vs 控件工具箱添加选项卡 2.输入选项卡名称 我这里是Emgucv 3.点击选择项 4.点击浏览 找到Emgu.CV.Platform.NetFramework.dll 这是emgucv的C#控 ...
- OpenHarmony——内核对象队列之算法详解(下)
前言 OpenAtom OpenHarmony(以下简称"OpenHarmony") LiteOS-M 内核是面向 IoT 领域构建的轻量级物联网操作系统内核,具有小体积.低功耗. ...
- MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录
使用 ORDER BY 进行排序 使用 ORDER BY 语句按升序或降序对结果进行排序. ORDER BY 关键字默认按升序排序.要按降序排序结果,使用 DESC 关键字. 示例按名称按字母顺序排序 ...
- 【FAQ】集成分析服务的常见问题及解决方案
常见问题一:如何验证Analytics是否上报/接入成功?以及关键日志含义是什么? 在初始化Analytics SDK前添加SDK日志开关如下: HiAnalyticsTools.enableLog ...
- 金融App面临安全风险?解锁HMS Core安全检测服务解决方案
数字经济时代,金融类App成为人们理财.购买证券股票以及办理各项银行业务的重要载体.科技驱动着金融行业的转型升级,但在创新发展的同时,金融App面临的安全风险类型与场景也在持续增加.如何更好地规避安全 ...
- Linux之隔离技术
前言 Linux的内核有两大特性Namespace和CGroup,这两种特性可以在Linux主机上实现主机名.用户.网络等全局资源的隔离,也是实现网络虚拟化.容器技术的基础. 命名空间 Linux N ...
- spark 异常值过滤 IQR
def getIQR(df:DataFrame,colName:String):Array[Double]={ val tmpDf = df.withColumn(colName, col(colNa ...
- sql 语句系列(更新系列)[八百章之第六章]
使用另一个表更新记录 有时候我们的数据不会立即去更新,而是存在另外一张表中等待更新,这是在日常开发中常见的操作. update e set e.SAL=ns.SAL+e.SAL, e.COMM=ns. ...