《C语言<程序改错题练习合集(1)>》

简介: 《C语言<程序改错题练习合集(1)>》

"海压竹枝低复举,风吹山角晦还明。”                   ——宋·陈与义《观雨》

目录

T1:

题目:

下面程序通过指针操作,将由八进制数字组成的字符串“77777”转换为对应的十进制形式。

T2:

题目:

把字符串s中所有数字字符按以下规律改写:

(1)0,1,2,3,4,5,6,7,8分别对应改写成1,2,3,4,5,6,7,8,9

(2)9改写成0

(3)其他字符保持不变

T3:

题目:若有车的车牌号和罚分记录数据,统计罚分达到或超过12分的车辆总数并输出这些车牌的信息(说明:id域代表车牌号,score域代表罚分)

T4:

题目:输出一维数组中的最小元素及其下标值

T5:

题目:在屏幕上输出以下图形(字符之间没有空格)。

T6:

题目:统计所有三位正整数中个数和十位之和与百位的积是28的个数。如:259,268,277,286......是满足条件的数。

T7:

题目:删除字符串中的所有空白字符

T8:

题目:输出大于2016的10个最小素数,如2017,2027,2029,2039,.......等。

T9:

题目: 下面程序通过指针操作,输出由二进制数字组成的字符串"0010110101000001"对应的无符号十进制整数。

T10:

题目:输入一个正整数,判断m是否是素数。

T11:

题目:输出一维数组中的最大元素及其下标值。

T12:

题目: 从主函数中输入一个正整数n,并通过调用fac()函数,求得n的阶乘,在主函数中输出n阶乘的值。

T13:

题目:已知数列,第一项和第二项都是1,从第三项开始每项都是其前两项之和。求第n项(n从键盘输入,用递归实现)。

T14:

题目:统计1000以内个位数是9并且能被9整除的所有正整数的个数。

T15:

题目:在屏幕上输出以下图形(星号之间没有空格)

T16:

题目:将字符串“987654”转换成其对应的十进制整数形式输出。

T17:

题目:输出个位数字为7的最小的10个素数,如7,17,37,47......等。

T18:

题目:在屏幕上输出以下图形(星号之间没有空格)

T19:

题目:从键盘输入一个不多于4位的十进制正整数,求出它是几位数。

T20:

题目:在屏幕上输出以下图形(星号之间没有空格)

T21:

题目:fun函数的功能是:计算s=1+1/2+1/3+1/4+...1/n的值。在主函数中输入一个正整数n,通过调用fun函数,求得计算结果。

T22:

题目:在屏幕上输出以下图形(字符之间没有空格)。

T23:

题目:把字符串s中所有小写字母改写成该字母的下一个字母,但是如果是字母'z',则改写成字母'a',大写字母和其他字符保持不变。

T24:

题目:统计100以内有多少个素数。

T25:

题目:在屏幕上输出以下图形(说明:星号之间无空格)。

T26:

题目:函数search(int a[ ],int n,int number)的功能:在a数组的前n个元素中查找number,若存在则返回第一次找到的元素下标,否则返回-1。

主函数功能:输入number,调用search函数查找number,最后输出查找结果。

后记:●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!                                                                     ——By 作者:新晓·故知


T1:

题目:

下面程序通过指针操作,将由八进制数字组成的字符串“77777”转换为对应的十进制形式。

#include <stdio.h>
void main()
{
  char str[6]="77777",*p;
  int n,t;
  n=1;        /*$ERROR$*/
  p=str[0];   /*$ERROR$*/
  while(*p!=0)
  {
    t=*p-'0'; 
    n=n*8+t;
    p--;    /*$ERROR$*/
  }
  printf("\n%s is convered to integer number: %d\n",str,n);
}
image.gif

题解:

//可正确执行程序
#include <stdio.h>
void main()
{
    char str[6] = "77777", * p; // char str[6] = "76777", * p; 可使用此语句进行调试,观察程序语句执行过程
    int n, t;
    n = 0;       /*已改正*/
    p = str;     /*已改正*/
    while (*p != 0)
    {
        t = *p - '0';
        n = n * 8 + t;
        p++;    /*已改正*/
    }
    printf("\n%s is convered to integer number: %d\n", str, n);
}
image.gif

T2:

题目:

把字符串s中所有数字字符按以下规律改写:

