TableOfContents

找出以下程序中的错误,并作出解释

  1. 输出hello, world并换行

       1 include <stdio>
       2 main {
       3     printf(hello, world/n)
       4 }
    
  2. 打印华氏温度与摄氏温度的对照表,输出摄氏度保留一位小数

       1 #include <stdio.h>
       2 main()
       3 {
       4     lower = 0;
       5     upper = 300;
       6     fahr = lower;
       7     while( fahr <= upper ) {
       8         celsius = 5 * (fahr32)/9;
       9         printf("%3.0f %6.1f\n", fahr, celsius);
      10         fahr += step;
      11     }
      12 }
    
  3. 单词计数

       1 #include <stdio.h>
       2 enum STATUS{IN, OUT}; 
       3 main() {
       4     int c, state;
       5     int nl = nw = nc = 0;
       6     while( c = getchar() != EOF) {
       7         ++nc;
       8         if(c == "\n") ;
       9             ++nl;
      10         if(c == ' ' && c == '\n' && c == '\t')
      11             state = OUT;
      12         else if(state = OUT)
      13             state = IN;
      14             ++nw;
      15     }
      16     printf("%d %d %d\n", nl, nw, nc);
      17 }
    

读程序,写出程序运行的结果

  1.    1 #include <stdio.h>
       2 int dec(int *a) {
       3     return (*a)--;  
       4 }
       5 int inc(int a) {
       6     return a++;
       7 }
       8 main() {
       9     int x = 1, y;
      10     y = dec( &x );
      11     y = inc(x);
      12     printf("%d\n%d\n", x, y);
      13 
      14 }
    
  2.    1 #include <stdio.h>
       2 #define min(x,y) (((x)<(y))?(x):(y))
       3 #ifdef EOF
       4 #define square(x)  x*x
       5 #else
       6 #define square(x)  ((x)*(x))
       7 #endif
       8 int main() {
       9     int a = 1, b = 2;
      10     printf("%d\n", square(a+b));
      11     min(a++, b++);
      12     printf("%d\n ", min(a, b));
      13 }
    
  3.    1 #include <stdio.h>
       2 void selectsort(int v[], int n) {
       3     int i, j, min, temp;
       4     for( i = 0; i < n-1; i++) {
       5         min = i;
       6         for( j = i + 1; j < n; j++)
       7             if(v[j] < v[min])
       8                 min = j;
       9         temp = v[min];
      10         v[min] = v[i];
      11         v[i] = temp;
      12     }
      13 }
      14 int main() {
      15     int i;
      16     int s[] = { 5, 4, 3, 2, 1};
      17     selectsort(s, 5);
      18     for(i = 0; i < 5; i++)
      19         printf("%3d", s[i]);
      20 }
    
  4. 假定int, unsigned是32位的。

       1 #include <stdio.h>
       2 int bitcount(unsigned x) {
       3     int b;
       4     x = ~x;
       5     for(b = 0; x != 0; x >>= 1)
       6         if(x & 1)
       7             b++;
       8     return b;
       9 }
      10 main() {
      11     printf("%d\n%d\n%d\n", bitcount( ~ 0xA), bitcount(017), bitcount(255) );
      12 }
    
  5.    1 #include <stdio.h>
       2 #define MAXVAL 10
       3 int queue[MAXVAL];
       4 int front = 0;
       5 int back = 0;
       6 int empty() {
       7     return front == back;
       8 }
       9 int full() {
      10     return (back + 1)%MAXVAL == front;
      11 }
      12 int size() {
      13     return (back - front + MAXVAL) % MAXVAL;
      14 }
      15 void enqueue(int v) {
      16     if(full())
      17         return;
      18     queue[back++] = v;
      19     back = back % MAXVAL;
      20 }
      21 int dequeue() {
      22     int v;
      23     if( empty() )
      24         return 0;
      25     v = queue[front++];
      26     front = front % MAXVAL;
      27     return v;
      28 }
      29 main() {
      30     int i;
      31     for(i = 1; !full(); i++)
      32         enqueue(i);
      33     print("%d\n", size());
      34     while(!empty())
      35         printf("%d\n", dequeue()); 
      36 }
    
  6.    1 #include <stdio.h>
       2 #include <ctype.h>
       3 int stricmp(char s[], char t[]) {
       4     int i;
       5     for( i = 0; s[i] != '\0' && t[i] != '\0'; i++)
       6         if(tolower(s[i]) != tolower(t[i]))
       7             break;
       8     return tolower(s[i]) - tolower(t[i]);
       9 }
      10 main() {
      11     char s1[] = { 'a', 'b', 'c', 'd', '\0'};
      12     char s2[] = "ABCD";
      13     char s3[] = "abcde";
      14     int s1s2 = stricmp(s1, s2);
      15     int s2s3 = stricmp(s2, s3);
      16     printf("%s is %s %s\n", s1, s1s2==0 ? "equal to" : s1s2 > 0 ? "great than" : "less than" , s2);
      17     printf("%s is %s %s\n", s2, s2s3==0 ? "equal to" : s2s3 > 0 ? "great than" : "less than" , s3);
      18 }
    
  7.    1 #include <stdio.h>
       2 #define INITVAL 5
       3 int count() {
       4     static int c = INITVAL;
       5     return c--;
       6 }
       7 main() {
       8     int i;
       9     while(i = count() )
      10         printf("%d\n", i);
      11 }
    
  8.    1 #include <stdio.h>
       2 double mod(double x, double y) {
       3         return  x - (int)( x / y ) * y;
       4 }
       5 main() {
       6     printf("%6.1f\n%6.1f\n", mod(23, 3), mod(-36, 7) );
       7 }
    

编程题,按要求编写程序

  1. 分别编写递归方式和非递归方式的reverse(s)函数,用于将字符串s倒过来
  2. 分别编写递归方式和非递归方式的fact(n)函数,用于计算n的阶乘n!
  3. 分别编写递归方式和非递归方式的combination(m, n),用于计算组合数
  4. 写一个程序统计输入的空格数,tab数,和换行数。
  5. 编写一个程序,把输入拷贝到输出,把其中连续的多个空格替换成一个空格。
  6. 编写一个程序,把输入中长度超过80个字符的行输出。
  7. 编写一个程序,把输入中每一行末尾的空格或者tab删除。
  8. 编写一个程序,将输入中的水平制表符替换成适当数目的空格,使空格充满到下一个制表符终止位。假设制表符终止位的位置是固定的,每隔10列就会出现一个制表符终止位。
  9. 编写一个程序,把超过50个字符的输入行折成短一些的两行或多行,折行的位置在输入行的第50、100、150……列的位置。
  10. 编写一个程序,把输入拷贝到输出,并替换退格符为\b,替换其中的tab为\t,替换反斜杠为\\,使得原来不可见的字符变得可见。
ch3n2k.com | Copyright (c) 2004-2020 czk.