物联1234 DX锋
1. 下面程序运行结果为( A )。请解释原因。
void main ( )
{
char c = 'a';
if ('a' < c <= 'z')
{
printf ("LOW");
}
else
{
printf ("UP");
}
}
A. LOW B. UP C. LOWUP D. 程序语法错误
#include <stdio.h>
main()
{
char c = 'a'; //令字符c为字符'a'
if ('a' < c <= 'z') /*首先判断c是否大于'a',否,为假命题,取值0;
再判断0是否小于或等于'z'(132),是,条件成立,执行if后的语句。*/
{
printf ("LOW");
}
else
{
printf ("UP");
}
}
2.请阅读以下程序,该程序( D )。请对选项进行解释。
void main( )
{
int a = 5, b = 0, c = 0;
if (a = b + c) printf ("***\n");
else printf ("$$$\n");
}
A. 有语法错不能通过编译 B. 可以通过编译但不能通过连接 C. 输出*** D. 输出$$$
#include <stdio.h>
main ()
{
int a = 5, b = 0, c = 0;
if (a = b + c) //赋值表达式,令a的值为b+c即为0,假命题,则执行else后的语句
{
printf ("***\n");
}
else
{
printf ("$$$\n");
}
}
3.填空:以下程序运行结果是__6__,请解释。
void main( )
{
int m = 5;
if (m++ > 5)
printf("%d\n", m);
else printf("%d\n", m--);
}
#include <stdio.h>
main ()
{
int m = 5; //给变量m赋值为5
if (m++ > 5) /*变量m先自增加一为6,再比较是否大于5;
是,条件成立,执行if后的语句,输出m的值6。*/
{
printf ("%d\n",m);
}
else
{
printf ("%d\n",m--);
}
}
4.已知 int x = 10, y = 20, z = 30; 以下语句执行后x =____20____, y=___30___,z=___30___。请解释。
if (x > y) z = x; x = y; y = z;
#include <stdio.h>
main ()
{
int x = 10;
int y = 20;
int z = 30;
if (x > y) //判断x是否大于y,否,不执行if后的语句//
{
z = x;
}
x = y; //将y的值赋给x,即x赋值为20//
y = z; //将z的值赋给y,即y赋值为30//
printf ("x=%d\ny=%d\nz=%d\n",x,y,z);
}
5.下面的程序的功能是根据输入的百分制成绩score,转换成相应的五分制成绩grade并打印输出。
转换的标准为:
当90≦score≦100时,grade为A;
当80≦score<90时,grade为B;
当70≦score<80时,grade为C;
当60≦score<70时,grade为D;
当score<60时,grade为E;
请填空:(1)_____&score_____(2)_____score / 10_____(3)_____break_____ (4)_____9_____(5)_____8_____(6)_____7_____ (7)_____6_____
#include <stdio.h>
void main ( ) {
int score, mark;
scanf ("%d",_____(1)_____);
mark = _____(2)_____;
switch (mark)
{
default: printf ("%d--E", score); _____(3)_____;
case 10:
case_____(4)_____: printf ("%d--A", score); break;
case_____(5)_____: printf ("%d--B", score); break;
case_____(6)_____: printf ("%d--C", score); break;
case_____(7)_____: printf ("%d--D", score); break;
}
}
#include <stdio.h>
void main()
{
int score, mark;
scanf("%d",&score); //键盘输入score的值
mark = score / 10; //令mark的值为score的十位,整形常量相除向下取整,则mark为score除以10向下取整的值
switch (mark) //判断mark的值
{
default: printf ("%d--E",score);break; //若不为下面五种情况,则执行default后的语句,并跳转到switch外
case 10: //若为10,执行case 10后的语句,无可执行的语句,向下执行case 9后的语句,并跳转到switch外
case 9: printf("%d--A",score);break; //若为9,执行case 9后的语句,并跳转到switch外
case 8: printf("%d--B",score);break; //若为8,执行case 8后的语句,并跳转到switch外
case 7: printf("%d--C",score);break; //若为7,执行case 7后的语句,并跳转到switch外
case 6: printf("%d--D",score);break; //若为6,执行case 6后的语句,并跳转到switch外
}
return 0;
}
解决了void main()报错的问题:创建项目时选C项目而不是C++项目
6. 程序实现:输入1个年份 year,判断year是否是闰年?
#include <stdio.h>
int main()
{
int year;
printf("请输入一个年份\n");
scanf("%d",&year);
if (0 == year % 4 && 0 != year % 100 ) //能被4整除且不能被100整除为闰年//
{
printf("闰年");
}
else if (0 == year % 400) //能被400整除为闰年//
{
printf("闰年");
}
else //其他情况为平年//
{
printf("平年");
}
return 0;
}
7. 程序实现:输入3个数 numA, numB, numC,计算这三个数的最大值,最小值。
#include <stdio.h>
main()
{
float numA, numB, numC, max, min;
printf ("请输入三个数\n");
scanf ("%f%f%f",&numA,&numB,&numC);
max = numA, min = numA; //假设max和min都为numA
if (numB > max) //若numB比max大,则令max为numB;反之max不变
{
max = numB;
}
if (numC > max) //若numC比max大,则令max为numC;反之max不变
{
max = numC;
}
if (numB < min) //若numB比min小,则令min为numB;反之min不变
{
min = numB;
}
if (numC < min) //若numB比min大,则令min为numB;反之min不变
{
min = numC;
}
if (fabs(max - min) <= 1e-7) /*比较浮点数相等时,只要两值的差值小于足够小的值时,即可判断为相等,因此不能用==比较;
而单精度浮点数的有效位只有6或7位,则若要判断浮点数是否相等,判断它们的差值是否小于或等于10的负7次方即可
若max与min的差值足够小则可看作max与min相等,即无最大值与最小值*/
{
printf ("无最大值与最小值\n");
}
else //若最大值与最小值不等则输出结果
{
printf ("最大值为%f\n最小值为%f\n",max,min);
}
return 0;
}
8. 程序实现:仿照课堂PPT,实现一个简单的计算器程序(只要求计算加减乘除)。
要求:用户从键盘输入如下形式的表达式:操作数1 运算符op 操作数2, 比如:1 + 2, 1 / 2, 1 * 2 等,能够输出对应的结果,比如:1 + 2 = 3,1 / 2 = 0.500000, 1 * 2 = 2.
#include <stdio.h>
main()
{
char op;
float data1, data2;
printf ("请输入表达式\n");
scanf ("%f %c%f",&data1,&op,&data2); //%c前有空格用于输入回车键//
switch (op) //判断运算符//
{
case '+': //加法//
printf ("%f + %f = %f\n",data1,data2,data1 + data2);
break; //跳转出switch//
case '-': //减法//
printf ("%f - %f = %f\n",data1,data2,data1 - data2);
break; //跳转出switch//
case '*': //乘法,三种运算符,若case后没有语句则运算下一个case//
case 'x':
case 'X':
printf ("%f * %f = %f\n",data1,data2,data1 * data2);
break; //跳转出switch//
case '/': //除法//
if (fabs(data2) <= 1e-7) /*判断除数data2是否为零,若为零则输出除零错误。
比较浮点数相等时,只要两值的差值小于足够小的值时,即可判断为相等,因此不能用==比较;
而单精度浮点数的有效位只有6或7位,则若要判断浮点数是否为零,判断data的绝对值是否小于或等于10的负7次方即可 */
{
printf ("除零错误!\n");
break; //跳转出switch//
}
else //除数不为零//
{
printf ("%f / %f = %f\n",data1,data2,data1 / data2);
break; //跳转出switch//
}
default: //若op不为以上字符,则输出无效运算符//
printf ("无效运算符\n");
}
}
以上三道题的程序实现,请尽可能将核心步骤进行代码注释。