(1)0,1,2,3,4,5,6,7,8分别对应改写成1,2,3,4,5,6,7,8,9

(2)9改写成0

(3)其他字符保持不变

#include <stdio.h>
#include <string.h>
void main()
{
    char s[80];
    int i;
    getc(s);              /*$ERROR$*/
    for (i = 0; s[i] != '\0'; i++)
    {
        if (s[i] = '9')   /*$ERROR$*/
            s[i] = '0';
        else if (s[i] >= '0' && s[i] <= '8')
            s[i] = s[i] + 1;
    }
    printf("%c\n", s);   /*$ERROR$*/
}
image.gif

题解:

#include <stdio.h>
#include <string.h>
void main()
{
    char s[80];
    int i;
    gets(s);                /*已改正*/  //scanf("%s", s);此语句和gets语句等价
    for (i = 0; s[i] != '\0'; i++)
    {
        if (s[i] == '9')    /*已改正*/
            s[i] = '0';
        else if (s[i] >= '0' && s[i] <= '8')
            s[i] = s[i] + 1;
    }
    printf("%s\n", s);     /*已改正*/
}
image.gif

T3:

题目:若有车的车牌号和罚分记录数据,统计罚分达到或超过12分的车辆总数并输出这些车牌的信息(说明:id域代表车牌号,score域代表罚分)

#include <stdio.h>
struct car
{
    char id[12];
    int score;
};
void main()
{
    int i, n = 0;
    car  c[6] = { {"A-QQ111",8},  /*$ERROR$*/   
                     {"A-TT222",12},
                     {"B-WJ333",12},
                     {"C-LC444",5},
                     {"F-PC555",6},
                     {"B-MY666",12} };
    printf("id\tscore\n");
    i = 0;
    while (i < 6)
    {
        if (score >= 12)        /*$ERROR$*/
        {
            printf("%s\t%d\n", c[i].id, c[i].score);
            n--;               /*$ERROR$*/
        }
        i++;
    }
    printf("n=%d\n", n);
}
image.gif

题解:

#include <stdio.h>
struct car
{
    char id[12];
    int score;
};
void main()
{
    int i, n = 0;
    struct car  c[6] = { {"A-QQ111",8},    /*已改正*/
                      {"A-TT222",12},
                      {"B-WJ333",12},
                      {"C-LC444",5},
                      {"F-PC555",6},
                      {"B-MY666",12} };
    printf("id\tscore\n");
    i = 0;
    while (i < 6)
    {
        if (c[i].score >= 12)            /*已改正*/
        {
            printf("%s\t%d\n", c[i].id, c[i].score);
            n++;                        /*已改正*/
        }      
        i++;
    }
    printf("n=%d\n", n);
}
image.gif

T4:

题目:输出一维数组中的最小元素及其下标值

#include <stdio.h>
int search(int a[],int n) 
{
 int i,min;
 min=1;              /*$ERROR$*/
 for(i=1;i<n;i++)
 {
  if(a[i]<a[min])
         min=i; 
 }
 return i;          /*$ERROR$*/
}
void main()
{
  int a[10]={13,1,-5,4,9,0,-8,7,-6,2};
  int min;
  min=search(a);   /*$ERROR$*/
  printf("min=%d,address=%d\n",a[min],min);
}
image.gif

题解:

#include <stdio.h>
int search(int a[], int n)
{
    int i, min; 
    min = 0;                /*已改正*/
    for (i = 1; i < n; i++)
    {
        if (a[i] < a[min])
            min = i;
    }
    return min;            /*已改正*/
} 
void main()
{
    int a[10] = { 13,1,-5,4,9,0,-8,7,-6,2 };
    int min;
    min = search(a,10);   /*已改正*/
    printf("min=%d,address=%d\n", a[min], min);
}
image.gif

T5:

题目:在屏幕上输出以下图形(字符之间没有空格)。

image.gif编辑

#include <stdio.h>
#include <string.h>
void main()
{
    char a[6] = "54321", temp;
    int i, k;
    for (i = 1; i <= 5; i++)
    {
        printf("%c\n", a);         /*$ERROR$*/
        temp = a[0];
        for (k = 0; k < 4; k++)
            a[k + 1] = a[k];      /*$ERROR$*/
        a[4] = a[0];              /*$ERROR$*/
    }
}
image.gif

