实验06 函数、编译预处理11 下载本文

内容发布更新时间 : 2024/5/17 18:19:26星期一 下面是文章的全部内容请认真阅读。

黔南民族师范学院数学系 C程序设计实验

void main() {

int i=11;

printf(\ dtob(i);

printf(\}

该函数是将十进制的数转为二进制。结果如下:

2.程序填空(根据题意在空白处填入适当的内容,使程序变得完整,并上机进行调试验证)

1) 程序说明:下面程序将输入的十进制数 n 转换为 b 进制数,并将转换结果输出。转换的方法是:除 b 取余法。

#include \

void transfer(int m,int k) {

int a[20],i;

for(i=0; m; i++) a[i]= m%k ; m/=k; }

for(;i>=0;i--)

printf(\}

void main() {

int b,n;

scanf(\ transfer ( b,n); ; }

班级: 13级数学系数应(2)班 姓名:韩侣 学号:13050152061 - 6 -

黔南民族师范学院数学系 C程序设计实验

2) 程序说明:歌德巴赫猜想指出:任何一个充分大的偶数都可以表示为两个素数之和,例如 4=2+2 6=3+3 8=3+5 ? 50=3+47。下面程序将 4-50 之间的所有偶数用两个素数之和表示,判断一个整数是否为素数用函数 prime 完成。

#include \int prime(int x) {

int k,flag=1;

for(k=2;k<=x/2;k++)

if( x%k==0 ) {

flag=0; break; }

return( flag ); }

void main() {

int m,n,k;

for(m=4;m<=50;m++) for(n=2;n

if(prime(n)&&(m%2==0)&&(k=m-n)&&(prime(k)) )

{

printf(\ break; } }

3) 程序说明:用一个一维数组存放 10 个学生的成绩,写一个函数求出平均分、最高分和最低分。

#include \ float max=0,min=0;

float average(float score[],int n)

班级: 13级数学系数应(2)班 姓名:韩侣 学号:13050152061 - 7 -

黔南民族师范学院数学系 C程序设计实验

{

int i;

float ave,sum=score[0];

max=min= score[0] ; for(i=1;imax) max=score[i]; else if( score[i]

ave=sum/10;

return (ave) ; }

void main() {

float ave,score[10]; int i;

for(i=0;i<10;i++) scanf(\ &score[i] ); ave=average( score,10 );

printf(\n”,max,min,ave); }

4) 程序说明:在主函数中读入一字符串,再读入一字符,然后调用函数delete在字符串中查找并删除该字符,最后输出该字符串。

#include \

void delete(char p[],char ch) {

int i=0,j;

while( ) { if(p[i]==ch) for(j=i;j< ;j++) p[i]=p[i+1]; else i++; } }

班级: 13级数学系数应(2)班 姓名:韩侣 学号:13050152061 - 8 -

黔南民族师范学院数学系 C程序设计实验

void main() {

char p[80],ch; int i=0,j;

scanf(\ scanf(\

delete( ); printf(\ ); }

5) 程序说明:输入10 个学生的学号及单科成绩,然后求出最高分的学号、最低分的学号以及超过平均分的人数。

#include \

int high_num, low_num;

int over_aver(int score[],int n) {

int i, imax, imin, over_num; float aver;

imax=0; imin=0; aver=0; for(i=0;iscore[imax]) imax=i; if(score[i]

aver/=n;

over_num=0; for(i=0;i=aver) over_num++; ____high_num=imax+1_______________; _____low_num=imin+1______________; return over_num; }

void main() {

int i, over_num, a[10]; printf(\ input a:\ for(i=0;i<10;i++) scanf(\

over_num=__over_aver(a,10)_________________;

班级: 13级数学系数应(2)班 姓名:韩侣 学号:13050152061 - 9 -

黔南民族师范学院数学系 C程序设计实验

printf(\ high_num,low_num=%d,%d\ low_num); printf(\ over_num=%d\ }

3.程序设计(根据题意编写程序并上机进行调试)

1) 用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”。n的位数不确定,可以是任意的整数。

#include void main() {

void c(long int m); long int n;

printf(\请输入一个任意整数\\n\ scanf(\

printf(\用递归法将其转换成字符串是:\\n\ if(n<0) {putchar('-'); n*=-1; } c(n);

printf(\}

void c(long int m) {

long int x;x=m/10; if(x!=0) c(x);

putchar(m+'0'); }

2) 求两个整数的最大公约数和最小公倍数。用一个函数求最大公约数,用另一函数根据求出的最大公约数求最小公倍数。

要求:求最大公约数用递归方法实现,递归公式为(r=m%n):

r?0,?n, gcd(n,m)???gcd(n,r), r?0.①不用全局变量,分别用两个函数求最大公约数和最小公倍数。两个整数在主函数中输人,并传送给函数l,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给函数2,以求出最小公倍数,再返回到主函数输出最大

班级: 13级数学系数应(2)班 姓名:韩侣 学号:13050152061 - 10 -