“欲买桂花同载酒,终不似少年游!”不惧岁月不惧风,心之所向素履以往。愿你出走半生,归来仍是少年。青春没结束,我们永远风华正茂。
1.设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是( )
A: n=0;while(ch=getchar()!=‘\n’)n++; B: n=0;while(getchar()!=‘\n’)n++;
C: for(n=0;getchar()!=‘\n’;n++); D: n=0;for(ch=getchar();ch!=‘\n’;n++);
答案:D
答题思路:对于for循环
,第一项初始化表达式只执行一次,因此ch
只从输入流中取一个字符,之后就不会再取字符了。所以这里我们需要了解for循环
的执行流程。
2.运行以下程序后,如果从键盘上输入 65 14<回车> ,则输出结果为( )
#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
int m, n;
printf("Enter m,n:");
scanf("%d%d", &m, &n);
while (m != n)
{
while (m > n)
m = m - n;
while (n > m)
n = n - m;
}
printf("m=%d\n", m);
return 0;
}
A: 3 B: 2 C: 1D: 0
3.若运行以下程序时,从键盘输入 ADescriptor<回车> ,则下面程序的运行结果是( )
#include
int main()
{
char c;
int v0 = 0, v1 = 0, v2 = 0;
do
{
switch (c = getchar())
{
case'a':case'A':
case'e':case'E':
case'i':case'I':
case'o':case'O':
case'u':case'U':v1 += 1;
default:v0 += 1; v2 += 1;
}
} while (c != '\n');
printf("v0=%d,v1=%d,v2=%d\n", v0, v1, v2);
return 0;
}
A: v0=7,v1=4,v2=7 B: v0=8,v1=4,V2=8 C: v0=11,v1=4,v2=11 D: v0=12,v1=4,v2=12
答案:D
答题思路:代码switch 语句
中没有break
,则每次找到入口进入后,顺序执行到代码块结束为止。例如当c 为 'A'
时,从case 'A'
进入,先后执行v1+=1;v0+=1;v2+=1;
,而当c 为 'p'
时,从default
进入,先后执行v0+=1;v2+=1;
,容易看出最终v0 和 v2
是相等的
本题的解题流程如下:
✅运行结果如下:
4.如下函数是求两个int数字最大公约数的,指出其中存在的问题【多选】( )
int gcd(char x,char y)
{
int min = x < y ? x : y;
for (min = 0; min > 0; min--)
if (x % min = 0 && y % min = 0)
return min;
}
A: 参数类型不对 B: 循环变量min初值不对 C: 判断等于的符号不对 D: 返回类型不对
答案:ABC
答题思路:
1.函数实参是int
,形参用char
不对,会发生截断丢失数据;
2.min
在for循环
开始时更新为0,不再是两个形参中的较小值;
3.判断是否整除的时候误将==写成=赋值运算符
;
4.函数最终要返回一个int值
,返回值类型没问题,但是这里要强调一个选项中没写出的问题,如果是牛客网上的题,会报编译错误,说该函数不是在所有情况下都有返回值,只有在if条件
成立的情况下有返回值,一般在vs上这种情况能通过,编译器会给一个默认的返回值。
5.执行下面的程序段,语句3的执行次数为( )
for(i = 0; i <= n-1; i++) // (1)
for(j = n; j > i; j--) // (2)
state; // (3)
A: n(n+2)/2 B: (n-1)(n+2)/2 C: n(n+1)/2 D: (n-1)(n+2)
答案:C
答题思路:外循环有n
次,当i=0
,内循环为n
次,当i=1
,内循环为n-1
次,当i=2
时,内循环为n-2
次,以此类推,总次数为n+(n-1)+(n-2)+......+2+1
,就是个等差数列,等于n(n+1)/2.
好啦,第四天的练习到这里就结束啦!今天少了两题编程,明天补上!后期会继续更新C语言的小练笔,欢迎大家持续关注、点赞和评论!❤️❤️❤️