题解:

#include <stdio.h>
#include <string.h>
void main()
{
    char a[6] = "54321", temp;
    int i, k;
    for (i = 1; i <= 5; i++)
    {
        printf("%s\n", a);        /*已改正*/
        temp = a[0];
        for (k = 0; k < 4; k++)
            a[k] = a[k + 1];     /*已改正*/
        a[4] = temp;             /*已改正*/
    }
}
image.gif

T6:

题目:统计所有三位正整数中个数和十位之和与百位的积是28的个数。如:259,268,277,286......是满足条件的数。

#include <stdio.h>
void main()
{
    int i, g, s, b, count;
    count = 1;                  /*$ERROR$*/
    for (i = 100; i <= 999; i++)
    {
        g = i % 10;
        s = i / 10 % 10;
        b = i % 100;           /*$ERROR$*/
        if ((g + s) * b == 28)
            count = i;         /*$ERROR$*/
    }
    printf("%d\n", count);
}
image.gif

题解:

#include <stdio.h>
void main()
{
    int i, g, s, b, count;
    count = 0;                      /*已改正*/
    for (i = 100; i <= 999; i++)
    {
        g = i % 10;
        s = i / 10 % 10;    
        b = i / 100;               /*已改正*/
        if ((g + s) * b == 28)
        {
            count++;              /*已改正*/
           //printf("%d ", i);    //此语句打印满足条件的数值
        }
    }
    printf("%d\n", count);
}
image.gif

T7:

题目:删除字符串中的所有空白字符

#include <stdio.h>
void main()
{
  char s[100] = "I love this program.";
  int i, j;
  j = 0;
  for (i = 0; s[i] != '\0'; i++)
  {
    if (s[i] != ' ')
    {
      s[j] = s[i];
      i++;          /*$ERROR$*/
    }
  }
  s[j] = "\0";         /*$ERROR$*/
  printf("%c\n", s);   /*$ERROR$*/
}
image.gif

题解:

#include <stdio.h>
void main()
{
  char s[100] = "I love this program.";
  int i, j;
  j = 0;
  for (i = 0; s[i] != '\0'; i++)
  {
    if (s[i] != ' ')
    {
      s[j] = s[i];
      j++;          /*已改正*/
    }
  }
  s[j] = '\0';          /*已改正*/
  printf("%s\n", s);    /*已改正*/
}
image.gif

T8:

题目:输出大于2016的10个最小素数,如2017,2027,2029,2039,.......等。

#include <stdio.h>
void main()
{
    int i, j, flag, n;
    n = 0;
    i = 2016;
    while (n <= 10)               /*$ERROR$*/
    {
        flag = 0;
        for (j = 2; j < i; j++)
            if (i / j == 0)       /*$ERROR$*/
            {
                flag = 1;
                break;
            }
        if (flag >= 0)           /*$ERROR$*/
        {
            n = n + 1;
            printf("%d\n", i);
        }
        i = i++; 
    }
}
image.gif

题解1:

#include <stdio.h>
void main()
{
    int i, j, flag, n;
    n = 0;
    i = 2016;
    while (n < 10)                 /*已改正*/
    {
        flag = 0;
        for (j = 2; j < i; j++)
            if (i % j == 0)       /*已改正*/
            {
                flag = 1;
                break;
            }
        if (flag == 0)            /*已改正*/
        {
            n = n + 1;
            printf("%d\n", i);
        }
        i = i++; 
    }
}
image.gif

题解2:

#include <stdio.h>
void main()
{
    int i, j, flag, n;
    n = 0;
    i = 2016;
    while (n < 10 && i--)           /*已改正*/
    {
        flag = 0;
        for (j = 2; j < i; j++)
            if (i % j == 0)         /*已改正*/
            {
                flag = 1;
                break;
            }
        if (flag == 0)             /*已改正*/
        {
            n = n + 1;
            printf("%d\n", i);
        }
        i = i + 2;   //此语句和原题(i=i++;)不同,但这种写法可编译 
    }
}
image.gif

T9:

题目: 下面程序通过指针操作,输出由二进制数字组成的字符串"0010110101000001"对应的无符号十进制整数。

