今天学习 VS调试技巧及分享一下练习
文章目录
1.bug
bug本意是“昆⾍虫或“虫子”,现在⼀般是指在电脑系统或程序中,隐藏着的⼀些未被发现的缺陷或
问题,简称程序漏洞。
2.调试(debug)
当我们发现程序中存在的问题的时候,那下一步就是找到问题,并修复问题。
这个找问题的过程叫称为调试,英⽂叫debug(消灭bug)的意思。
调试一个程序,首先是承认出现了问题,
然后通过各种手段去定位问题的位置,可能是逐过程的调试,
也可能是隔离和屏蔽代码的方式,找到问题所的位置,
然后确定错误产⽣的原因,再修复代码,重新测试。
3.Debug 和 Release
Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序;
程序员在写代码的时候,需要经常性的调试代码,就将这里设置为 debug ,
这样编译产生的是debug 版本的可执行程序,其中包含调试信息,是可以直接调试的。
Release 称为发布版本,它往往是进行了各种优化,
使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
当程序员写完代码,测试再对程序进行测试,直到程序的质量符合交付给用户使用的标准,
这个时候就会设置为 release ,编译产⽣的就是 release 版本的可执行程序,
这个版本是用户使用的,无需包含调试信息等。
4.VS调试快捷键
F9:创建断点和取消断点
断点的作用是可以在程序的任意位置设置断点,
打上断点就可以使得程序执行到想要的位置暂停执行,
接下来我们就可以使⽤F10,F11这些快捷键,观察代码的执行细节。
条件断点:满足这个条件,才触发断点
F5:启动调试,经常用来直接跳到下⼀个断点处,一般是和F9配合使⽤。
F10:逐过程,通常用来处理⼀个过程,⼀个过程可以是⼀次函数调用,或者是一条语句。
F11:逐语句,就是每次都执行⼀条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部。在函数调用的地方,想进入函数观察细节,必须使用F11,如果使用F10,直接完成函数调⽤。
CTRL + F5:开始执行不调试,如果你想让程序直接运⾏起来而不调试就可以直接使用。
5.监视和内存观察
监视
开始调试后,在菜单栏中【调试】->【窗⼝】->【监视】,打开任意⼀个监视窗⼝,
输⼊想要观察的对象就⾏。
内存
如果监视窗⼝看的不够仔细,也是可以观察变量在内存中的存储情况,还是在【调试】->【窗⼝】->【内存】
6.编程常见错误归类
6.1编译型错误
编译型错误⼀般都是语法错误,这类错误⼀般看错误信息就能找到⼀些蛛丝马迹的,
双击错误信息也能初步的跳转到代码错误的地方或者附件。
编译错误,随着语言的熟练掌握,会越来越少,也容易解决。
6.2错误提示信息
主要在代码中找到错误信息中的标识符,然后定位问题所在。⼀般是因为
1.标识符名不存在
2.拼写错误
3.头文件没包含
4.引用的库不存在
6.3运行时错误
运行时错误,是千变万化的,需要借助调试,逐步定位问题,调试解决的是运行时问题。
练习
1.求 1!+2!+3!+4!+…10! 的和
代码
#include<stdio.h>
int main()
{
int n;
printf("求1到n的阶乘\n");
printf("请输入n\n");
scanf("%d ", &n);
int i, j;
int sum = 0;
printf("开始计算\n");
for (i = 1; i <= n; i++)
{
int ret = 1;
for (j = 1; j <= i; j++)
{
ret *= j;
}
sum += ret;
}
printf("%d\n", sum);
return 0;
}
运行结果
2.喝汽水问题
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水(编程实现)。
代码
#include<stdio.h>
int main()
{
int empty;
int money;
int total;
scanf("%d", &money);
total = money;
empty = money;
while (empty > 1)
{
total += empty / 2;
empty = empty / 2 + empty % 2;
}
printf("total=%d\n", total);
return 0;
}
运行结果
3.打印菱形
用C语言在屏幕上输出以下图案:
代码
#include<stdio.h>
int main()
{
int i, j;
printf("请输入行数\n");
int line;//(行数)
scanf("%d", &line);
int a;//(上半部分)
int b;//(下半部分)
b = line / 2;
a = line-b ;
for (i = 0 ; i < a; i++)
{
for (j = 0; j < a-i-1 ; j++)//(找规律)
{
printf(" ");
}
for (j = 0; j < 2*i+1 ; j++)//(等差递增)
{
printf("*");
}
printf("\n");///(记得换行)
}
for (i = 0; i <b ; i++)
{
for (j = 0; j <=i ; j++)//(正好与i的个数一样)
{
printf(" ");
}
for (j = 0; j <2*(b-i)-1 ; j++)//(等差递减)
{
printf("*");
}
printf("\n");
}
return 0;
}
运行结果
4.打印水仙花数
求出0~100000之间的所有“水仙花数”并输出。
水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,
如:153=13+53+3^3,则153是一个“水仙花数”。
代码
#include<stdio.h>
#include<math.h>
int main()
{
int i;
for (i = 1; i < 99999; i++)
{
int sum = 0;//每位数的次方和
int count = 0;//位数
int tmp = i;//存放水仙花数
while (tmp != 0)
{
tmp /= 10;
count++;
}
tmp = i;
while (tmp)
{
sum += pow(tmp % 10, count);
tmp /= 10;
}
if (sum == i)
{
printf("%d是水仙花数\n", i);
}
}
return 0;
}
运行结果
5.计算求和
求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,
例如:2+22+222+2222+22222
代码
#include<stdio.h>
int main()
{
int i;
int a;
int n;
int tmp=0;
int sum=0;
printf("请输入要求的数字和个数\n");
scanf("%d %d", &a, &n);
for (i = 0; i < n; i++)
{
tmp = tmp * 10 + a;//后面的每个数就是前面一个数乘上10再加上这个数
sum += tmp;
}
printf("%d\n", sum);
return 0;
}
运行结果
对VS的调试技巧的分享就到这里了,如果感觉不错,希望可以给博主点个赞或者关注,感谢大家的支持,成为我继续分享的动力,还有什么问题和建议可以在评论区评论,拜拜。