1、关于while(条件表达式)循环体,以下叙述正确的是?(假设循环体里面没有break、continue、return、goto等语句)
A、循环体的执行次数总是比条件表达式的执行次数多一次
B、条件表达式的执行次数总是比循环体的执行次数多一次
C、条件表达式的执行次数与循环体的执行次数一样
D、条件表达式的执行次数与循环体的执行次数无关
2、程序的输出结果是__________
#include<stdio.h>
int main()
{
int a = 0, b = 0;
for (a = 1, b = 1; a <= 100; a++)
{
if (b >= 20)break;
if (b % 3 == 1)
{
b = b + 3;
continue;
}
b = b - 5;
}
printf("%d\n",a);
return 0;
}
A、10
B、9
C、8
D、7
3、编程题(数9的个数—编写程序数一下1到100的所有整数中出现多少个数字9)
//9 19 29 39 49 59 69 79 89 99个位有9
// 90 91 92 93 94 95 96 97 98 99十位有9
//
int main()
{
int i = 0;
int count = 0;
for (i = 1; i <= 100; i++)
{
if (i % 10 == 9)
count++;
if (i / 10 == 9)
count++;
}
printf("%d\n",count);
return 0;
}
程序的运行结果为20.
4、编程题(分数求和—计算1/1-1/2+1/3-1/4+1/5…+1/99-1/100的值,打印出结果)
如果将减号全部改为加号的话,代码如下:
int main()
{
int i = 0;
//int sum = 0;
double sum = 0;
for (i = 1; i <= 100; i++)
//如果只考虑都是加法的情况
{
//sum += 1 / i;//如果是这样的程序的话,程序的打印结果为1 因为1/2=0....1/100=0
sum += 1.0 / i;//这样就可以算出小数位,由于程序的最后打印的是整型 所以还是不对,需要将sum改为double类型
}
//printf("%d\n",sum);
printf("%lf\n", sum);
return 0;
}
在这个基础上做出修改
int main()
{
int i = 0;
double sum = 0;
for (i = 1; i <= 100; i++)
{
if (i % 2 == 0)
sum -= 1.0 / i;
else
sum += 1.0 / i;
}
printf("%lf\n", sum);
return 0;
}
运行结果如下:
0.688172
再来介绍一个写法,引入一个flag,第一次的时候,让它为1,下次让它为-flag就是-1,再下一次再变为-flag就是-(-1)=1,如此循环往复。
int main()
{
int i = 0;
double sum = 0;
int flag = 1;
for (i = 1; i <= 100; i++)
{
sum +=flag*1.0 / i;
flag = -flag;
}
printf("%lf\n", sum);
return 0;
}
5、编程题(求最大值—求10个整数中的最大值)
int main()
{
int arr[10] = {1,2,3,4,5,6,20,8,9,10};
int i = 0;
int max = 0;
for (i = 0; i < 10; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
}
printf("%d\n",max);
return 0;
}
运行结果为20.
但是实际上这个代码这样写是不对的,当数字都是负数的时候就不行
应该假设数组中的第一个元素是最大值,然后剩下的元素跟它逐一进行比较,在考虑问题的时候,不能眼睛只盯着题目给出的数字要求。
int main()
{
int arr[10] = { -1,-2,-3,-4,-5,-6,-20,-8,-9,-10 };
int i = 0;
int max =arr[0];
for (i = 0; i < 10; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
}
printf("%d\n", max);
return 0;
}
代码的运行结果为-1.
6、编程题(乘法口诀表—在屏幕上打印九九乘法表)
int main()
{
int i = 0, j = 0, ret =0;
for (i = 1; i <= 9; i++)
{
printf("\n");
for (j = 1; j <= i; j++)
{
ret = i * j;
printf("%d*%d=%d ", j, i, ret);
}
//把printf("\n");这条语句放在这里最合适了
}
return 0;
}
代码运行结果如下:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
printf("%d*%d=%d ", j, i, ret);
写为printf("%d*%d=%2d ", j, i, ret);
,那么打印结果就会变为:1*1= 1,等号后面还会有一个字符的距离。或者printf("%d*%d=%-2d ", j, i, ret);
就可以使得打印结果显示会左对齐。
答案解析:
1、B
应该是判断多一次,因为最后一次的时候,判断了不满足条件了,不能进去循环体了。比如:
for(i=0;i<10;i++)
{
}
在i=0-9的时候肯定会进入循环体,但是i=10的时候,还是会判断一下,不满足判断的条件了就不进入循环体了。
2、C