#include <stdio.h>
void main()
{
    char v2[] = "0010110101000001", * p;
    unsigned int v10, t;
    v10 = 1;                /*$ERROR$*/
    p = v2[0];              /*$ERROR$*/
    while (*p != '\0')
    {
        t = *p - '0';
        v10 = v10 * 2 + t;
        p--;               /*$ERROR$*/
    }
    printf("\n%s is convered to integer number: %u\n", v2, v10);
}
image.gif

题解:

#include <stdio.h>
void main()
{
    char v2[] = "0010110101000001", * p;
    unsigned int v10, t;
    v10 = 0;                    /*已改正*/
    p = v2;                     /*已改正*/
    while (*p != '\0')
    {
        t = *p - '0';
        v10 = v10 * 2 + t;
        p++;                    /*已改正*/
    }
    printf("\n%s is convered to integer number: %u\n", v2, v10);
}
image.gif

T10:

题目:输入一个正整数,判断m是否是素数。

#include <stdio.h>
void main()
{
    int i, j, flag, m;
    scanf("%d", m);                /*$ERROR$*/
    flag = 0;
    for (i = 2; i < m; i++)
    {
        if (m / i == 0)           /*$ERROR$*/
        {
            flag = 1;
            break;
        }
    }
    if (flag >= 0)                /*$ERROR$*/
        printf("%d是素数\n", m);
    else
        printf("%d不是素数\n", m);
}
image.gif

题解:

#include <stdio.h>
void main()
{
    int i, j, flag, m;
    scanf("%d", &m);               /*已改正*/
    flag = 0;
    for (i = 2; i < m; i++)
    { 
        if (m % i == 0)           /*已改正*/
        {
            flag = 1;
            break;
        }
    }
    if (flag == 0)                /*已改正*/
        printf("%d是素数\n", m);
    else
        printf("%d不是素数\n", m);
}
image.gif

T11:

题目:输出一维数组中的最大元素及其下标值。

#include <stdio.h>
int search(int a[], int n)
{
    int i, max;
    max = 1;                              /*$ERROR$*/
    for (i = 1; i < n; i++)
    {
        if (a[i] > a[max])
            max = i;
    }
    return i;                            /*$ERROR$*/
}
void main()
{
    int a[10] = { 13,1,-5,4,9,0,-8,7,-6,2 };
    int max;
    max = search(a);                     /*$ERROR$*/
    printf("max=%d,address=%d\n", a[max], max);
}
image.gif

题解:

#include <stdio.h>
int search(int a[], int n)
{
    int i, max;
    max = 0;                     /*已改正*/
    for (i = 1; i < n; i++)
    {
        if (a[i] > a[max])
            max = i;
    }
    return max;                  /*已改正*/
}
void main()
{
    int a[10] = { 13,1,-5,4,9,0,-8,7,-6,2 };
    int max;
    max = search(a, 10);        /*已改正*/
    printf("max=%d,address=%d\n", a[max], max);
}
image.gif

T12:

题目: 从主函数中输入一个正整数n,并通过调用fac()函数,求得n的阶乘,在主函数中输出n阶乘的值。

#include <stdio.h>
long fac(int n)
{
    int i;
    long s;
    s = 1;
    i = 0;                    /*$ERROR$*/
    while (i < n)             /*$ERROR$*/
    {
        s = s * i;
        i++;
    }
    return s;
}
void main()
{
    int n;
    long result;
    printf("Enter n:");
    scanf("%d", n);          /*$ERROR$*/
    result = fac(n);
    printf("n! =%ld\n", result);
}
image.gif

题解:

#include <stdio.h>
long fac(int n)
{
    int i;
    long s;
    s = 1;
    i = 1;                      /*已改正*/
    while (i <= n)              /*已改正*/
    {
        s = s * i;
        i++;
    }
    return s;
}
void main()
{
    int n;
    long result;
    printf("Enter n:");
    scanf("%d", &n);            /*已改正*/
    result = fac(n);
    printf("n! =%ld\n", result);
}
image.gif

T13:

题目:已知数列,第一项和第二项都是1,从第三项开始每项都是其前两项之和。求第n项(n从键盘输入,用递归实现)。

#include <stdio.h>
long  f(int n)
{
    if (n = 1 || n = 2)                     /*$ERROR$*/
        return 1;
    else
        return f(n - 1) - f(n - 2);         /*$ERROR$*/
}
void main()
{
    long m;
    int n;
    printf("\nPlease input n:\n");
    scanf("%d", n);                         /*$ERROR$*/
    if (n > 0)
    {
        m = f(n);
        printf("%ld\n", m);
    }
    else printf("Data error\n");
}
image.gif

