c语言程序设计上机题目.docx

上传人:b****5 文档编号:6085177 上传时间:2023-01-03 格式:DOCX 页数:12 大小:91.46KB
下载 相关 举报
c语言程序设计上机题目.docx_第1页
第1页 / 共12页
c语言程序设计上机题目.docx_第2页
第2页 / 共12页
c语言程序设计上机题目.docx_第3页
第3页 / 共12页
c语言程序设计上机题目.docx_第4页
第4页 / 共12页
c语言程序设计上机题目.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

c语言程序设计上机题目.docx

《c语言程序设计上机题目.docx》由会员分享,可在线阅读,更多相关《c语言程序设计上机题目.docx(12页珍藏版)》请在冰豆网上搜索。

c语言程序设计上机题目.docx

c语言程序设计上机题目

1

、请编一个函数fun,它的功能是:

根据以下公式求π的值(要求满足精度0.0005,即,某项小于0.0005时停止迭代):

  

  程序运行后,如果输入精度0.0005,则程序输出多少。

  注意:

部分源程序存在PROG1.C中,请勿改动主函数和其他函数中的内容,仅在函数fun的指定的部位填入你编写的若干语句。

  试题源程序如下:

  #include<stdio.h>

  #include<math.h>

  doublefun(doubleeps)

  {

  }

  main()

  {doublex;

   printf("Inputeps:

");

   scanf("%lf",&x);printf("\neps=%lf,PI=%lf\n",x,fun(x));

  }

分析:

(1)本题所用基本算法应为累加。

假设累加值放在变量s中,累加项放在变量t中,累加操作由语句s=s+t;来实现。

  

(2)若称为第1累加项,则其前的1为第0累加项,其后的一项为第2累加项,按给定的公式可知,从第1累加项开始,后一项的累加项是前一项的值乘以。

所以当前的累加项应当是:

t=t*n/(2.0*n+1.0)。

表达式右边的t中是前一项的值,表达式左边的t为当前的每累加累加项。

请注意,不要写成:

t*n/(2*n+1)而进行整除。

  (3)若第0累加项的1作为s的初值,语句:

s=s+t;执行n次,就把第1到第n项累加到了s中。

每进行一次累加,n值增1。

  (4)把以上操作放在循环中。

按本题规定,当某项小于eps(0.0005)时停止迭代,因此若用while循环,可用t>=eps作为控制循环进行的条件:

  while(t>=eps){s+=t;n++;t=t*n/(2.0*n+1);}

  (5)注意应给所用变量赋适当的初值。

  (6)退出循环后,函数的返回值应是:

2*s。

3.请编写一个函数voidfun(charm,intk,intxx[]),该函数的功能是:

将大于整数m且紧靠m的k个素数存入xx所指的数组中。

例如,若输入17和5,则应输出:

19,23,29,31,37。

  注意:

部分源程序存在PROG1.C中,请勿改动主函数和其他函数中的内容,仅在函数fun的指定的部位填入你编写的若干语句。

  试题源程序如下:

  #include<stdio.h>

  voidfun(intm,intk,intxx[])

  {

  }

  main()

  {intm,n,zz[100];

   printf("\nPleaseentertwointegers(m&n):

");

   scanf("%d%d",&m,&n);

   fun(m,n,zz);

   for(m=0;m<n;m++)printf("%d",zz[m]);

   printf("\n\n");

  }

分析:

 

(1)本题的基本算法是求素数。

假设有整数i,若i不能被2到i之间的任意一个数除尽,则i就是素数;若一旦能被某个数除尽就不是素数。

  

(2)以下是求i是否为素数的基本算法:

变量ok用作i是素数的标志,ok为1,则i是素数。

  ok=1;

  for(p=2;p<i/2;p++)

  if(i%p==0){ok=0;break;}

  if(ok)……

  (3)本题要求把大于m的k个素数存入xx所指的数组中。

所以,i的值应大于m;取大于m的值逐一进行判断,若是素数就放入xx所指数组中。

把以上语句放入一个循环中:

  for(i=m+1,j=0;?

;i++)

  {ok=1;

   for(p=2;p<=i/2;p++)

   if(i%p==0){ok=0;break;}

    if(ok){xx[j]=i;j++;}

  }

  此处,变量i统计存入数组中元素的个数,同时作为下标。

  (4)按本题的要求,外循环结束的条件应当是:

j<k(j的值从0到k-1)。

只要求得了k个素数,就可退出循环。

因此在?

处应填入j<k。

∙ 1.一下程序

  fun(intx,inty)

  {staticintm=0,i=2;

  i+=m+1;m=i+x+y;returnm;}

  main()

  {intj=1,m=1,k;

  k=fun(j,m);printf("%d,",k);

  k=fun(j,m);printf("%d\n",k);

  }

  参考答案:

5,11

  2.若有定义:

char*x="abcdefghi";能正确运用了strcpy函数的是:

  chary[10];*s;strcpy(s=y+1,x+1);

  3.有以下程序执行后W结果是;

  intfun1(doublea){returna*a;}

  intfun2(doublex,doubley)

  {doublea=0,b=0;

  a=fun1(x);b=fun1(y);return(int)(a+b);}

  main()

  {doublew,w=fun2(1.1,2.0);.......}

  参考答案:

5.0

  4.设函数的fun定义形式为:

voidfun(charch,flaotx){.....}

  则对函数fun的调用语句是:

fun(32,32);

  5.已有定义chara[]="xyz",b[]={'x','y','z'};则叙述正确的是:

  a数组的长度大于b数组长度

∙ 6.一下叙述错误的是C)

  A.对于double类型数组,不可以直接用数组名进行整体输入或输出

  B.数组名代表的是数组所占存储区的首地址,其值不可改变

  C.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息

  D.可以通过赋值的方式确定数组元素的个数

  7.有以下程序:

  charfun(charx,chary)

  {if(x

  returny;}

  main()

  {inta='9',b='8',c='7';

  printf("%c\n",fun(fun(a,b),fun(b,c)));

  }

  参考答案是:

7

  8.若定义以下函数:

  doublemyadd(doublea,doubleb)

  {return(a+b);}

  并将其放在调用语句之后,则在调用之前应对其说明,正确的说明有:

  doublemyadd(double,double);

  doublemyadd(doubleb,doublea);

  doublemyadd(doubiex,doubley);

  9.有以下程序,执行后输出的是:

  fun(intx,inty)

  return(x+y);}

  main()

  inta=1,b=2,c=3,sum;

  sum=fun((a++,b++,a+b),c++);

  printf("%d\n",sum);}

  参考答案:

