C语言上机报告4.docx
- 文档编号:8691800
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:14
- 大小:54.53KB
C语言上机报告4.docx
《C语言上机报告4.docx》由会员分享,可在线阅读,更多相关《C语言上机报告4.docx(14页珍藏版)》请在冰豆网上搜索。
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个要求。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 上机 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)