题解:

//求第n项的斐波那契数列的值
#include <stdio.h>
long  f(int n)
{
    if (n == 1 || n == 2)                /*已改正*/
        return 1;
    else
        return f(n - 1) + f(n - 2);      /*已改正*/
}
void main()
{
    long m;
    int n;
    printf("\nPlease input n:\n");
    scanf("%d", &n);                    /*已改正*/
    if (n > 0)
    {
        m = f(n);
        printf("%ld\n", m);
    }
    else printf("Data error\n");
}
image.gif

T14:

题目:统计1000以内个位数是9并且能被9整除的所有正整数的个数。

#include <stdio.h>
void main()
{
    int i, c;
    c = 1;                          /*$ERROR$*/
    for (i = 1; i < 1000; i++)
        if (i % 9 == 0)
            if (i % 10 == 9)
            {
                c = i;              /*$ERROR$*/
            }
    print("%d\n", c);               /*$ERROR$*/
}
image.gif

题解:

#include <stdio.h>
void main()
{
    int i, c;
    c = 0;                          /*已改正*/
    for (i = 1; i < 1000; i++)
        if (i % 9 == 0)
            if (i % 10 == 9)
            {
                c++;                /*已改正*/
                //printf("%d ", i);    
            }
    printf("\n");
    printf("%d\n", c);              /*已改正*/
}
image.gif

T15:

题目:在屏幕上输出以下图形(星号之间没有空格)

image.gif编辑

#include <stdio.h>
void main()
{
    int i, j;
    i = 1;                               /*$ERROR$*/
    while (i < 5)
    {
        j = 0;
        while (j <= i)
        {
            printf("*");
            j++;
        }
        printf("\n");
        i++;
    }
    i = 4;
    while (i > 0)
    {
        j = 0;
        while (j <= 4 - i)
        {
            printf(" ");/*输出一个空格*/
            j++;
        }
        j = 0;
        while (j < 4 - i)               /*$ERROR$*/
        {
            printf("*");
            j++;
        }
        printf("\n");
        i++;                           /*$ERROR$*/
    }
}
image.gif

题解:

//左上右下
#include <stdio.h>
void main()
{
    int i, j;
    i = 0;                                /*已改正*/
    while (i < 5)
    {
        j = 0;
        while (j <= i)
        {
            printf("*");
            j++;
        }
        printf("\n");
        i++;
    }
    i = 4;
    while (i > 0)
    {
        j = 0;
        while (j <= 4 - i)
        {
            printf(" ");/*输出一个空格*/
            j++;
        }
        j = 0;
        while (j <= i - 1)               /*已改正*/
        {
            printf("*");
            j++;
        }
        printf("\n");
        i--;                             /*已改正*/
    }
}
image.gif

T16:

题目:将字符串“987654”转换成其对应的十进制整数形式输出。

#include <stdio.h>
void main()
{
    char str[20] = "987654", * p;
    int n, t;
    n = 1;                  /*$ERROR$*/
    p = str[0];             /*$ERROR$*/
    while (*p != 0)
    {
        t = *p - '0';
        n = n * 10 + t;
        p--;               /*$ERROR$*/
    }
    printf("\n%s is convered to integer number: %d\n", str, n);
}
image.gif

题解:

#include <stdio.h>
void main()
{
    char str[20] = "987654", * p;
    int n, t;
    n = 0;                  /*已改正*/
    p = str;                /*已改正*/
    while (*p != 0)
    {
        t = *p - '0';
        n = n * 10 + t;
        p++;                /*已改正*/
    }
    printf("\n%s is convered to integer number: %d\n", str, n);
}
image.gif

T17:

题目:输出个位数字为7的最小的10个素数,如7,17,37,47......等。

#include <stdio.h>
void main()
{
    int i, j, flag, n;
    n = 0;
    i = 7;
    while (n <= 10)      /*$ERROR$*/
    {
        flag = 0;
        for (j = 2; j < i; j++)
            if (i / j == 0)       /*$ERROR$*/
            {
                flag = 1;
                break;
            }
        if (flag >= 0)      /*$ERROR$*/
        {
            n = n + 1;
            printf("%d\n", i);
        }
        i = i + 10;
    }
}
image.gif

