二级C语言编程模拟题03

引言

小伙伴们好~~又到考C2的日子咯!希望题目能帮助大家,祝大家考试顺利!

*注:本人思路与答案在文章末尾,建议先做做再进行比较;本人能力有限,如有更优解或不懂的地方可私信。

---程序填空题

下列给定程序中,函数 fun 的功能是:在形参 ss 所指字符串数组中,将所有串长超过k的字符串中后面的字符删除,只保留前面的 k 个字符。ss 所指字符串数组中共有 N 个字符串,且串长小于 M 。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
注意:源程序不得增行或删行,也不得更改程序的结构!

#include  <stdio.h>
#include  <string.h>
#define   N   5
#define   M   10
/**********found**********/
void fun(char  (*ss) __1__, int  k)
{ int  i=0  ;
/**********found**********/
  while(i< __2__) {
/**********found**********/
    ss[i][k]=__3__;  i++;  }
}
main()
{ char  x[N][M]={"Create","Modify","Sort","skip","Delete"};
  int  i;
  printf("\nThe original string\n\n");
  for(i=0;i<N;i++)puts(x[i]);  printf("\n");
  fun(x,4);
  printf("\nThe string after deleted :\n\n");
  for(i=0; i<N; i++)  puts(x[i]);  printf("\n");
}

---程序修改题

下列给定程序中函数 fun 的功能是:根据以下公式求 π 值,并作为函数值返回。
例如,当给指定精度的变量 eps 输入0.0005时,应输出Pi=3.140578。


注意:源程序不得增行或删行,也不得更改的程序的结构!

#include <math.h>
#include <stdio.h>
double fun(double  eps)
{  double  s,t;     int  n=1;
   s=0.0;
/************found************/
   t=0;
   while( t>eps)
   {  s+=t;
      t=t * n/(2*n+1);
      n++;
   }
/************found************/
   return(s);
}
main()
{  double  x;
   printf("\nPlease enter a precision: "); scanf("%lf",&x);
   printf("\neps=%lf, Pi=%lf\n\n",x,fun(x));
}

---程序设计题

规定输入的字符串中只包含字母和 * 号。请编写函数 fun,其功能是:使字符串的前导 * 号不得多于 n 个,若多于 n 个,则删除多余的 * 号;若少于或等 n 个,则不做处理,字符串中间和尾部的 * 号不删除。
列如,字符串中的内容为:******A*BC*DEF*G****,若  n的值为 3,删除后,字符串中的内容应当是:***A*BC*DEF*G****,若n的值为8,则字符串中的内容仍为:******A*BC*DEF*G****。n的值在主函数中输入。
在编写函数时,不得使用 c 语言提供的字符串函数。
请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。

#include <stdio.h>
void  fun( char *a, int  n )
{
  

}

main()
{  char  s[81];  int  n;void NONO ();
   printf("Enter a string:\n");gets(s);
   printf("Enter n :  ");scanf("%d",&n);
   fun( s,n );
   printf("The string after deleted:\n");puts(s);
   NONO();
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
  FILE *in, *out ;
  int i, n ; char s[81] ;
  in = fopen("in.dat","r") ;
  out = fopen("out.dat","w") ;
  for(i = 0 ; i < 10 ; i++) {
    fscanf(in, "%s", s) ;
    fscanf(in, "%d", &n) ;
    fun(s,n) ;
    fprintf(out, "%s\n", s) ;    
  }
  fclose(in) ;
  fclose(out) ;
}

解析

程序填空题:

第一空中主函数传来的实参是一个二维字符数组,题目也已给出(*ss),秉着二维 数组行数可不写,列必须写的概念;此处应该填二维数组的列数。

第二空的下一行代码中,i 作为 ss 数组中循环行数的变量,一定是小于最大行数的。

第三空为赋值操作,k 在这里表示的是已保留的字符串的下一个位置的下标;需要一个字符串结尾函数。

             1. [M]                                                        2.N                                                         3.'\0' 

    

程序修改题:

第一处错误中,t 在循环体中有乘除运算,所以不能赋值为0。

第二处错误中,由给出公式可以看出, π / 2 才等于我们所计算的结果。

             1. t = 1                                                        2. return ( s * 2 );

程序设计题:

题目很长,大致的意思为字符串前的 * 不能超过 n 个;超过了就只保留n个,没超过不做修改。

先统计字符串前的 * 的个数;超过 n 时,只保留n个,把第一个不是 * 号的字符及其之后的字符依次向前偏移,再用 ' \ 0 ' 结尾。没超过n时,不做修改。

void  fun( char *a, int  n )
{
      int i=0,f=0;
      while(a[i]=='*')	i++;  //判断n的个数
  
      if (i>n) {     //超过n的个数修改
  	
  		    while(a[f]!='\0'){    //遍历整个字符串
  			
			        if(f<n)     a[f]='*';           //重新定义整个字符串,前 n 个字符为 * 
			        else        a[f]=a[i++];        //把除开始的*后的字符串依次向前移

  			        f++;

		    }
  	
      }


}

大家可以将对题目的看法私信或写到评论区吼,我会回复大家,一起学习进步🥰 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Emo怀秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值