C语言上机报告4.docx

上传人:b****7 文档编号:8691800 上传时间:2023-02-01 格式:DOCX 页数:14 大小:54.53KB
下载 相关 举报
C语言上机报告4.docx_第1页
第1页 / 共14页
C语言上机报告4.docx_第2页
第2页 / 共14页
C语言上机报告4.docx_第3页
第3页 / 共14页
C语言上机报告4.docx_第4页
第4页 / 共14页
C语言上机报告4.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C语言上机报告4.docx

《C语言上机报告4.docx》由会员分享,可在线阅读,更多相关《C语言上机报告4.docx(14页珍藏版)》请在冰豆网上搜索。

C语言上机报告4.docx

C语言上机报告4

一、实验内容

1.函数的定义与说明

2.函数的调用

3.数组作为函数参数

i.局部变量

ii.全局变量

4.指针变量

5.指针与字符串

6.指针与函数

7.指针数组

二、实验目的

1.熟悉函数的定义形式

2.了解函数调用的一般形式及调用方式

3.了解数组作为函数参数

4.熟悉变量的作用域和变量的存储类别

5.理解指针的概念,熟悉指针变量的用法

6.了解字符串指针作函数参数

7.了解指向函数的指针和指针函数

8.了解指针数组的概念

9.知道指向指针的指针的概念

三、代码及实现

习题七

1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。

解:

#include

intmain()