题解:

#include <stdio.h>
void main()
{
    int i, j, flag, n;
    n = 0;
    i = 7;
    while (n < 10)                   /*已改正*/
    {
        flag = 0;
        for (j = 2; j < i; j++)
            if (i % j == 0)          /*已改正*/
            {
                flag = 1;
                break;
            }
        if (flag == 0)               /*已改正*/
        {
            n = n + 1;
            printf("%d\n", i);
        }
        i = i + 10;
    }
}
image.gif

T18:

题目:在屏幕上输出以下图形(星号之间没有空格)

image.gif编辑

#include <stdio.h>
void main()
{
    int i, j;
    i = 1;                          /*$ERROR$*/
    while (i < 5)
    {
        j = 0;
        while (j < 4 - i)
        {
            printf(" ");/*输出一个空格*/
            j++;
        }
        j = 0;
        while (j <= i)
        {
            printf("*");
            j++;
        }
        printf("\n");
        i++;
    }
    i = 4;
    while (i > 0)
    {
        j = 0;
        while (j < 4 - i)            /*$ERROR$*/
        {
            printf("*");
            j++;
        }
        printf("\n");
        i++;                        /*$ERROR$*/
    }
}
image.gif

题解:

//左下右上
#include <stdio.h>
void main()
{
    int i, j;
    i = 0;                     /*已改正*/
    while (i < 5)
    {
        j = 0;
        while (j < 4 - i)
        {
            printf(" ");/*输出一个空格*/
            j++;
        }
        j = 0;
        while (j <= i)
        {
            printf("*");
            j++;
        }
        printf("\n");
        i++;
    }
    i = 4;
    while (i > 0)
    {
        j = 0;
        while (j < i - 1)     /*已改正*/
        {
            printf("*");
            j++;
        }
        printf("\n");
        i--;                  /*已改正*/
    }
}
image.gif

T19:

题目:从键盘输入一个不多于4位的十进制正整数,求出它是几位数。

例如:输入528,则结果为n=3。

#include <stdio.h>
void main()
{
    int x, n;
    scanf("%d", x);                        /*$ERROR$*/
    if (x <= 0 || x >= 10000)
        printf("Data Error!\n");
    else
    {
        if (x <= 10) n = 1;                /*$ERROR$*/
        else if (x < 100) n = 2;
        else if (x < 1000) n = 3;
        n = 4;                             /*$ERROR$*/
        printf("n=%d\n", n);
    }
}
image.gif

题解:

#include <stdio.h>
void main()
{
    int x, n;
    scanf("%d", &x);                     /*已改正*/
    if (x <= 0 || x >= 10000)
        printf("Data Error!\n");
    else
    {
        if (x < 10) n = 1;               /*已改正*/
        else if (x < 100) n = 2;
        else if (x < 1000) n = 3;
        else n = 4;                      /*已改正*/
        printf("n=%d\n", n);
    }
}
image.gif

T20:

题目:在屏幕上输出以下图形(星号之间没有空格)

image.gif编辑

#include <stdio.h>
void main()
{
    int i, j, k, n = 0;
    char ch = '*';
    for (i = 1; i <= 5; i++)
    {
        j = 1;
        while (j <= 5 - i)
        {
            printf(" ");
            j++;
        }
        j = 0;                   /*$ERROR$*/
        while (j <= 2 * i - 1)
        {
            printf("%d", ch);   /*$ERROR$*/
            j++;
        }
        printf("/n");          /*$ERROR$*/
    }
}
image.gif

题解:

#include <stdio.h>
void main()
{
    int i, j, k, n = 0;
    char ch = '*';
    for (i = 1; i <= 5; i++)
    {
        j = 1;
        while (j <= 5 - i)
        {
            printf(" ");
            j++;
        }
        j = 1;                    /*已改正*/
        while (j <= 2 * i - 1)
        {
            printf("%c", ch);    /*已改正*/
            j++;
        }
        printf("\n");            /*已改正*/
    }
}
image.gif

T21:

题目:fun函数的功能是:计算s=1+1/2+1/3+1/4+...1/n的值。在主函数中输入一个正整数n,通过调用fun函数,求得计算结果。

