自考资讯

导航

自学考试《C语言程序设计》练习题及答案

来源 :中华考试网 2017-01-31

  【3.16】下面程序的功能是输出两个字符串中对应相等的字符。请选择填空。

  #include

  char x[]="programming";

  char y[]="Fortran";

  main()

  { int i=0;

  while(x[i]!= '\0' && y[i]!= '\0')

  if(x[i]==y[i])

  printf("%c", ① );

  else

  i++;

  }

  【3.17】下面程序的功能是将字符串s中的每个字符按升序的规则插到数组a中, 字符串a已排好序。

  #include

  main()

  { char a[20]="cehiknqtw";

  char s[]="fbla";

  int i,k,j;

  for(k=0;s[k]!= '\0';k++ )

  { j=0;

  while(s[k]>=a[j] && a[j]!= '\0' )

  j++;

  for( ① )

  ② ;

  a[j]=s[k];

  }

  puts(a);

  }

  【3.18】下面程序的功能是对键盘输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为"abcdefg"和"abceef",则输出为-1。

  #include

  main()

  { char str1[100],str2[100],c;

  int i,s;

  printf("Enter string 1: "); gets(str1);

  printf("Enter string 2: "); gets(str2);

  i=0;

  while((str1[i] == str2[i] && str1[i]!= ① ))

  i++;

  s= ② ;

  printf("%d\n", s);

  }

  【3.19】下面的函数expand在将字符串s复制到字符串t时, 将其中的换行符和制表符转换为可见的转义字符表示,即用'\n'表示换行符,用'\t'表示制表符。

  expand(char s[],char t[])

  { int i,j;

  for(i=j=0;s[i]!= '\0';i++ )

  switch (s[i])

  { case '\n': t[ ① ] = ② ;

  t[j++] = 'n';

  break;

  case '\t': t[ ③ ] = ④ ;

  t[j++] = 't';

  break;

  default: t[ ⑤ ] = s[i];

  break;

  }

  t[j] = ⑥ ;

  }

  【3.20】下面的函数index(char s[], char t[])检查字符串s中是否包含字符串t,若包含,则返回t在s中的开始位置(下标值),否则送回-1。

  index(char s[], char t[])

  { int i,j,k;

  for(i=0;s[i]!= '\0';i++ )

  { for(j=i,k=0; ① && s[j]==t[k];j++,k++) ;

  if( ② )

  return (i);

  }

  return(-1);

  }

  n

  【3.21】下面程序的功能是计算S= k! 。

  k=0

  long fun(int n)

  { int i;

  long s;

  for(i=1;i ① ;i++)

  s*=i;

  return( ② );

  }

  main()

  { int k,n;

  long s;

  scanf("%d",&n);

  s= ③ ;

  for(k=0;k<=n;k++)

  s+= ④ ;

  printf("%ld\n",s);

  }

  【3.22】下面程序的功能是显示具有n个元素的数组s中的最大元素。

  #define N 20

  main()

  { int i,a[N];

  for(i=0;i

  scanf("%d",&a[i]);

  printf("%d\n", ① );

  }

  fmax(int s[],int n)

  { int k,p;

  for(p=0,k=p;p

  if(s[p]>s[k]) ② ;

  return(k);

  }

  【3.23】下面程序的功能是由键盘输入n,求满足下述条件的x、y:

  nx和ny的末3位数字相同,且x≠y,x、y、n均为自然数,并使x+y为最小。

  #include

  pow3(int n,int x)

  { int i, last;

  for(last=1,i=1;i<=x;i++ )

  last= ① ;

  return(last);

  }

  main()

  { int x,n,min,flag=1;

  scanf("%d", &n);

  for(min=2;flag;min++)

  for(x=1;x

  if( ② && pow3(n,x)==pow3(n,min-x))

  { printf("x=%d,y=%d\n", x, min-x );

  ③ ;

  }

  }

  【3.24】下面的程序是用递归算法求a的平方根。求平方根的迭代公式如下:

  #include

  double mysqrt( double a, double x0 )

  { double x1, y;

  x1 = ① ;

  if( fabs(x1-x0)>0.00001 )

  y = mysqrt( ② );

  else y = x1;

  return( y );

  }

  main()

  { double x;

  printf("Enter x: ");

  scanf("%lf", &x);

  printf("The sqrt of %lf=%lf\n", x, mysqrt( x, 1.0) );

  }

  【3.25】以下程序是计算学生的年龄。已知第一位最小的学生年龄为10岁,其余学生的年龄一个比一个大2岁,求第5个学生的年龄。

  #include

  age( int n )

  { int c;

  if( n==1 ) c=10;

  else c= ① ;

  return(c);

  }

  main()

  { int n=5;

  printf("age:%d\n", ② );

  }

  【3.26】下面的函数sum(int n)完成计算1~n的累加和。

  sum(int n)

  { if(n<=0)

  printf("data error\n");

  if(n==1) ① ;

  else ② ;

  }

  【3.27】下面的函数是一个求阶乘的递归调用函数。

  facto(int n)

  { if( n == 1 ) ① ;

  else return( ② );

  }

  【3.28】组合问题,由组合的基本性质可知:

  (1) C(m,n)=C(n-m,n)

  (2) C(m,n+1)=C(m,n)+C(m-1,n)

  公式(2)是一个递归公式,一直到满足C(1,n)=n为止。当n<2*m时,可先用公式(1) 进行简化,填写程序中的空白,使程序可以正确运行。

  #include"stdio.h"

  main()

  { int m,n;

  printf("Input m,n=");

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

  printf("The combination numbeers is %d\n", combin(m,n));

  }

  combin( int m, int n)

  { int com;

  if( n<2*m ) m=n-m;

  if( m==0 ) com=1;

  else if(m==1) ① ;

  else ② ;

  return(com);

  }

  【3.29】下列函数是求一个字符串str的长度。

   int strlen( char *str )

  { if( ① ) return (0);

    else return ( ② );

  }

  【3.30】用递归实现将输入小于32768的整数按逆序输出。如输入12345,则输出54321。

  #include"stdio.h"

  main()

  { int n;

  printf("Input n : ");

  scanf("%d", ① );

  r(n);

  printf("\n");

  }

  r( int m )

  { printf("%d", ② );

  m = ③ ;

  if( ④ )

  ⑤ ;

  }

分享到

您可能感兴趣的文章