C语言编程题

时间:2024-09-26 13:45:39 飞宇 笔试题目 我要投稿
  • 相关推荐

C语言编程题

  C语言是一种广泛应用于系统编程、嵌入式开发、软件开发等多个领域的高级编程语言。它以其高效、灵活和可移植性而受到程序员的喜爱。对于初学者来说,掌握C语言的基础至关重要,这包括理解基本语法、控制结构(如选择结构和循环结构)、函数、指针以及数据结构(如结构体)。以下是小编整理的相关内容,一起来看看吧。

  C语言编程题 1

  1)读文件file1.txt的内容(例如):

  12

  34

  56

  输出到file2.txt:

  56

  34

  12

  (逆序)

  第一题,注意可增长数组的应用.

  #include

  #include

  int main(void)

  {

  int MAX = 10;

  int *a = (int *)malloc(MAX * sizeof(int));

  int *b;

  FILE *fp1;

  FILE *fp2;

  fp1 = fopen(“a.txt”,”r”);

  if(fp1 == NULL)

  {printf(“error1″);

  exit(-1);

  }

  fp2 = fopen(“b.txt”,”w”);

  if(fp2 == NULL)

  {printf(“error2″);

  exit(-1);

  }

  int i = 0;

  int j = 0;

  while(fscanf(fp1,”%d”,&a[i]) != EOF)

  {

  i++;

  j++;

  if(i >= MAX)

  {

  MAX = 2 * MAX;

  b = (int*)realloc(a,MAX * sizeof(int));

  if(b == NULL)

  {

  printf(“error3″);

  exit(-1);

  }

  a = b;

  }

  }

  for(;–j >= 0;)

  fprintf(fp2,”%d\n”,a[j]);

  fclose(fp1);

  fclose(fp2);

  return 0;

  }

  可谓是反序的经典例程.

  void inverse(char *p)

  {

  if( *p = = ‘\0′ )

  return;

  inverse( p+1 );

  printf( “%c”, *p );

  }

  int main(int argc, char *argv[])

  {

  inverse(“abc\0″);

  return 0;

  }

  借签了楼上的“递规反向输出”

  #include

  void test(FILE *fread, FILE *fwrite)

  {

  char buf[1024] = {0};

  if (!fgets(buf, sizeof(buf), fread))

  return;

  test( fread, fwrite );

  fputs(buf, fwrite);

  }

  int main(int argc, char *argv[])

  {

  FILE *fr = NULL;

  FILE *fw = NULL;

  fr = fopen(“data”, “rb”);

  fw = fopen(“dataout”, “wb”);

  test(fr, fw);

  fclose(fr);

  fclose(fw);

  return 0;

  }

  在对齐为4的情况下

  struct BBB

  {

  long num;

  char *name;

  short int data;

  char ha;

  short ba[5];

  }*p;

  p=0×1000000;

  p+0×200=____;

  (Ulong)p+0×200=____;

  (char*)p+0×200=____;

  希望各位达人给出答案和原因,谢谢拉

  解答:假设在32位CPU上,

  sizeof(long) = 4 bytes

  sizeof(char *) = 4 bytes

  sizeof(short int) = sizeof(short) = 2 bytes

  sizeof(char) = 1 bytes

  由于是4字节对齐,

  sizeof(struct BBB) = sizeof(*p)

  = 4 + 4 + 2 + 1 + 1/*补齐*/ + 2*5 + 2/*补齐*/ = 24 bytes (经Dev-C++验证)

  p=0×1000000;

  p+0×200=____;

  = 0×1000000 + 0×200*24

  (Ulong)p+0×200=____;

  = 0×1000000 + 0×200

  (char*)p+0×200=____;

  = 0×1000000 + 0×200*4

  你可以参考一下指针运算的细节

  2、运用四色定理,为N个局域举行配色,颜色为1、2、3、4四种,另有数组adj[][N],如adj[i][j]=1则表示i区域与j区域相邻,数组color[N],如color[i]=1,表示i区域的颜色为1号颜色。

  四色填充

  3、用递归算法判断数组a[N]是否为一个递增数组。

  递归的方法,记录当前最大的,并且判断当前的是否比这个还大,大则继续,否则返回false结束:

  bool fun( int a[], int n )

  {

  if( n= =1 )

  return true;

  if( n= =2 )

  return a[n-1] >= a[n-2];

  return fun( a,n-1) && ( a[n-1] >= a[n-2] );

  }

  4、编写算法,从10亿个浮点数当中,选出其中最大的10000个。

  用外部排序,在《数据结构》书上有

  《计算方法导论》在找到第n大的数的算法上加工

  5、编写一unix程序,防止僵尸进程的出现.

  3.可怕的题目终于来了

  象搜索的输入信息是一个字符串,统计300万输入信息中的最热门的.前十条,我们每次输入的一个字符串为不超过255byte,内存使用只有1G,

  请描述思想,写出算发(c语言),空间和时间复杂度,

  4.国内的一些帖吧,如baidu,有几十万个主题,假设每一个主题都有上亿的跟帖子,怎么样设计这个系统速度最好,请描述思想,写出算发(c语言),空间和时间复杂度,

  1. 简述一个Linux驱动程序的主要流程与功能。

  2. 请列举一个软件中时间换空间或者空间换时间的例子。

  void swap(int a,int b)

  {

  int c; c=a;a=b;b=a;

  }

  —>空优

  void swap(int a,int b)

  {

  a=a+b;b=a-b;a=a-b;

  }

  6. 请问一下程序将输出什么结果?

  char *RetMenory(void)

  {

  char p[] = “hellow world”;

  return p;

  }

  void Test(void)

  {

  char *str = NULL;

  str = RetMemory();

  printf(str);

  }

  RetMenory执行完毕,p资源被回收,指向未知地址。返回地址,str的内容应是不可预测的, 打印的应该是str的地址

  写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)

  功能:

  在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。例如:”abcd12345ed125ss123456789″的首地址传给intputstr后,函数将返回

  9,outputstr所指的值为123456789

  int continumax(char *outputstr, char *inputstr)

  {

  char *in = inputstr, *out = outputstr, *temp, *final;

  int count = 0, maxlen = 0;

  while( *in != ‘\0′ )

  {

  if( *in > 47 && *in < 58 )

  {

  for(temp = in; *in > 47 && *in < 58 ; in++ )

  count++;

  }

  else

  in++;

  if( maxlen < count )

  {

  maxlen = count;

  count = 0;

  final = temp;

  }

  }

  for(int i = 0; i < maxlen; i++)

  {

  *out = *final;

  out++;

  final++;

  }

  *out = ‘\0′;

  return maxlen;

  }

  不用库函数,用C语言实现将一整型数字转化为字符串

  方法1:

  int getlen(char *s){

  int n;

  for(n = 0; *s != ‘\0′; s++)

  n++;

  return n;

  }

  void reverse(char s[])

  {

  int c,i,j;

  for(i = 0,j = getlen(s) – 1; i < j; i++,j–){

  c = s[i];

  s[i] = s[j];

  s[j] = c;

  }

  }

  void itoa(int n,char s[])

  {

  int i,sign;

  if((sign = n) < 0)

  n = -n;

  i = 0;

  do{/*以反序生成数字*/

  s[i++] = n%10 + ’0′;/*get next number*/

  }while((n /= 10) > 0);/* the number*/

  if(sign < 0)

  s[i++] = ‘-’;

  s[i] = ‘\0′;

  reverse(s);

  }

  方法2:

  #include

  using namespace std;

  void itoint num);

  void itoint num)

  {

  int i = 0;

  int j ;

  char stra[10];

  char strb[10];

  while ( num )

  {

  stra[i++]=num%10+48;

  num=num/10;

  }

  stra[i] = ‘\0′;

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

  {

  strb[j] = stra[i-j-1];

  }

  strb[j] = ‘\0′;

  cout< }

  int main()

  {

  int num;

  cin>>num;

  itonum);

  return 0;

  }

  C语言编程题 2

  1、请编一个函数fun,它的功能是:根据以下公式求π的值(要求满足精度0.0005,即,某项小于0.0005时停止迭代):

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

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

  试题源程序如下:

  #include

  #include

  double fun(double eps)

  {

  }

  main()

  { double x;

  printf("Input eps:");

  scanf("%lf",&x); printf("eps=%lf, PI=%lf",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。2、请编一个函数fun,其中n所指存储单元中存放了数组中元素的个数。函数的功能是:删除所有值为y的元素。已在主函数中给数组元素赋值,y的值由主函数通过键盘读入。

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

  试题源程序如下:

  #include

  #define M 20

  void fun(int bb[],int *n, int y)

  {

  }

  main()

  { int aa[M]={1,2,3,3,2,1,1,2,3,4,5,4,3,2,1}, n=15, y, k;

  printf("The original data is: ");

  for(k=0; k

  fun(aa, &n, y);

  printf("The data after d %d: ",y);

  for(k=0; k

  }

  分析:

  (1)本题的基本算法是查找和删除。

  (2)若循环控制变量是i,通过for循环逐个检查元素中的值,把数组元素中不等于y的值从头开始重新放入bb所指的数组中。用i作为下标,逐个引用数组元素;用i作为下标,把不等于y的元素中的值逐一重新放入bb所指的数组中。这一操作可用以下语句来实现:

  if(bb[i]!=y)bb[j++]=bb[i];

  (3)因为已删除了与y值相等的元素,因此,数组中数据的个数已经改变;所以循环结束后,需要重新给n所指变量赋值。退出循环后,变量j中存放的是删除后数组中数据的个数,通过语句*n=j;把它赋给n所指变量即可。

  (4)主函数中输出aa数组中原有的数据,和删除后的.数据。考生可以对照所编函数是否正确。3.请编写一个函数void fun(char m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。例如,若输入17和5,则应输出:19,23,29,31, 37。

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

  试题源程序如下:

  #include

  void fun(int m, int k, int xx[])

  {

  }

  main()

  { int m, n, zz[100];

  printf("Please enter two integers(m & n): ");

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

  fun(m, n, zz);

  for(m=0; m

  printf("");

  }

  分析:

  (1)本题的基本算法是求素数。假设有整数i,若i不能被2到i之间的任意一个数除尽,则i就是素数;若一旦能被某个数除尽就不是素数。

  (2)以下是求i是否为素数的基本算法:变量ok用作i是素数的标志,ok为1,则i是素数。

  ok=1;

  for(p=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

《C语言编程题.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【C语言编程题】相关文章:

C语言编程练习04-05

学习c语言编程总结07-11

经典C语言面试算法题03-17

Visual C#的Excel编程03-19

浅析基于C语言的计算机软件编程实验03-20

C++编程简历表格11-22

2017年计算机二级考试C语言编程题练习题及答案03-10

C++/C程序员基本编程技能笔试10-26

C++/C程序员编程技能笔试题04-04

在线咨询

C语言编程题

  C语言是一种广泛应用于系统编程、嵌入式开发、软件开发等多个领域的高级编程语言。它以其高效、灵活和可移植性而受到程序员的喜爱。对于初学者来说,掌握C语言的基础至关重要,这包括理解基本语法、控制结构(如选择结构和循环结构)、函数、指针以及数据结构(如结构体)。以下是小编整理的相关内容,一起来看看吧。

  C语言编程题 1

  1)读文件file1.txt的内容(例如):

  12

  34

  56

  输出到file2.txt:

  56

  34

  12

  (逆序)

  第一题,注意可增长数组的应用.

  #include

  #include

  int main(void)

  {

  int MAX = 10;

  int *a = (int *)malloc(MAX * sizeof(int));

  int *b;

  FILE *fp1;

  FILE *fp2;

  fp1 = fopen(“a.txt”,”r”);

  if(fp1 == NULL)

  {printf(“error1″);

  exit(-1);

  }

  fp2 = fopen(“b.txt”,”w”);

  if(fp2 == NULL)

  {printf(“error2″);

  exit(-1);

  }

  int i = 0;

  int j = 0;

  while(fscanf(fp1,”%d”,&a[i]) != EOF)

  {

  i++;

  j++;

  if(i >= MAX)

  {

  MAX = 2 * MAX;

  b = (int*)realloc(a,MAX * sizeof(int));

  if(b == NULL)

  {

  printf(“error3″);

  exit(-1);

  }

  a = b;

  }

  }

  for(;–j >= 0;)

  fprintf(fp2,”%d\n”,a[j]);

  fclose(fp1);

  fclose(fp2);

  return 0;

  }

  可谓是反序的经典例程.

  void inverse(char *p)

  {

  if( *p = = ‘\0′ )

  return;

  inverse( p+1 );

  printf( “%c”, *p );

  }

  int main(int argc, char *argv[])

  {

  inverse(“abc\0″);

  return 0;

  }

  借签了楼上的“递规反向输出”

  #include

  void test(FILE *fread, FILE *fwrite)

  {

  char buf[1024] = {0};

  if (!fgets(buf, sizeof(buf), fread))

  return;

  test( fread, fwrite );

  fputs(buf, fwrite);

  }

  int main(int argc, char *argv[])

  {

  FILE *fr = NULL;

  FILE *fw = NULL;

  fr = fopen(“data”, “rb”);

  fw = fopen(“dataout”, “wb”);

  test(fr, fw);

  fclose(fr);

  fclose(fw);

  return 0;

  }

  在对齐为4的情况下

  struct BBB

  {

  long num;

  char *name;

  short int data;

  char ha;

  short ba[5];

  }*p;

  p=0×1000000;

  p+0×200=____;

  (Ulong)p+0×200=____;

  (char*)p+0×200=____;

  希望各位达人给出答案和原因,谢谢拉

  解答:假设在32位CPU上,

  sizeof(long) = 4 bytes

  sizeof(char *) = 4 bytes

  sizeof(short int) = sizeof(short) = 2 bytes

  sizeof(char) = 1 bytes

  由于是4字节对齐,

  sizeof(struct BBB) = sizeof(*p)

  = 4 + 4 + 2 + 1 + 1/*补齐*/ + 2*5 + 2/*补齐*/ = 24 bytes (经Dev-C++验证)

  p=0×1000000;

  p+0×200=____;

  = 0×1000000 + 0×200*24

  (Ulong)p+0×200=____;

  = 0×1000000 + 0×200

  (char*)p+0×200=____;

  = 0×1000000 + 0×200*4

  你可以参考一下指针运算的细节

  2、运用四色定理,为N个局域举行配色,颜色为1、2、3、4四种,另有数组adj[][N],如adj[i][j]=1则表示i区域与j区域相邻,数组color[N],如color[i]=1,表示i区域的颜色为1号颜色。

  四色填充

  3、用递归算法判断数组a[N]是否为一个递增数组。

  递归的方法,记录当前最大的,并且判断当前的是否比这个还大,大则继续,否则返回false结束:

  bool fun( int a[], int n )

  {

  if( n= =1 )

  return true;

  if( n= =2 )

  return a[n-1] >= a[n-2];

  return fun( a,n-1) && ( a[n-1] >= a[n-2] );

  }

  4、编写算法,从10亿个浮点数当中,选出其中最大的10000个。

  用外部排序,在《数据结构》书上有

  《计算方法导论》在找到第n大的数的算法上加工

  5、编写一unix程序,防止僵尸进程的出现.

  3.可怕的题目终于来了

  象搜索的输入信息是一个字符串,统计300万输入信息中的最热门的.前十条,我们每次输入的一个字符串为不超过255byte,内存使用只有1G,

  请描述思想,写出算发(c语言),空间和时间复杂度,

  4.国内的一些帖吧,如baidu,有几十万个主题,假设每一个主题都有上亿的跟帖子,怎么样设计这个系统速度最好,请描述思想,写出算发(c语言),空间和时间复杂度,

  1. 简述一个Linux驱动程序的主要流程与功能。

  2. 请列举一个软件中时间换空间或者空间换时间的例子。

  void swap(int a,int b)

  {

  int c; c=a;a=b;b=a;

  }

  —>空优

  void swap(int a,int b)

  {

  a=a+b;b=a-b;a=a-b;

  }

  6. 请问一下程序将输出什么结果?

  char *RetMenory(void)

  {

  char p[] = “hellow world”;

  return p;

  }

  void Test(void)

  {

  char *str = NULL;

  str = RetMemory();

  printf(str);

  }

  RetMenory执行完毕,p资源被回收,指向未知地址。返回地址,str的内容应是不可预测的, 打印的应该是str的地址

  写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)

  功能:

  在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。例如:”abcd12345ed125ss123456789″的首地址传给intputstr后,函数将返回

  9,outputstr所指的值为123456789

  int continumax(char *outputstr, char *inputstr)

  {

  char *in = inputstr, *out = outputstr, *temp, *final;

  int count = 0, maxlen = 0;

  while( *in != ‘\0′ )

  {

  if( *in > 47 && *in < 58 )

  {

  for(temp = in; *in > 47 && *in < 58 ; in++ )

  count++;

  }

  else

  in++;

  if( maxlen < count )

  {

  maxlen = count;

  count = 0;

  final = temp;

  }

  }

  for(int i = 0; i < maxlen; i++)

  {

  *out = *final;

  out++;

  final++;

  }

  *out = ‘\0′;

  return maxlen;

  }

  不用库函数,用C语言实现将一整型数字转化为字符串

  方法1:

  int getlen(char *s){

  int n;

  for(n = 0; *s != ‘\0′; s++)

  n++;

  return n;

  }

  void reverse(char s[])

  {

  int c,i,j;

  for(i = 0,j = getlen(s) – 1; i < j; i++,j–){

  c = s[i];

  s[i] = s[j];

  s[j] = c;

  }

  }

  void itoa(int n,char s[])

  {

  int i,sign;

  if((sign = n) < 0)

  n = -n;

  i = 0;

  do{/*以反序生成数字*/

  s[i++] = n%10 + ’0′;/*get next number*/

  }while((n /= 10) > 0);/* the number*/

  if(sign < 0)

  s[i++] = ‘-’;

  s[i] = ‘\0′;

  reverse(s);

  }

  方法2:

  #include

  using namespace std;

  void itoint num);

  void itoint num)

  {

  int i = 0;

  int j ;

  char stra[10];

  char strb[10];

  while ( num )

  {

  stra[i++]=num%10+48;

  num=num/10;

  }

  stra[i] = ‘\0′;

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

  {

  strb[j] = stra[i-j-1];

  }

  strb[j] = ‘\0′;

  cout< }

  int main()

  {

  int num;

  cin>>num;

  itonum);

  return 0;

  }

  C语言编程题 2

  1、请编一个函数fun,它的功能是:根据以下公式求π的值(要求满足精度0.0005,即,某项小于0.0005时停止迭代):

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

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

  试题源程序如下:

  #include

  #include

  double fun(double eps)

  {

  }

  main()

  { double x;

  printf("Input eps:");

  scanf("%lf",&x); printf("eps=%lf, PI=%lf",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。2、请编一个函数fun,其中n所指存储单元中存放了数组中元素的个数。函数的功能是:删除所有值为y的元素。已在主函数中给数组元素赋值,y的值由主函数通过键盘读入。

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

  试题源程序如下:

  #include

  #define M 20

  void fun(int bb[],int *n, int y)

  {

  }

  main()

  { int aa[M]={1,2,3,3,2,1,1,2,3,4,5,4,3,2,1}, n=15, y, k;

  printf("The original data is: ");

  for(k=0; k

  fun(aa, &n, y);

  printf("The data after d %d: ",y);

  for(k=0; k

  }

  分析:

  (1)本题的基本算法是查找和删除。

  (2)若循环控制变量是i,通过for循环逐个检查元素中的值,把数组元素中不等于y的值从头开始重新放入bb所指的数组中。用i作为下标,逐个引用数组元素;用i作为下标,把不等于y的元素中的值逐一重新放入bb所指的数组中。这一操作可用以下语句来实现:

  if(bb[i]!=y)bb[j++]=bb[i];

  (3)因为已删除了与y值相等的元素,因此,数组中数据的个数已经改变;所以循环结束后,需要重新给n所指变量赋值。退出循环后,变量j中存放的是删除后数组中数据的个数,通过语句*n=j;把它赋给n所指变量即可。

  (4)主函数中输出aa数组中原有的数据,和删除后的.数据。考生可以对照所编函数是否正确。3.请编写一个函数void fun(char m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。例如,若输入17和5,则应输出:19,23,29,31, 37。

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

  试题源程序如下:

  #include

  void fun(int m, int k, int xx[])

  {

  }

  main()

  { int m, n, zz[100];

  printf("Please enter two integers(m & n): ");

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

  fun(m, n, zz);

  for(m=0; m

  printf("");

  }

  分析:

  (1)本题的基本算法是求素数。假设有整数i,若i不能被2到i之间的任意一个数除尽,则i就是素数;若一旦能被某个数除尽就不是素数。

  (2)以下是求i是否为素数的基本算法:变量ok用作i是素数的标志,ok为1,则i是素数。

  ok=1;

  for(p=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