#include <stdio.h>
double fun(int n)
{
    double s;
    if (n > 1)
        s = 1.0 / n + fun(n - 1);
    else
        s = 1.0;
    return;                                  /*$ERROR$*/
}
void main()
{
    int n;
    double result;
    printf("\nPlease input n:\n");
    scanf("%d", n);                          /*$ERROR$*/
    if (n <= 0)
        printf("\nData error\n);
    else
    {
        result = fun(&n);                   /*$ERROR$*/
        printf("\nThe result is %lf\n", result);
    }
}
image.gif

题解:

#include <stdio.h>
double fun(int n)
{
    double s;
    if (n > 1)
        s = 1.0 / n + fun(n - 1);
    else
        s = 1.0;
    return s;                                 /*已改正*/
}
void main()
{
    int n;
    double result;
    printf("\nPlease input n:\n");
    scanf("%d", &n);                          /*已改正*/
    if (n <= 0) 
        printf("\nData error\n");
    else
    {
        result = fun(n);                      /*已改正*/
        printf("\nThe result is %lf\n", result);
    }
}
image.gif

T22:

题目:在屏幕上输出以下图形(字符之间没有空格)。

image.gif编辑

#include <stdio.h>
#include <string.h>
void main()
{
    char a[6] = "ABCDE", temp;
    int i, k;
    for (i = 1; i <= 5; i++)
    {
        printf("%c\n", a);              /*$ERROR$*/
        temp = a[0];
        for (k = 0; k < 4; k++)
            a[k + 1] = a[k];            /*$ERROR$*/
        a[4] = a[0];                    /*$ERROR$*/
    }
}
image.gif

题解:

#include <stdio.h>
#include <string.h>
void main()
{
    char a[6] = "ABCDE", temp;
    int i, k;
    for (i = 1; i <= 5; i++)
    {
        printf("%s\n", a);            /*已改正*/
        temp = a[0];
        for (k = 0; k < 4; k++)
            a[k] = a[k + 1];          /*已改正*/
        a[4] = temp;                  /*已改正*/
    }
}
image.gif

T23:

题目:把字符串s中所有小写字母改写成该字母的下一个字母,但是如果是字母'z',则改写成字母'a',大写字母和其他字符保持不变。

#include <stdio.h>
void main()
{
    char s[80];
    int i;  
    getc(s);                          /*$ERROR$*/
    for (i = 0; s[i] != '\0'; i++)
    {
        if (s[i] = 'z')               /*$ERROR$*/
            s[i] = 'a';
        else if (s[i] >= 'a' && s[i] <= 'y')
            s[i] = s[i] + 1;
    }
    printf("%c\n", s);               /*$ERROR$*/
}
image.gif

题解:

#include <stdio.h>
void main()
{
    char s[80];
    int i;
    gets(s);   //scanf("%s", s);       /*已改正*/
    for (i = 0; s[i] != '\0'; i++)
    {
        if (s[i] == 'z')               /*已改正*/
            s[i] == 'a';
        else if (s[i] >= 'a' && s[i] <= 'y')
            s[i] = s[i] + 1;
    }
    printf("%s\n", s);                 /*已改正*/
}
image.gif

T24:

题目:统计100以内有多少个素数。

#include <stdio.h>
void main()
{
    int i, j, flag, count;
    count = 1;                       /*$ERROR$*/
    for (i = 2; i <= 100; i++)
    {
        flag = 0;
        for (j = 2; j < i; j++)
            if (i / j == 0)         /*$ERROR$*/
            {
                flag = 1;
                break;
            }
        if (flag >= 0)              /*$ERROR$*/
            count++;
    }
    printf("%d\n", count);
}
image.gif

题解:

#include <stdio.h>
void main()
{
    int i, j, flag, count;
    count = 0;                     /*已改正*/
    for (i = 2; i <= 100; i++)
    {
        flag = 0;
        for (j = 2; j < i; j++)
            if (i % j == 0)        /*已改正*/
            {
                flag = 1;
                break;
            } 
        if (flag == 0)            /*已改正*/
        {
            //printf("%d ", i);  //此语句可打印符合条件的每一项
            count++;
        }
    }
    printf("\n");
    printf("%d\n", count);
}
image.gif

T25:

题目:在屏幕上输出以下图形(说明:星号之间无空格)。

image.gif编辑

#include <stdio.h>
void main()
{
    char a[5];
    int i, j;
    for (j = 0; j < 5; j++)
        a[j] = "*";                   /*$ERROR$*/
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j <= i; j++)
            printf("%d", a[j]);      /*$ERROR$*/
        printf("/n");                /*$ERROR$*/
    }
}
image.gif