8

  10.有以下程序结果是

  #defineP3

  F(intx)

  {return(P*x*x);}

  main()

  {printf("%d\n",F(3+5));}

  参考答案:

192

∙一、DOS操作题

  1 删除当前目录下的目录ZSF\DAS。

  答案:

RD ZSF\DAS

  2 将当前目录下的目录KUY\GWE中的文件BTY.EXE改名为KJH.EXE。

  答案:

REN KUY\GWE\BTY.EXE KJH.EXE

  二、调试修改程序题

  下面程序中函数fun的功能是:

根据整型形参m,计算如下公式的值:

y=1+1/2!

+1/3!

+1/4!

+...+1/m!

  例如:

若m=6,则应输出:

1.718056。

  请改正函数fun中的错误,使它能得出正确的结果。

注意:

不要改动main函数,不得增行或删行,也不得更改程序的结构!

  #include〈conio.h〉

  #include〈stdio.h〉

  / *错误在fun函数中 * /

  double fun(int m)

  {int y=1, t=1; 

  int i;

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

  {t=t*1/i; y+= t; }

  return(y);

  }

  main()

  {int n;

  clrscr();

  printf("Enter n:

 ");

  scanf("%d", &n);

  printf("\nThe result is %1f\n", fun(n));

  }

  答案:

对fun子程序进行修改,修改以后的程序如下:

  double fun(int m)

  { double y=1, t=1; /*类型应为 double*/

  int i;

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

  {t=t*1.0/i; y+= t; }

  /* 此处应为 double 类型的数据进行运算*/

  return(y);

  }

转贴于:

计算机二级考试_考试大

【责编:

daiy  纠错】

  三、编程题

  请编一个函数int fun(int pm),它的功能是:

判断pm是否是素数。

若pm是素数,返回1;若不是素数,返回0。

pm的值由主函数从键盘读入。

  请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

  #include 〈conio.h〉

  #include 〈stdio.h〉

  #include 〈math.h〉

  int fun(int a)

  { /*答案开始 */

  ┇

  ┇

  /*答案结束 */

  }

  main() / * 主函数* /

  { int x;

  clrscr();

  printf("\nPlease enter a number:

"); 

  scanf("%d", &x);

  printf("%d\n", fun(x));

  }

  答案:

在函数fun中添加程序段如下:

  int fun(int a)

  { /*参考答案开始 */

  int i;

  if(a==2) return 1;

  i=2;

  while ((a%i)!

=0 && i〈=sqrt((float) a)) i++; 

  if ((a%i)==0)

  { printf("%d not is a prime!

",a); return 0; }

  printf("%d is a prime!

",a); return 1;

  /*参考答案结束 */   } 

1.请编制函数ReadDat( )实现从文件HEX.IN中读取100个十六进 

制数到字符串数组xx中; 请编制函数H16To10(), 将xx中的十六进 

制数转换成十进制数并把已转换的十进制数仍存放在字符串数组xx 

中, 最后调用函数WriteDat()把结果输出到DEC.OUT文件中。

 

原始数据文件存放的格式是:

 每行存放10个数, 并用逗号隔 

开。

(每个数均大于0且小于等于2000) 

注意:

 部分源程序存放在PROG1.C中。

 

请勿改动主函数main()和输出数据函数WriteDat()的内容。

 

/*参考答案*/ 

#include 

#include 

#include 

#include 

#define MAX 100 

char xx[MAX][20] ; 

void WriteDat(void) ; 

int ReadDat(void) 

{ FILE *fp ; 

int i,j; 

char c; 

if((fp = fopen("HEX.IN", "r")) == NULL) return 1 ; 

/***********读入数据并存放到数组xx中*************/ 

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

{ j = 0; 

while((c = (char) fgetc(fp)) !

= EOF) 

{ if(c == ’,’) 

{ xx[j] = ’\0’; 

break; 

else if(c !

= ’\n’ && c !

= ’\r’)/*去掉回车换行符*/ 

{ if(!

isdigit(c))/*如果是字母,则转换为大写*/ 

c &= 0xdf; 

xx[j] = c; 

++j; 

} } 

if(c == EOF) 

break; 

fclose(fp) ; 

return 0 ; 

}void H16To10(void) 

{ char str[20]; 

int i,j,len,val; 

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

{ strcpy(str,xx); 

转贴于:

计算机二级考试_考

2.ReadDat( )实现从文件FC.IN中读取1000个十进制 

整数到数组xx中; 请编制函数Compute()分别计算出xx中奇数的个 

数odd, 偶数的个数even, 平均值aver以及方差totfc的值, 最后调 

用函数WriteDat()把结果输出到FC1.OUT文件中。

 

计算方差的公式如下:

 

1 N 

totfc = ── ∑ (xx - aver)^2 

N i=1 

原始数据文件存放的格式是:

 每行存放10个数, 并用逗号隔 

开。

(每个数均大于0且小于等于2000) 

注意:

 部分源程序存放在PROG1.C中。

 

请勿改动主函数main()和输出数据函数WriteDat()的内容。

 

/*参考答案*/ 

#include 

#include 

#include 

#define MAX 1000 

int xx[MAX], odd = 0, even = 0 ; 

double aver = 0.0 , totfc = 0.0 ; 

void WriteDat(void) ; 

int ReadDat(void) 

FILE *fp ; 

int i,j; 

char c,str[20]; 

if((fp = fopen("FC.IN", "r")) == NULL) return 1 ; 

/***********读入数据并存放到数组xx中*************/ 

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

j = 0; 

while((c = (char) fgetc(fp)) !

= EOF) 

if(c == ’,’) 

str[j] = ’\0’; 

break; 

else if(c !

= ’\n’ && c !

= ’\r’)/*去掉回车换行符*/ 

str[j] = c; 

++j; 

xx = atoi(str); 

if(c == EOF) 

break; 

fclose(fp) ; 

return 0 ; 

void Compute(void) 

int i; 

long count = 0; 

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

if(xx & 1) 

odd++; 

else 

even++; 

count += xx; 

aver = (double)count/MAX; 

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

totfc += (xx - aver)*(xx - aver); 

totfc /= MAX; 

转贴于:

计算机3试3大设有n个人围坐一圈并按顺时针方向从1到n编号, 从第s个人开 

始进行1到m的报数, 报数到第m个人, 此人出圈, 再从他的下一个 

人重新开始1到m的报数, 如此进行下去直到所有的人都出圈为止。

 

现要求按出圈次序, 每10人一组, 给出这n个人的顺序表。

请考生 

编制函数Josegh()实现此功能并调用函数WriteDat()把结果p输出 

到文件JOSE.OUT中。

 

设 n = 100, s = 1, m = 10。

 

(1) 将1到n个人的序号存入一维数组p中; 

(2) 若第i个人报数后出圈, 则将p置于数组的倒数第i个位 

置上, 而原来第i+1个至倒数第i个元素依次向前移动一个 

位置; 

(3) 重复第

(2)步直至圈中只剩下p[1]为止。

 

注意:

 部分源程序存放在PROG1.C中。

 

请勿改动主函数main()和输出数据函数WriteDat()的内容。

 

/*参考答案*/ 

#include 

#define N 100 

#define S 1 

#define M 10 

int p[100], n, s, m ; 

void WriteDat(void) ; 

void Josegh(void) 

int i,j,s1,w; 

s1 = s; 

for(i = 1; i <= n; i++) 

p[i-1] = i; 

for(i = n; i>=2; i--) 

s1 = (s1 + m - 1)%i; 

if(s1 == 0) 

s1 = i; 

w = p[s1 - 1]; 

for(j = s1; j < i; j++) 

p[j - 1] = p[j]; 

p[i - 1] = w; 

void main() 

m = M ; 

n = N ; 

s = S ; 

Josegh() ; 

WriteDat() ; 

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

当前位置:首页 > 小学教育 > 其它课程

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

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