哭啊,c语言
看别人做ACM训练算法能力,俺也想学学,找来浙大ACM第一题,由于对c很生疏,做了个把小时,看看答案,就5行代码。
题目:
Sample Input
1 5
Sample Output
6
就是输入2个用空格隔开的整数,输出2者的和。
C版标准答案如下:
#include <stdio.h>
int main()
{
int a,b;
while(scanf("%d %d",&a, &b) != EOF)
printf("%d\n",a+b);
}
int main()
{
int a,b;
while(scanf("%d %d",&a, &b) != EOF)
printf("%d\n",a+b);
}
不知道scanf还能这样用。
写了一大框的代码,
#include <stdio.h>
#include <stdlib.h>
void goerror()
{
printf("invalid input!");
exit(0);
}
void main()
{
int length=25;
char c[25];
int i=0;
int j=0;
char c1[12],c2[12];
long a=0;
long b=0;
memset(c, '\0', 25);
memset(c1, '\0', 12);
memset(c2, '\0', 12);
printf("Enter an integer:");
gets(c);
while(i<length)
{
if(isspace(c[i])>0) break;
if(!isdigit(c[i])) goerror();
c1[j]=c[i];
i++;
j++;
}
i++; //jump the space
j=0;
while(i<length)
{
if(!c[i]) break;
if(!isdigit(c[i])) goerror();
c2[j]=c[i];
i++;
j++;
}
a=atoi(c1);
b=atoi(c2);
printf("first int is %d\nsecond int is %d\n",a,b);
printf("%d*%d is %d",a,b,a*b);
}
#include <stdlib.h>
void goerror()
{
printf("invalid input!");
exit(0);
}
void main()
{
int length=25;
char c[25];
int i=0;
int j=0;
char c1[12],c2[12];
long a=0;
long b=0;
memset(c, '\0', 25);
memset(c1, '\0', 12);
memset(c2, '\0', 12);
printf("Enter an integer:");
gets(c);
while(i<length)
{
if(isspace(c[i])>0) break;
if(!isdigit(c[i])) goerror();
c1[j]=c[i];
i++;
j++;
}
i++; //jump the space
j=0;
while(i<length)
{
if(!c[i]) break;
if(!isdigit(c[i])) goerror();
c2[j]=c[i];
i++;
j++;
}
a=atoi(c1);
b=atoi(c2);
printf("first int is %d\nsecond int is %d\n",a,b);
printf("%d*%d is %d",a,b,a*b);
}
查资料的时候,了解了c的一些事情,比如变量申明放在代码块的问题。
http://blog.csdn.net/zyc464301/archive/2007/10/28/1852154.aspx
还有个很好的c/c++参考。
http://www.cppreference.com/index.html