C语言程序设计练习题
1.背景:
    你是一名室内装潢工程队的配料员。你的伙伴们喜欢采用“之”字型的方式铺大理石地砖,图案如下:
1
2
6
7
15
3
5
8
14
16
4
9
13
17
22
10
12
18
21
23
11
19
20
24
25
学了 C 语言以后,你决定编写一个程序,帮助你的同伴生成这样的图形。
输入:
    方阵N的大小。
switch case判断字符串
输出;
    方阵。
1.#include<stdio.h> 
2.int main() 
3.{  int i=0j=0gnt=1; 
4.    int a[100][100]; 
5.    scanf("%d"&n); 
6.    for(g=0;g<n;g++) 
7.    {    if(g%2!=0) 
8.        {      for(i=0j=g;i<=g&&j>=0;i++j--) 
9.            {      a[i][j]=t; 
10.                t++;  } 
11.        } 
12.        else 
13.        {  for(i=gj=0;i>=0&&j<=g;i--j++) 
14.            {      a[i][j]=t; 
15.                t++;  } 
16.        } 
17.    } 
18.    for(g=1;g<n;g++) 
19.    {  if(g%2!=0) 
20.        {  for(i=gj=n-1;i<n&&j>=g;i++j--) 
21.            {      a[i][j]=t; 
22.                t++;  } 
23.        } 
24.        else   
25.        {  for(i=n-1j=g;i>=g&&j<n;i--j++) 
26.            {      a[i][j]=t; 
27.                t++;  } 
28.        } 
29.    } 
30.    for(i=0;i<n;i++) 
31.    {  for(j=0;j<n;j++) 
32.        {      if(j==n-1) 
33.            printf("%2d"a[i][j]); 
34.            else 
35.            printf("%2d "a[i][j]);  }   
36.         printf("\n");  } 
37.    return 0; 
38.
2. 有一种特殊形式的字符串,其正反序相同,被称为“回文字符串”。例如LeveL就是一个回文字符串。
输入:
          字符串
输出:
          Yes或者No
说明:
          如输出Yes,说明输入的字符串是一个回文字符串
          输出No,说明输入的字符串不是一个回文字符串
          请使用递归算法实现。
1.#include<stdio.h> 
2.#include<string.h> 
3.int main() 
4.
5.    char a[100]; 
6.    int ij=1k; 
7.    gets(a); 
8.    k=strlen(a); 
9.    for(i=0;i<k/2;i++) 
10.    {    if(a[i]!=a[k-i-1]) 
11.        {      j=0; 
12.            break;    } 
13.    } 
14.    if(j==0) 
15.        printf("No\n"); 
16.    else 
17.        printf("Yes\n"); 
18.
3.字符串匹配问题:输入一个字符串,计算其中包含的连续给定的子字符串的个数。
例如输入字符串" EFABCABCABCDABCDD ” 给定子字符串" ABC” ,输出是 3 。
函数原型: int countsub( char *str char *subs ) 。
参数说明: str 保存输入的字符串的首地址, subs 保存需要统计的子字符串的首地址。
返回值:包含的连续子字符串的个数。
预设代码:
1./* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */ 
2.#include <stdio.h> 
3.int countsub( char *str char *ss ); 
4.main( ) 
5.{    char s1[1000] = {0} s2[100] = {0}; 
6.    gets(s1); 
7.    gets(s2); 
8.    printf("%d\n" countsub( s1 s2 ) );  } 
9./* PRESET CODE END - NEVER TOUCH CODE ABOVE */ 
代码:
1.int countsub(char *strchar *ss) 
2.{  int ijqk=0rmax=0flag=1h; 
3.    for(r=0;str[r]!='\0';r++); 
4.    for(i=0;i<=r;) 
5.    {      for(j=iq=0;j<=r;j++) 
6.        {      if(ss[q]=='\0') 
7.            {  h=q; 
8.                k++; 
9.                flag=0; 
10.                break;  } 
11.            if(str[j]==ss[q]) 
12.            q++; 
13.            else 
14.            {  if(k>max) 
15.                max=k; 
16.                k=0; 
17.                flag=1; 
18.                break;  } 
19.        } 
20.        if(flag) 
21.        i++; 
22.        else 
23.        i=i+h;  } 
24.    return max; 
25. } 
4.功能:
    求整数 n 到 m 区间的累加和,其中n<=m。
输入:
    区间的起始点n  区间的终止点m
输出:
    累加和
要求:
    使用递归算法完成。如此简单的题目当然要有隐含的测试用例啦,就3个,看看谁能猜出来。
1.#include<stdio.h> 
2.int main() 
3.{  int s=0ijk; 
4.    scanf("%d %d"&i&j); 
5.    k=i; 
6.    for(;i<=j;i++) 
7.        s+=i; 
8.    printf("The sum from %d to %d is %d.\n"kjs); 
9.    return 0; 
10.
5.小明上来大学,学习了用求解平方根的迭代公式。
其中:p 为 x 的近似平方根,e 是结果允许的误差。
输入:x e
输出:p  保留小数点后 8 位。
1.#include<stdio.h> 
2.#include<math.h> 
3.double mysqrt(double xdouble ydouble e) 
4.{  if(fabs(y*y-x)<e) 
5.        ; 
6.    else 
7.        y=mysqrt(x(y+x/y)/2e); 
8.    return y;  } 
9.int main() 
10.{      double xe; 
11.    scanf("%lf %lf"&x&e); 
12.    printf("%.8lf\n"mysqrt(x1.0e)); 
13.    return 0; 
14.
6.请使用递归算法计算正整数n和m的最大公约数GCD(nm)。
            = m            当 m<=n 且 n mod m =0
GCD(NM) = GCD(mn)  当n<m时
                  = GCD(m n mod m)    其他
输入:
        n和m
输出:
        n和m的最大公约数
1.#include<stdio.h> 
2.int main() 
3.{    int ixy; 
4.    scanf("%d %d"&x&y); 
5.    for(i=x;i>0;i--) 
6.    {  if(x%i==0&&y%i==0) 
7.        {      printf("%d\n"i); 
8.            return 0;  } 
9.    } 
10.
7.请使用递归算法求下列序列的前n项之和。
            1 + 1/2 - 1/3 + 1/4 -1/5 ......
输入:
        n
输出:
        序列的前n项和(精确到小数点之后第6位)
1.#include<stdio.h> 
2.int main() 
3.{  int ins; 
4.    double sum=0; 
5.    scanf("%d"&n); 
6.    if(n==1) 
7.    {  printf("1\n"); 
8.        return 0;    } 
9.    for(i=2;i<=n;i++) 
10.    {    if(i%2==0) 
11.            s=i; 
12.        else 
13.            s=-i; 
14.        sum+=(1.0/s);  } 
15.    printf("%lf\n"sum+1); 
16.
8.求三个数的公式
小明和小红去参加拍卖会,身为富二代的小红很嚣张地说,"现在那个拍品我要定了,无论你出的价格是多少,我的出价都比你的价格的Y倍还多Z!”,她还给出了好几组X,Y,Z的值,但是聪明的小明随口说出了三个X,Y,Z的值,让小红的报价居然低于了小明,从而彻底打败了邪恶的小红。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。