院科协C语言培训:负责培训的学长从头开始,也就是从“Hello world”开始,为我们理清代码编写的思路,分享一些他在学习过程中一开始会遇到的问题和应对方法与技巧。主要讲解了初等程序结构及常用字符作用。
·格式转换:int main()主函数一般是不会改变的,但是也有一种情况就是能运行长字符的格式(应先在代码开头进行定义):
#define int long long
signed main()
·强制转换:当一个变量在前面已经定义了一个整型后,输出时无法通过直接将%d改成%lf达成输出小数的目的,这时应在a/b前加(double)或1.0*可转化整数为小数。(可类推其他类型转换)
#include<stdio.h>
int main(void)
{
int a,b;
scanf("%d %d",&a,&b);
printf("%lf",(double)a/b);
return 0;
}
一些零散的知识点总结:
- 字符型char的赋值要用单引号‘x’(在%d中会强制转换数字类型ep.6→54)
- u=x==y,先判断x是否等于y,再输出1 or 0
- t=a++//先把a的值给t,a再自加1
- t=++a//a先自加1,再赋值给t
- !是”非“的意思,!0=1,其他非零数的非为0,只要()里为非零,{ }里的代码就会执行;for( )括号里一定要有两个“;”
- 内层{ }里的能调用外层{ }的数据,外层{ }不能调用内层{ }的数据
- scanf双引号里的字符串都要输入【ep.scanf("time=%d");//输入时不要漏掉“time=”】
- 符号常量进行定义:1.放在程序头部;2.不需要加等号;3.后面不能被赋值
#define PI 3.14
人工智协作业改进
结合前面培训的内容,我发现了在之前作业中存在的问题,解决了一些困扰。
#include<stdio.h>
int main()
{
int x,y;
scanf("%d",&x);
scanf("%d",&y);//这里不能使用换行 \n符号
int temp;
temp=x;
x=y;
y=temp;
printf("%d\n",x);
printf("%d\n",y);
return 0;
}
- 在变量交换一题中,只需要输入a,b两个变量时却还要再输入另外一个值才能运行。在这题中就关系到了其中一个知识点。
- 原本是scanf("%d\n",x);(下一行同)
scanf双引号里的字符串都要输入
在scanf里的"\n"并不能实现换行功能,不能放在这里,否则会影响输入效果。
当代码是scanf(“%d\n”,&a);时,如果你输入数字后一直按回车,scanf就会一直阻塞在那里,直到你再一次输入。而且运行结果只会识别第一个数,不会识别第二个数。
如果给scanf末尾加上\n,\n不表示等待换行符,而是读取并放弃连续的空白字符,你输入结束之后按回车不会结束,无论再输入多少空白字符都会被忽略,要等再接收到一个非空白字符(空格、制表符、回车)的输入后scanf语句才结束。但需要注意的是,最后输入的那个非(空格、制表符、回车)的东西是不会被这个scanf读进来的,而是留在缓冲区中。
- 在判断三角形类型一题中,等边三角形的判断条件比等腰要严格,故需把等边三角形的判断放在等腰三角形前面,否则满足等边三角形条件时也会输出等腰。以及判断是否形成三角形时的三条边关系用&&连接,而不是||连接。
#include<stdio.h> int main() { int a,b,c; scanf("%d %d %d",&a,&b,&c); if(a+b>c&&b+c>a&&a+c>b)//判断条件是与而不是或连接 { if(a==b&&b==c&&c==a) { printf("该三角形为等边三角形\n");//限定更多的放前面,不然会输出等腰 } else if(a==b||b==c||a==c) { printf("该三角形为等腰三角形\n"); } else if(a*a+b*b==c*c||b*b+c*c==a*a||a*a+c*c==b*b)//等号不要输错 { printf("该三角形为直角三角形\n"); } else { printf("该三角形为任意三角形\n");//不要只输入特殊值漏掉这种情况 } } else { printf("不能构成三角形\n"); } return 0; }
- 在计算d+dd+...+n个d的和时,采用for循环,变化的部分用不同的变量保存,然后带进下一个循环,得到正确的结果。(之前一直纠结于如何表达最后一项,不知道怎么把每一项加起来。
#include<stdio.h> #include<math.h> int main() { int d,n; int sum=0; int x=0; int z=0; scanf("%d %d",&d,&n); int y=d; for(x=1;x<=n-1;x++) { z=10*y+d; y=z;//让y表示最后一项 sum+=z; } sum+=d; printf("%d\n",sum); return 0; }
- 最后一题原本以为要应用到指数,便从网上学习到了表达指数的方式,从课堂上也学习到了一种。例如要表示10的N次方
网上:#include<math.h>, pow(10,N)
课堂上:1eN(这里N是一个具体数字)
经过第一周C语言的学习,我提高了些代码的熟练度,对C语言的基础知识有了更进一步的了解。对于以上的学习经验,如有看法和见解,欢迎在评论区留言~