一、判断题
1-9
为了检查以下if-else语句的两个分支是否正确,至少需要设计3组测试用例,即x的取值至少有三组(小于15的数、15和大于15的数)。
if (x <= 15){
y = 4 * x / 3;
} else{
y = 2.5 * x - 10.5;
}
错F 正确T
【思想】:暂时没找到 暂定为 自己思考有几组就几组;
选择题
若变量已正确定义,要求程序段完成求5!的计算,以下不能完成此操作的是
A.
for (i = 1, p = 1; i <= 5; i++) p *= i;
B.
for (i = 1; i <= 5; i++) {p = 1; p *= i;}
C.
i = 1; p = 1; while (i <= 5) {p *= i; i++;}
D.
i = 1; p = 1; do {p *= i; i++;} while (i <= 5);
错D 正确B
错因:B每次循环后P=1 自我认为do whlie的算到6了 为什么没算到6?
因为i++ 判断时候已经加了1 !
三、填空题
4-1
已知字符’a’的ASCII码为97,则下列语句的输出结果为
b#100#
printf("%c#%d#", 98 , 'c' );
错 b#100# 对b#99#
错因:粗心
4-6
当a=1,b=2,c=3时,下面打印语句的输出是
1#0#
printf(“%d#%d#”, (a, b), a>b?(c=4):(c=5) );
错1#0# 对2#5#
错因
1.逗号表达式不会
2.认为后面的赋值是拿来判断(c=5)= =0
【思想】:逗号表达式:从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值
程序填空题
5-1
小写转大写(基础版)
下面的程序输入小写字母,输出对应的大写字母。请在空白处填写表达式完成该程序。
#include <stdio.h>
int main()
{
char lower, upper;
lower = getchar();
upper = ________;
putchar(upper);
putchar('\n');
return 0;
}
错lower+(‘a’-‘A’) 正确:lower-‘a’+‘A’;
【错因】 小写字母ASCII码大于大写
【思路】
1.不能写成 ‘lower’-‘a’+‘A’;因为lower本身已经是个字符,字符在计算时会直接用本身ASCII码计算!!
5-2
输入一个正整数n,再输入n个整数,输出其中的偶数。要求相邻数字中间用一个空格分开,行末不得有多余空格。
# include <stdio.h>
int main()
{
char ch;
int first, k, n, x;
scanf("%d", &n);
_______
for(k = 1; k <= n; k++){
scanf("%d", &x);
if
_______
{
if ( first == 1 ){
printf("%d", x);
_______
}else{
________
}
}
}
return 0;
}
错
1.first=1;
2.(x%2==0)
3.first++;
4.printf(" ")
错因:4.printf(" %d",x);
【思想】scanf输入多个数 (for)时 可以回车也可以空格
求素数
错误
#include<stdio.h>
int main()
{
int i,j,n,y=1;
scanf("%d",&n);
for(i=2;i<n;i++)
{
for(j=2;j<i;j++)
{
if(i%j==0)
break;
else if(i%j!=0)
continue;}
if(j==i+1)
printf("%d",i);}
}
正确
#include<stdio.h>
#include<math.h>
int main()
{
int i,n;
scanf("%d",&n);
for(i=2;i<=n;i++)
{
int j;
for(j=2;j<i;j++)
if(i%j==0) break;
if(j>=i)
{
printf("%d ",i);
}
}
return 0;
}
错误 最后的if应该是(j= =i) 写j= =i+1本意是防止j与i相等 但for中已经避免了这个东西
【思想】1.不用else if continue也行 因为if一个条件如果不满足,则自动去重新开始循环;
2.后面的这个(j= =i)这里 自己认为是j怎么可能到i 以为在循环中j只能等于i-1 其实不然 因为要等于i才能跳出循环