1、C程序常见的错误分类不包含:( )
A.编译错误
B.链接错误
C.栈溢出
D.运行时错误
栈溢出是运行时错误的一种,因此C程序不会将栈溢出错误单独列出来,栈溢出包含在运行时错误中。
因此:选择C
2、关于VS调试快捷键说法错误的是:( )
A.F5-是开始执行,不调试
B.F10-是逐过程调试,遇到函数不进入函数
C.F11-是逐语句调试,可以观察调试的每个细节
D.F9是设置断点和取消断点
A:错误,F5是开始调试,在遇到短点的位置可以停下来,Ctrl+F5是开始执行,不调试
B:正确,F10遇到函数时不会进入到函数体中,F11会
C:F11遇到函数时,会进入函数中
D:F9会在光标所在行下短点,如果有短点会取消短点 因此,选择A
3、关于Debug和Release的区别说法错误的是:( )
A.Debug被称为调试版本,程序调试找bug的版本
B.Release被称为发布版本,测试人员测试的就是Release版本
C.Debug版本包含调试信息,不做优化。
D.Release版本也可以调试,只是往往会优化,程序大小和运行速度上效果最优
A:正确,Debug为调试版本,一般在开发完成后发布工程前,调试代码都是在Debug模式下进行的
B:正确,Release版本最终是要发送给用户的,发给用户的版本必须要没有问题,测试人员就是最后一个把关的
C:正确,Debug版本是调试版本,编译器编译时会增加一些调试信息,编译器基本不会对其进行优化
D:错误,Release版本是不能调试的,一般都是在Debug版本下调试的,Release版本一般编译器会进行大量的优化,删除无用的代码,指令的次序调整等,让其速度更快
因此:选择D
4、喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水(编程实现)。
/* 思路: 1. 20元首先可以喝20瓶,此时手中有20个空瓶子 2. 两个空瓶子可以喝一瓶,喝完之后,空瓶子剩余:empty/2(两个空瓶子换的喝完后产生的瓶子) + empty%2(不够换的瓶子) 3. 如果瓶子个数超过1个,可以继续换,即重复2 */ int main() { int money = 0; int total = 0; int empty = 0; scanf("%d", &money); //方法1 total = money; empty = money; while(empty>1) { total += empty/2; empty = empty/2+empty%2; } printf("total = %d\n", total); return 0; } // 方法二:按照上述喝水和用瓶子换的规则的话,可以发现,其实就是个等差数列:money*2-1 int main() { int money = 0; int total = 0; int empty = 0; scanf("%d", &money); //方法2 if(money <= 0) { total = 0; } else { total = money*2-1; } printf("total = %d\n", total); return 0; }
5、用C语言在屏幕上输出以下图案:
/* 思路: 仔细观察图形,可以发现,此图形中是由空格和*按照不同个数的输出组成的。 上三角:先输出空格,后输出*,每行中 空格:从上往下,一行减少一个 *:2*i+1的方式递增 下三角:先输出空格,后输出*,每行中 空格:从上往下,每行多一个空格 *: 从上往下,按照2*(line-1-i)-1的方式减少,其中:line表示总共有多少行 按照上述方式,将上三角和下三角中的空格和*分别输出即可。 */ int main() { int line = 0; int i = 0; scanf("%d", &line);//7 //打印上半部分 for(i=0; i<line; i++) { //打印一行 //打印空格 int j = 0; for(j=0; j<line-1-i; j++) { printf(" "); } //打印* for(j=0; j<2*i+1; j++) { printf("*"); } printf("\n"); } //打印下半部分 for(i=0; i<line-1; i++) { //打印一行 int j = 0; for(j=0; j<=i; j++) { printf(" "); } for(j=0; j<2*(line-1-i)-1; j++) { printf("*"); } printf("\n"); } return 0; }
6、求出0~100000之间的所有“水仙花数”并输出。“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。
/* 思路: 此题的关键在于只要知道判断一个数据是否为水仙花数的方式,问题就迎刃而解。假定给定一个数据data,具体检测方式如下: 1. 求取data是几位数 2. 获取data中每个位置上的数据,并对其进行立方求和 3. 对data中每个位上的数据立方求和完成后,在检测其结果是否与data相等即可, 相等:则为水仙花数 否则:不是 具体实现参考以下代码。 */ #include <stdio.h> #include <math.h> int main() { int i = 0; for(i=0; i<=99999; i++) { int count = 1; int tmp = i; int sum = 0; //判断i是否为水仙花数 //1. 求判断数字的位数 while(tmp/10) { count++; tmp = tmp/10; } //2. 计算每一位的次方和 tmp = i; while(tmp) { sum += pow(tmp%10, count); tmp = tmp/10; } //3. 判断 if(sum == i) printf("%d ", i); } return 0; }
7、 求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222
/* 思路: 通过观察可以发现,该表达式的第i项中有i个a数字,因此: 假设第i项为temp,则第i+1项为temp*10+a 具体参考以下代码 */ int main() { int a = 0; int n = 0; int i = 0; int sum = 0; int tmp = 0; scanf("%d%d", &a, &n); for(i=0; i<n; i++) { tmp = tmp*10+a; sum += tmp; } printf("%d\n", sum); return 0; }