C语言入门学习-C上机实验九要求

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、完善程序题
1.以下程序统计指定句子(即只含有字母、空格、句号的字符串)中的单词个数,并输出每个单词。
【本题的思路是:将每个单词存放到二维数组的每一行,则存放的行数即为单词的个数。】
#include <string.h>
#include <ctype.h>
main()
{char *text=" I will pass the examination in the summer holiday." ;
main()
{int i;
long f;
for(i=1;i<=N;i++)
f=____________________________;
printf("%d!=%ld\n",N,f);
}
long JC(int n)
{______________________________;
jc=jc*n;
return jc;
#define N 5
main()
{char s[N][20];//假设每个串的串长都小于20
char h[40]="";
char *p[N];//借助指针数组,可以只交换指向串的指针,不交换串本身
int i,j,k;
for(i=0;i<N;i++)//让指针数组p的每一个元素依次存放s每行的首地址
x=x/10;
}
for(i=____________;i>0;i--)
if(s[i]<s[i-1]){flag=0;break;}
______________________;
}
4.以下程序中的fun函数对二维数组中存储的n阶方阵做如下操作:先将每一行中值最大的元素与该行位于主对角线处的元素交换值,然后对主对角线上的所有元素排序使其左上角到右下角升序排列,最后输出排序后主对角线上各元素的值。
上机实验九函数综合练习一
【实验八参考答案见后】
目的和要求:
(1)熟练掌握参数传递的要领;
(2)掌握全局变量的使用要领;
(3)了解静态局部变量的特点。
实验内容:
一、完善程序题
1.求10!
【提示:本程序利用静态局部变量保留每次调用函数的结果。】
#include <stdio.h>
#define N10
________________________________;
}
void GYS_GBS(int a,int b,int *gy,int *gb)
{int c,r;
c=a*b;
r=a%b;
while(r!=0)
{a=b;
b=r;
r=a%b;
}
*gy=b;
*gb=c/b;
}
二、编程题
任意读入一个大偶数(≥4),可以拆分成两个素数之和。编程按“x=s1+s2”的格式输出所有的素数对。
{a[n][j++]=*(text+i);word=0;}
else
if(word==0){word=1;a[n][j]='\0';n++;j=0; }
printf("It has %d word.\n\n", n);
for(i=0;i<n;i++)
puts(a[i]);
}
2.用指针完成下列任务:输出如下矩阵:
if(a%k==0){flag=0;break;}
return flag;
}
main()
{long x;
long s1,s2;
do
scanf("%ld",&x);
while(x<4||x%2!=0);
s1=2;
s2=x-s1;
do
{while(!PDSS(s1)||!PDSS(s2))
{s1++; s2--;}
int (*q)[4];
q=a;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
*(*(_q+i_)+ _j_)=k++;
for(i=0;i<3;i++)
{for(j=0;j<4;j++) printf("%3d",___q[i][j]__);/*或a[i][j]或*(*(q+i)+j)*/
_____________________;
int i;
fun(a);
for(i=0;i<n;i++)
printf("%3d",a[i][i]);
printf("\n");
}
void fun(_____________________)
{int i, j, t, arr, col;
for(i=0;i<n;i++)
【要求:素数判断由子函数完成。并且结果不能出现两个相同的素数对,例如:输入28,则输出结果为:
28=5+23
28=11+17
若输出结果中还有“28=17+11”就重复了!】
#include <stdio.h>
int PDSS(int a)
{int flag=1;
long k;
for(k=2;k<a/2;k++)
}
2.以下程序中的trap函数是一个用梯形法求定积分的通用函数,梯形法求定积分s的公式为: ,
其中n为积分小区间数,以下程序调用trap函数求定积分,被积函数是:
f(x)=x*x+3*x+2,且n=1000,a=0,b=4。(程序运行结果参考:53.333344)
#include<stdio.h>
#include<math.h>
1 2 3 4
5 6 7 8
9 10 11 12
【法一:使用列指针完成,双重循环】
#include "stdio.h"
main()
{int a[3][4],i,j,k=1;
int *p;
p=a[0];/*或&a[0][0]*/
for(i=0;i<3;i++)
for(j=0;j<4;j++)
*(p+_____i*4+j____)=k++;
double mypoly(double x)
{return(x*x+3.0*x+2.0);
}
double trap(double a,double b)
{double t,h; int i,n=1000;
t=0.5*(mypoly(a)+mypoly(b));
h=______________/(double)(n);
int n, i, j, word;
char a[20][80];
while(*text==' ' )text++;/*去掉前导空格*/
n=0; j=0;
for(i=0;i<strlen(text);i++)
if(isalpha(*(text+i)))/* isalpha函数的功能是判断其参数是否为字母,要加"ctype.h"*/
for(i=1;i<=n-1;i++) t=t+_____________________;
t=t*h;
return(t);
}
main()
{double y;
y=__________________;
printf("%f\n",y);
}
3.下列程序完成的功能是:调用子函数求得数组a中所有的降序素数,即某正整数既是素数,又是降序数(所谓降序数,或是一位整数;或该数的高位数字大于等于低位数字,例如:-852。)
printf("\n");}
}
3.任意读入5个字符串,用选择法降序排列后输出,并将最大串和最小串连接后输出。例如,读入:
I
love
you
very
much
则输出:
you
very
much
来自百度文库love
I
合并后的串:youI
【程序如下,请填空:】
#include <stdio.h>
#include <string.h>
p[i]=s[i];
for(i=0;i<N;i++)//读入5个串,存放到s的每一行中
gets(s[i]);
//以下用选择法排序
for(i=0;i<=N-2;i++)
{k=i;
for(j=i+1;j<=N-1;j++)
if(strcmp(p[j],p[k])>0)k=j;
if(k!=i)
{char *t;
if(x%k==0){flag=0;break;}
return flag;
}
int JX(int x)/*此函数判断x是否降序数*/
{int s[20],i,k;
int flag=1;
if(x<0) x=-x;
if(x<10) return 1;
k=0;
while(____________)
{s[k++]=x%10;
#include<stdio.h>
#define N 5
int SS(int x);
int JX(int x);
main()
{inti , n=0;
int a[N]={-852,4321,9887,5,64};
for(i=0;i<N;i++)
if(____________________________)
#include <stdio.h>
main()
{int x,y,gys,gbs;
void GYS_GBS(int a,int b,int *gy,int *gb);
do
scanf("%d%d", &x ,&y);
while(x<=0||y<=0);
GYS_GBS(x,y,&gys,&gbs);
printf("%d和%d的最大公约数是%d,最小公倍数是%d\n",x,y,gys,gbs);
a[i/4][i%4]=j++;
p=a[0];
for(i=0;i<3;i++)
{for(j=0;j<4;j++) printf("%3d", *(p+i*4+j));
printf("\n");}
}
【法三:使用行指针完成】
#include "stdio.h"
main()
{ int a[3][4] ,i, j, k=1;
t=p[i];
p[i]=p[k];
p[k]=t;}
}
puts("降序排列后:");
for(i=0;i<N;i++)
puts(p[i]);
strcat(strcat(h,p[0]),p[N-1]);
printf("合并后的串:%s\n",h);
}
4.任意读入两个正整数,调用子函数求得二者的最大公约数和最小公倍数。
for(j=________;j<n;j++)
if(________________)
{t=________;________________;________=t;}
}
二、编程题
使用全局变量完成下列任务:任意读入10个整数,调用子函数求得它们的平均值、最大值、最小值后由主函数输出。
【实验八参考答案】
例如有:
10
25
24
13
23
8
10
24
13
23
4
3
6
9
7
4
9
6
9
7




2
15
19
16
18







2
15
17
16
18
17
9
4
5
3
5
9
4
19
3
2
1
6
7
8
2
1
6
7
25
输出结果为:8 9 17 19 25
#include<stdio.h>
#define n 5
void main()
{int a[n][n]={{10,25,24,13,23},{4,3,6,9,7},{2,15,19,16,18},{17,9,4,5,3},{2,1,6,7,8}};
for(i=0;i<3;i++)
{for(j=0;j<4;j++) printf("%3d", a[i][j]);
printf("\n");}
}
【法二:使用列指针完成,单循环】
#include "stdio.h"
main()
{int a[3][4],i,j=1;
int *p;
for(i=0;i<12;i++)
{arr=____________;
col=0;
for(j=1;j<n;j++)
if(x[i][j]>=arr)
{arr=x[i][j];
____________;
}
t=____________;
____________=x[i][col];
x[i][col]=t;
}
for(i=0;i<n-1;i++)//选择法变形
{n++;
printf("%6d",a[i]);}
if(n==0)printf("Array a has no JXSS!\n");
}
int SS(int x)/*此函数判断x是否素数*/
{int k,flag=1;
if(x<2)________________;
for(k=2;k<=x-1;k++)
if(s1<=s2)printf("%ld=%ld+%ld\n",x,s1,s2);
s1++; s2--;
}while(s1<s2);
}
相关文档
最新文档