C语言实验报告(四)
一、实验目的
1. 掌握C语言中函数和模块
2. 掌握怎样定义函数,如何调用或使用函数,如何声明函数
3. 掌握函数的参数,了解在函数调用时,参数是如何传递的
4. 在使用函数的过程中怎样确定函数的参数
5. 如何使用局部变量和全局变量
二、实验内容
1. 偶数判断
描述: 编写一个用户自定义函数,该函数有一个整型参数,函数的功能是:当这个整型数的值是偶数时,函数的返回值为0,当这个整型数的值是奇数时,返回值为1 。编写一个程序,从键盘输入m个整数,分别调用用户自定义函数来判断这m个整数的奇偶性。
输入: 第一行为一个整数m,表示要判断m个整数的奇偶性;紧接着是m行,每行一个整数。
输出:有m行,分别对应输入的第2到第m+1行的整数的奇偶性
样例输入: 2
1
6
样例输出: 奇数
偶数
·程序代码:
#include"stdio.h"
int isEven(int a)
{
if(a%2==0)
return 1;
else
return 0;
}
int main()
{
int m,i,b;
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%d",&b);
if(isEven(b)==1)
printf("偶数\n");
else
printf("奇数\n");
}
return 0;
}
2. 温度转换
描述: 编写一个用户自定义函数,函数的功能是:将华氏温度转F换为摄氏温度C。转换公式为:C=5*(F-32)/9。编写一个程序,输出指定范围的华氏温度与摄氏温度的对照表,其中华氏温度步长为4。
输入: 两个空格隔开的整数n,m(且0<n<m<1000)
输出: 华氏温度与摄氏温度的对照表
样例输入: 32 45
样例输出: 32 0.00
36 2.22
40 4.44
44 6.67
·程序代码:
#include "stdio.h"
float conver(int f)
{
return 5*(f-32)/9.0;
}
int main()
{
int n,m,i;
scanf("%d%d",&n,&m);
for(i=n;i<=m;i+=4)
printf("%d%10.2f\n",i,conver(i));
return 0;
}
3.最大值函数
描述:编写一个用户自定义函数,该函数有三个整数参数,函数的功能是:求解这三个整数的最大值,函数的返回值为三个参数的最大值。编写一个程序,从键盘输入任意5个整数,分别两次调用用户自定义函数来求出这5个整数中的最大值。
输入:第一行为N,表示有N组数据,接下来是N行,每行是5个用空格隔开的整数(在VC++6.0 int范围)。
输出:有N行,每行是对应输入的5个整数的最大值。
样例输入: 3
1 2 3 4 5
5 4 3 2 1
1 2 5 3 4
样例输出: 5
5
5
·程序代码:
#include "stdio.h"
int max(int a, int b, int c )
{
int t;
t=a;
if(b>t)
t=b;
if(c>t)
t=c;
return t;
}
int main()
{
int n,a,b,c,d,e,i;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
printf("%d\n",max(a,b,max(c,d,e)));
}
return 0;
}
4. 三位数数字排序
描述: 对于给定的若干个三位正整数,将它们的各位上的数字按由小到大的顺序输出。要求,写一个函数,能将其整型参数的各位数字按照由小到大进行输出。主函数完成对输入的若干个三位数,分别调用该函数,完成指定的输出。
输入: 若干行,每行有一个三位正整数,输入为0结束。
输出: 有若干行,依次对应于非0的整数,将相应三位正整数的数字由小到大输出,数字间没有空格。
样例输入: 123
987
670
0
样例输出: 123
789
067
·程序代码:
#include "stdio.h"
int main(void)
{
int n,a[4],xx,sum;
scanf("%d",&n);
while(n!=0)
{
int i,j;
for(i=1;i<=3;i++)
{
a[i]=n%10;
n/=10;
}
for(i=1;i<=3;i++)
{
for(j=i;j<=3;j++)
{
if (a[i]>a[j])
{
xx=a[j];
a[j]=a[i];
a[i]=xx;
}
}
}
for(i=1;i<=3;i++)
{
printf("%d",a[i]);
}
printf("\n");
scanf("%d",&n);
}
return 0;
}
5.排列数计算
描述: 表示从m个元素中抽出n个元素的排列的个数。
计算公式为:编写一个用户自定义函数,该函数有一个整数参数,函数的功能是求解这个整数的阶乘,函数的返回值为这个整数的阶乘。编写一个程序,从键盘输入m、n值,分别两次调用用户自定义函数来求解
输入: 多行测试数据,每行两个用空格隔开的整数,0 0 表示结束。
输出: 有多行,对应于非0 0行的排列值。
样例输入: 5 3
8 2
0 0
样例输出: 60
56
·程序代码:
#include "stdio.h"
int main(void)
{
double n,m,t;
double x1,x2,i,k,kk;
scanf ("%lf%lf",&m,&n);
while (n!=0&&m!=0)
{
x1=1;
/*if(m<n)
{
t=m;
m=n;
n=t;
}
*/
for(i=1;i<=m;i++)
{
x1*=i;
}
k=m-n;
x2=1;
for(i=1;i<=k;i++)
{
x2*=i;
}
kk=x1/x2;
printf("%.0lf\n",kk);
scanf ("%lf%lf",&m,&n);
}
return 0;
}
6.素数对
描述: 哥德巴赫猜想大家都知道一点吧.我们现在不是想证明这个结论,而是想在程序语言内部能够表示的数集中,任意取出一个偶数,来寻找两个素数,使得其和等于该偶数.做好了这件实事,就能说明这个猜想是成立的.由于可以有不同的素数对来表示同一个偶数,所以专门要求所寻找的素数对是两个值最相近的,而且素数对中的第一个数不大于第二个数.
输入:输入中是一些偶整数M(6<M<=10000).
输出:对于每个偶数,输出两个彼此最接近的素数,其和等于该偶数(要求这两个素数是不等的)。
样例输入: 20
30
40
46
样例输出: 7 13
13 17
17 23
17 29
·程序代码:
#include "stdio.h"
int prime(int n)
{
int i;
for (i=2;i<n;i++)
if(n%i==0)
return 0;
return 1;
}
int main()
{
int m,i;
while(scanf("%d",&m)==1)
for(i=m/2;i>=2;i--)
if(prime(i)&&prime(m-i)&&i!=m-i)
{
printf("%d %d\n",i,m-i);
break;
}
return 0;
}
7.函数表达式计算
描述:计算下列表达式的值:
输入:输入x和n的值,其中x为非负实数,n为正整数。
输出:输出f(x,n),保留2位小数。
样例输入: 3 2
样例输出: 2.00
·程序代码:
#include "math.h"
#include "stdio.h"
/*
f(x,1)=sqrt(1+x);
f(x,2)=sqrt(2+sqrt(1+x))=sqrt(2+f(x,1));
f(3,x)=sqrt(3+sqrt(2+qrt(1+x)))=sqrt(3+f(x,2));
......
f(x,n)=sqrt(n+f(x,n-1));*/
double f(double x,int n)
{
if(n>1)
return sqrt(n+f(x,n-1));
else
return sqrt(1+x);
}
int main()
{
int n;
double x;
scanf("%lf%d",&x,&n);
printf("%.2f\n",f(x,n));
return 0;
}
8. 递归公约数
描述:递归形式的公约数定义如下:
使用此定义求两个整数的最大公约数。
输入: 有多行,每行为两个用空格隔开的整数。
输出: 对应的有多行,每行为对应输入的两个整数的最大公约数。
样例输入: 12 6
9 5
11 3
样例输出: 6
1
1
·程序代码:
# include "stdio.h"
int gcd(int m, int n )
{
if(m%n==0)
return n;
else
gcd(n,m%n);
}
int main(void)
{
int a,b;
while (scanf("%d%d",&a,&b)==2)
{
printf("%d\n",gcd(a,b));
}
return 0;
}
第二篇:C语言上机实验四(实验报告)
仲恺农业工程学院实验报告纸
计算机科学与工程(院、系)计算机专业计机093班 微机原理与接口技术课
学号 2009102143 姓名 实验日期 20##-6-6 教师评定
实验四 竞赛抢答器
一、实验目的
1、了解微机化竞赛抢答器的基本原理。
2、进一步学习使用并行接口。
二、实验内容
图1为竞赛抢答器(模拟)的原理图,逻辑开关K0~K7代表竞赛抢答按钮0~7号,当某个逻辑电平开关置“1”时,相当某组抢答按钮按下。在七段数码管上将其组号(0~7)显示出来,并使微机扬声器响一下。
图1 硬件连接图
表1 LED 数码表
三、编程提示
设置8255为C口输入、A口输出,读取C口数据,若为0表示无人抢答,若不为0则有人抢答。根据读取数据可判断其组号。从键盘上按空格键开始下一轮抢答,按其它键程序退出。
四、参考流程图(见图2)
图2 程序流程图
五、实验代码
data segment
led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov dx,28bh
mov ax,89h
out dx,al
mov bx,offset led
sss:
mov dx,28ah
in al,dx
or al,al
je sss
mov cl,0ffh
rr:
shr al,1
inc cl
jnc rr
mov al,cl
xlat
mov dx,288h
out dx,al
mov dl,7
mov ah,2
int 21h
vai:
mov ah,1
int 21h
cmp al,20h
jne eee
mov al,0
mov dx,288h
out dx,al
jmp sss
eee:
mov ah,4ch
int 21h
code ends
end start
六、实验总结
通过本次实验,我懂得了如何控制8255芯片工作,当一个逻辑开关的值置为“1”,8255根据输入,控制七段数码管显示相应的数字。