没有空白的C语言

其实我一直是对“滥用”C语言特性的行为十分感兴趣。虽然不属于正常的编程。只是作为程序猿的自娱自乐。。。

不过特别有意思的啊。。。

今天中午在校内OJ上刷了几道C语言基础题,题目仅仅是给那些C语言的新手做的。不过我加入了限制条件:不能用空白字符,包括空格,回车和Tab键。

C语言一下子变得有趣了有木有。

下面我把今天写的题目和代码贴上来:


题目1

Description

s=a+aa+aaa+aaaa+aa...a的值,其中a是一个一位的整数。 例如2+22+222+2222+22222(此时共有5个数相加)

Input

整数ann个数相加,1<= n, a<=9

Output

s的值

Sample Input

1
2 2 

Sample Output

1
24 

我的代码:

1
a,n,s,p,i;main(){scanf("%d%d",&a,&n);for(;i<n;i++){p=p*10+a;s+=p;}printf("%d",s);} 

题目2

Description

按如下递归公式求函数值。 x=1f(x)=10x>1f(x)=f(x-1)+2

Input

整型变量x

Output

f(x)

Sample Input

1
10 

Sample Output

1
28 

我的代码:

1
x;f(__typeof__(int)a,__typeof__(int)n){if(n<=0)return(0);if(n==1)return(a+10);return(f(a+2,n-1));}main(){scanf("%d",&x);printf("%d",f(0,x));} 

题目3

Description

求矩阵的两对角线上的元素之和

Input

矩阵的行数N ; 和一个N*N的整数矩阵a[N][N] (N<=10)

Output

所输矩阵的两对角线上的元素之和

Sample Input

1
2
3
4
5
6
7
3 

1 2 3

4 5 6

7 8 9

Sample Output

1
25 

我的代码:

1
n,a[10][10],u,i;void*s(){u=0;for(i=0;i%lt;n;i++){u+=a[i][i];u+=a[i][n-1-i];}return(0);}main(){scanf("%d",&n);for(;i<n;i++)for(u=0;u<n;u++)scanf("%d",&a[i][u]);s();if(n%2!=0)u-=a[n/2][n/2];printf("%d",u);} 

题目4

Description

求出1-N中的所有素数

Input

大于1的正整数N

Output

1-N中的所有素数,(以从小到大的格式输出)

Sample Input

1
9 

Sample Output

1
2 3 5 7 

我的代码:

1
n,b=1,i;p(__typeof__(int)a){while(1){a++;for(i=2;i<sqrt(a);i++)if(a%i==0)break;if(i>sqrt(a))return(a);}}main(){scanf("%d",&n);while((b=p(b))<n)printf("%d%c",b,0x20);} 

方法总结

  1. 基本思路

    • 标准库文件不需要#include导入,编译器会进行正确的猜测。
    • 没有定义类型的变量将被视为int类型。如果这个变量是全局变量,它会被初始化为0。
    • 没有定义返回类型的函数将被视为具有int返回类型。
    • C语言中运算符可以通过括号和后面的待运算数区分开。比如return 0;可以写成return(0);
  2. 消除变量定义空格

    • 默认变量为整数形式,直接在最前面定义为全局变量,这样不需要int a中间的空格,直接写为a即可。
    • 利用“ * ”:定义 【char*a,b;】这样引入了一个没用的指针a,但是可以不需要空格就定义char b
  3. 消除struct定义空格利用typedeftypedef int MT可以写作int typedef MT,(MT为自定义的数据类型)。

    使用类似这样的写法:

    1
    struct{int*n,*p,a,b;char*a,b;}typedef*MP,MT;

    这样你就有了一个名字为MTstruct,和一个名字为MPMT类型指针。(为什么要定义这个指针?请参照1.2)。

  4. 消除函数形参表中的空格

    最麻烦的可能在函数形参表这里。比如一个函数void fun(int a, int b);。如何去掉形参表中int a里的这个空格呢?

    只要使用typeof关键字即可。上边的函数可以定义作void*fun(typeof(int)a,typeof(int)b);

    但是当我今天把这样的代码提交到OJ上时,被判为CE。经查找资料而得,ISO C需要加上双下划线,写作:__typeof__(int)

  5. 字符串中的空格真的碰到字符串里面需要空格了。你只需要用0x20这个ASCII码值代替它就好了。就像我上边第4题的输出做的那样。