{

inta,b,max,min;

intyue(intx,inty);

intbei(intx,inty);

printf("请输入任意两个数:

");

scanf("%d,%d",&a,&b);

max=yue(a,b);

min=bei(a,b);

printf("max=%d,min=%d\n",max,min);

return0;

}

intyue(intx,inty)

{

inti,t;

for(i=1;i<=x&&i<=y;i++)

if(x%i==0&&y%i==0)

t=i;

return(t);

}

intbei(intx,inty)

{

intj;

if(x>=y)j=x;

elsej=y;

for(;!

(j%x==0&&j%y==0);j++);

return(j);

}

3.写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。

解:

#include

intmain()

{

intsushu(intm);

inta,s;

printf("请输入要判定的数:

");

scanf("%d",&a);

s=sushu(a);

if(s==1)

printf("%d是素数\n",a);

elseprintf("%d不是素数\n",a);

return0;

}

intsushu(intm)

{

inti,t;

for(i=2;i<=m;i++)

if(m%i==0&&i

if(m-i==0)t=1;

elset=0;

returnm;

}

4.写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。

解:

#include

intmain()

{

intzhuangzhi(intb[3][3]);

inta[3][3];

inti,j;

printf("请输入一个三维数组:

");

for(i=0;i<3;i++)

for(j=0;j<3;j++)

scanf("%d",&a[i][j]);

for(i=0;i<3;i++)

{

for(j=0;j<3;j++)

printf("%d",a[i][j]);

printf("\n");

}

zhuangzhi(a);

for(i=0;i<3;i++)

{

for(j=0;j<3;j++)

printf("%d",a[i][j]);

printf("\n");}

return0;

}

intzhuangzhi(intb[3][3])

{

inti,j,t;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

{

t=b[i][j];b[i][j]=b[j][i];b[j][i]=t;

}

return(b[3][3]);

}

6.写一函数,将两个字符串连接。

解:

#include

intmain()

{

voidlianjie(charstring1[],charstring2[],charstring[]);

chars1[100],s2[100],s[100];

printf("请输入两个字符串:

");

scanf("%s",s2);

lianjie(s1,s2,s);

printf("\nThenewstringis%s\n",s);

return0;

}

voidlianjie(charstring1[],charstring2[],charstring[])

{

inti,j;

for(i=0;string1[i]!

='\0';i++)

string[i]=string1[i];

for(j=0;string2[j]!

='0';j++)

string[i+j]=string2[j];

string[i+j]='\0';

}

8.写一函数,输入一个四位数字,要求输出这四个数字字符,但每两个数字间空格。

如输入1990,应输出"1990"。

解:

#include

intmain()

{

charf(charb);

inti;

chara[]={1,9,9,0}

f(a);

for(i=0;i<4;i++)

printf("%c",a[i])

return0;

}

charf(charb)

{

inti=0;

for(;i<4;i++)

printf("");

printf("%c",b[i]);

printf("\n");

}

9.编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出以上的结果。

解:

chartongji(charstr0[100];,charb)

intb[4];

{inti;

for(i=0;str0[i]!

='\0';i++)

{if(str0[i]>=65&&str0[i]<=90||str0[i]>=97&&str0[i]<=122)

b[0]++;

elseif(str0[i]>=48&&str0[i]<=57)

b[1]++;

elseif(str0[i]==32)

b[2]++;

elseb[3]++;}

}

#include

intmain()

{chartongji(charstr0[100],charb);

charstr1[100];

staticinti,a[4];

gets(str1);

tongji(str1,a);

printf("zimuShuziKonggeQita\n");

for(i=0;i<4;i++)

printf("%-8d",a[i]);

printf("\n");

return0;

}

13.用递归方法求n阶勒让德多项式的值递归公式为:

1

解:

floatp(floatx0,intn)

{floaty;

if(n==0||n==1)

if(n==1)y=x0;

elsey=1;

elsey=((2*n-1)*x0*p(x0,n-1)-(n-1)*p(x0,n-2))/n;

return(y);

}

#include

intmain()

{floatx,y0;inta,i;

scanf("%f,%d",&x,&a);

y0=p(x,a);

printf("y0=%.3f\n",y0);

return0;

}

14.输入10个学生5门课的成绩,分别用函数实现下列功能:

①计算每个学生的平均分

②计算每门课的平均分

③找出所有50个分数中最高的分数所对应的学生和课程;

④计算平均分方差:

其中,

为某一学生的平均分。

解:

15.写几个函数:

①输个10个职工的姓名和职工号;

②按职工号由小到大顺序排序,姓名顺序也随之调整;

③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。

解:

17.用递归法将一个整数n转换成字符串。

例如,输入483,应输出字符串"483"。

n的位数不确定,可以是任意位数的整数。

解:

18.给出年月日,计算该日是该年的第几天。

解:

#include

intmain()

{

intsum_day(intmonth,intday);

intleap(intyear);

intyear,month,day,days;

printf("输入日期(年,月,日):

\n");

scanf("%d,%d,%d",&year,&month,&day);

printf("%d%d%d",year,month,day);

days=sum_day(month,day);

if(leap(year)&&month>=3)

days=days+1;

printf("是第这一年的%d天。

\n",days);

return0;

}

intsum_day(intmonth,intday)

{

intday_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

inti;

for(i=1;i

day+=day_tab[i];

return(day);

}

intleap(intyear)

{

intleap;

leap=year%4==0&&year%100!

=0||year%400==0;

return(leap);

}

习题八

1.输入3个整数,按由小到大的顺序输出。

解:

#include

intmain()

{

voidswap(int*p1,int*p2);

inta1,a2,a3;

int*p1,*p2,*p3;

printf("请输入三个整数:

a1,a2,a3:

\n");

scanf("%d,%d,%d",&a1,&a2,&a3);

p1=&a1;

p2=&a2;

p3=&a3;

if(a1>a2)swap(p1,p2);

if(a1>a3)swap(p1,p3);

if(a2>a3)swap(p2,p3);

printf("结果输出顺序为:

%d,%d,%d\n",a1,a2,a3);

return0;

}

voidswap(int*p1,int*p2)

{

intp;

p=*p1;

*p1=*p2;

*p2=p;

}

2.输入3个字符串,按由小到大的顺序输出。

解:

#include

#include

intmain()

{

voidf(char*,char*);

charstr1[40],str2[40],str3[40];

printf("输入三个字符串:

\n");

gets(str1);

gets(str2);

gets(str3);

//引用标准库函数,对字符串进行比较

if(strcmp(str1,str2)>0)f(str1,str2);

if(strcmp(str1,str3)>0)f(str1,str3);

if(strcmp(str2,str3)>0)f(str2,str3);

printf("结果输出顺序为:

\n");

printf("%s\n%s\n%s\n",str1,str2,str3);

return0;

}

voidf(char*p1,char*p2)

{

charp[40];

strcpy(p,p1);

strcpy(p1,p2);

strcpy(p2,p);

}

3.上输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。

写3个函数:

①输入10个数;②进行处理;③输出10个数。

解:

#include

intmain()

{

voidinput(int*);

voidmax_min_value(int*);

voidoutput(int*);

intnumber[10];

input(number);//调用输入10个数的函数

max_min_value(number);

output(number);

return0;

}

voidinput(int*number)

{

inti;

printf("输入10个数:

\n");

for(i=0;i<10;i++)

scanf("%d",&number[i]);

}

voidmax_min_value(int*number)

{

int*max,*min,*p,temp;

max=min=number;

for(p=number+1;p

if(*p>*max)max=p;

elseif(*p<*min)min=p;

temp=number[0];

number[0]=*min;

*min=temp;

if(max==number)max=min;

temp=number[9];

number[9]=*max;

*max=temp;

}

voidoutput(int*number)

{

int*p;

printf("结果是:

\n");

for(p=number;p

printf("%d\t",*p);

printf("\n");

}

7.有一个字符串,包含n个字符。

写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。

解:

#include

#include

intmain()

{

voidcopystr(char*,char*,int);

intm;

charstr1[20],str2[20];

printf("输入字符串:

\n");

gets(str1);

printf("从哪一个字符开始复制?

\n");

scanf("%d",&m);

if(strlen(str1)

printf("输入错误!

\n");

else

{

copystr(str1,str2,m);

printf("结果是:

%s\n",str2);

}

return0;

}

voidcopystr(char*p1,char*p2,intm)

{

intn;

n=0;

while(n

{

n++;

p1++;

}

while(*p1!

='\0')

{

*p2=*p1;

p1++;

p2++;

}

*p2='\0';

}

15.有一个班4个学生,5门课程。

求第一门课程的平均分;找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;找出平均成绩在90分以上或全部课程成绩在85分以上的学生。

分别编3个函数实现以上3个要求。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1