题解:

#include <stdio.h>
void main()
{
    char a[5];
    int i, j;
    for (j = 0; j < 5; j++)
        a[j] = '*';                  /*已改正*/
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j <= i; j++)
            printf("%c", a[j]);     /*已改正*/
        printf("\n");               /*已改正*/
    }
}
image.gif

T26:

题目:函数search(int a[ ],int n,int number)的功能:在a数组的前n个元素中查找number,若存在则返回第一次找到的元素下标,否则返回-1。

主函数功能:输入number,调用search函数查找number,最后输出查找结果。

image.gif编辑

#include <stdio.h>
int search(int a[],int n,int number)
{
  int result=-1;
  int i;
  for(i=0;i<n;i++)
  {
    if(a[i]==number)
    {
      result=i;
      continue;     /*$ERROR$*/  
    }
  }
  return n;         /*$ERROR$*/  
}
void main()
{
  int a[10]={9,8,12,15,17,9,16,23,8,15}; 
  int number;
  int result;
  scanf("%d",&number);
  result=search(a,10,number);
  if(result=-1)       /*$ERROR$*/  
    printf("Not found!\n");
  else
    printf("%d\n",result);
}
image.gif

题解:

#include <stdio.h>
int search(int a[], int n, int number)
{
  int result = -1;
  int i;
  for (i = 0; i < n; i++)
  {
    if (a[i] == number)
    {
      result = i;
      break;        /*已改正*/
    }
  }
  return result;         /*已改正*/   //return i!=number?-1:i+1;
}
void main()
{
  int a[10] = { 9,8,12,15,17,9,16,23,8,15 };
  int number;
  int result;
  scanf("%d", &number);
  result = search(a, 10, number);
  if (result == -1)         /*已改正*/
    printf("Not found!\n");
  else
    printf("%d\n", result);
}
image.gif

后记:

●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!


                                                                    ——By 作者:新晓·故知

相关文章
|
1月前
|
编译器 开发工具 C语言
【C语言】第一回(源(.c)文件怎么生成可执程序(.exe)文件)
【C语言】第一回(源(.c)文件怎么生成可执程序(.exe)文件)
|
1月前
|
存储 编译器 C语言
深入探索C语言动态内存分配:释放你的程序潜力
深入探索C语言动态内存分配:释放你的程序潜力
28 1
|
2月前
|
C语言
C语言练习5
C语言练习5。
13 2
|
1月前
|
存储 编译器 C语言
深入探索C语言动态内存分配:释放你的程序潜力
深入探索C语言动态内存分配:释放你的程序潜力
32 0
|
5天前
|
C语言
第一章 C语言知识点(程序)
第一章 C语言知识点(程序)
16 0
|
1天前
|
算法 C语言
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-2
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
1天前
|
算法 编译器 API
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-1
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
4天前
|
存储 自然语言处理 编译器
“ Hello world ”中的秘密之【C语言程序编译和链接】
作为C语言最经典的代码,大家都可以轻易写出。但是代码的运行过程却很少有人清楚,接下来我将介绍代码运行的奥秘。
15 0
|
6天前
|
自然语言处理 编译器 C语言
C语言程序编译和链接
在ANSI C的任何⼀种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换为可执⾏的机器指令(⼆进制指令)。 第2种是执⾏环境,它⽤于实际执⾏代码。
|
8天前
|
网络协议 物联网 数据处理
【C 言专栏】C 语言实现网络通信程序
【5月更文挑战第4天】本文探讨了使用C语言实现网络通信程序的方法,包括理解网络通信基本概念如协议和套接字,以及TCP/UDP通信的实现步骤。通过创建套接字、绑定端口、监听连接、数据传输和错误处理等关键环节,阐述了C语言在网络通信中的优势。文中还提到了实际应用案例、程序优化策略及未来发展趋势,旨在帮助读者掌握C语言在网络通信领域的应用技巧。
【C 言专栏】C 语言实现网络通信程序