当前位置:网站首页>C语言试题三(程序选择题——含知识点详解)
C语言试题三(程序选择题——含知识点详解)
2022-06-11 04:40:00 【梦想new的出来】
基本输入输出及流程控制
1.
#include <stdio.h>
main()
{
int a=1,b=3,c=5;
if (c==a+b)
printf("yes\n");
else
printf("no\n");
}
运行结果为:no
详见教材p89 选择结构
详见教材p91关系符号
详见附录D p378符号的优先级
==表示判断符号两边的值是否相等;=表示将符号右边的值赋给左边的变量
本题考点是选择结构3种基本形式的第二种
选择结构三种一般形式中的“语句”皆为复合语句,复合语句要用{
}括起来,只有当复合语句中只包括一条语句时可以省略{
},此题即如此,因此两个printf操作没有加{
}
若c==a+b成立,则执行printf("yes\n");
否则(即c==a+b不成立),执行printf("no\n");
+的优先级高于==,因此先算a+b,值为4, 表达式5==4不成立,因此执行printf("no\n");即输出字符串no
2.
#include <stdio.h>
main()
{
int a=12, b= -34, c=56, min=0;
min=a;
if(min>b)
min=b;
if(min>c)
min=c;
printf("min=%d", min);
}
运行结果为: min=-34
详见教材p89 选择结构
本题考点是选择结构3种基本形式的第一种
一共包含了两个选择结构(两个if语句)
定义变量,并赋值 此时a=12, b= -34, c=56, min=0
将a中值拷贝,赋给min,覆盖了min中的0,此时min中的值被更新为12。
若min>b成立,则执行min=b;
若min>c成立,则执行min=c;
输出min中的值
12大于-34,第一个if语句的表达式成立,因此执行min=b; 执行后min中的值被更新为-34.
-34小于56,第二个if语句的表达式不成立,因此不执行min=c;
最后输出min中的值,为-34.
3.
#include <stdio.h>
main()
{
int x=2,y= -1,z=5;
if(x<y)
if(y<0)
z=0;
else
z=z+1;
printf(“%d\n”,z);
}
运行结果为:5
遇到选择结构,首先要明确条件表达式成立时执行哪些操作。本题中,第一个if语句,其后的复合语句没有大括号{
},说明复合语句中只包含一条语句,进而省略了{
}。内层的if...else...是选择结构的第二种基本形式,在结构上视为一条语句。因此内层的if...else...作为第一个if语句的复合语句。
若表达式x<y成立,则继续判断
若y<0,则执行z=0;
否则(即y>=0),执行z=z+1;
输出z
2>-1,表达式x<y不成立,因此不执行内层的if…else….进而z中的值没有被改变。
输出z中的值为5
4.
#include <stdio.h>
main()
{
float a,b,c,t;
a=3;
b=7;
c=1;
if(a>b)
{
t=a;a=b;b=t;}
if(a>c)
{
t=a;a=c;c=t;}
if(b>c)
{
t=b;b=c;c=t;}
printf("%5.2f,%5.2f,%5.2f",a,b,c);
}
运行结果为:1.00, 3.00, 7.00
详见教材p72数据的输出形式
本题包含了3个if语句,每个if语句后的{
}都不可省略,因为每个{
}中都包含了多条语句
若表达式a>b成立,则执行{
t=a;a=b;b=t;}
若表达式a>c成立,则执行{
t=a;a=c;c=t;}
若表达式b>c成立,则执行{
t=b;b=c;c=t;}
输出a,b,c中的值,要求输出的每个数据宽度为5个空格,小数部分保留2位,数据右对齐
3小于7,因此表达式a>b不成立,因此不执行{
t=a;a=b;b=t;}
3大于1,因此表达式a>c成立,则执行{
t=a;a=b;b=t;}。第一句,将a中的3拷贝,粘贴到t中;第二句,将c中的1拷贝,粘贴到a中,覆盖掉先前的3;第三句。将t中的3拷贝到c中,覆盖掉c中先前的1. 执行完复合语句后实现了a,c元素的值的互换,a为1,c为3,t为3,。
7大于c中的3,因此b>c成立,执行则执行{
t=b;b=c;c=t;},过程同上,执行后b为3,c为7,t为7
此时输出a,b,c中的值为1.00, 3.00, 7.00
5.
#include < stdio .h >
main ( )
{
float c=3.0 , d=4.0;
if ( c>d ) c=5.0;
else
if ( c==d ) c=6.0;
else c=7.0;
printf ( “%.1f\n”,c ) ;
}
运行结果为:7.0
此题为if...else...语句的嵌套,第二if...else...作为第一个if...else...语句else部分的复合语句。
若表达式c>d成立,则执行c=5.0;
否则(表达式c>d不成立)
若表达式c==d成立,则执行c=6.0;
否则,执行c=7.0;
输出c中的值
3.0小于4.0,因此表达式c>d不成立,执行第二个if…else…。
3.0不等于4.0,因此表达式c==d不成立,执行c=7.0,将7.0赋给c, 覆盖掉c中的3.0,此时c中的值为7.0
输出此时的c中的值
6.
#include <stdio.h>
main()
{
int m;
scanf("%d", &m);
if (m >= 0) 0
{
if (m%2 == 0) printf("%d is a positive even\n", m);
else printf("%d is a positive odd\n", m); }
else
{
if (m % 2 == 0) printf("%d is a negative even\n", m);
else printf("%d is a negative odd\n", m); }
}
若键入-9,则运行结果为: -9 is a negative odd
7.
#include <stdio.h>
main()
{
int num=0;
while(num<=2){
num++;printf("%d\n",num);}
}
运行结果为:
1
2
3
详见教材p115循环结构
当循环条件num<=2成立的时候,执行循环体{
num++;printf("%d\n",num);}中的语句。
循环初值num为0;
循环条件num<=2成立
第1次循环:执行num++;即将num中的值加1,执行后num为1;
执行printf("%d\n",num);在屏幕上输出num中的值,即输出1,之后换行
此时num中的值为1,循环条件num<=2成立
第2此循环:执行num++;即将num中的值加1,执行后num为2;
执行printf("%d\n",num);在屏幕上输出num中的值,即输出2,之后换行
此时num中的值为2,循环条件num<=2成立
第3此循环:执行num++;即将num中的值加1,执行后num为3;
执行printf("%d\n",num);在屏幕上输出num中的值,即输出3,之后换行
此时num中的值为3,循环条件num<=2不成立,结束循环。
8.
#include <stdio.h>
main( )
{
int sum=10,n=1;
while(n<3) {
sum=sum-n; n++; }
printf(“%d,%d”,n,sum);
}
运行结果为:3,7
当循环条件n<3成立的时候,执行循环体{
sum=sum-n; n++; }中的语句。
循环初值sum为10,n为1;
循环条件n<3成立
第1次循环:执行sum=sum-n=10-1=9;
执行n++,即将n中的值加1,执行后n为2;
此时n中的值为2,sum中的值为9,循环条件n<3成立,继续执行循环
第2次循环:执行sum=sum-n=9-2=7;
执行n++,即将n中的值加1,执行后n为3;
输出此时n,sum中的值,即为3,7。需要注意,在printf(“%d,%d”,n,sum); 中要求输出的数据彼此间用逗号间隔,因此结果的两个数据间一定要有逗号
9.
#include <stdio.h>
main()
{
int num,c;
scanf("%d",&num);
do {
c=num%10; printf("%d",c); }while((num/=10)>0);
printf("\n");
}
从键盘输入23,则运行结果为:32
详见教材p117循环结构;p60复合的赋值运算符
do{
}while(表达式);
先无条件执行循环体,再判断循环条件。注意while(表达式)后有分号
定义整型变量num,c;
为num赋一个整型值;
执行{
c=num%10; printf("%d",c); }直到循环条件(num/=10)>0不成立;
输出换行
已知为num赋值23
第1次执行循环体
执行c=num%10=23%10=3;
执行printf("%d",c);输出3
判断循环条件 num/=10等价于num=num/10; 因此num=23/10=2, 2大于0,因此循环条件(num/=10)>0成立,继续执行循环体。执行完第1次循环时,num为2,c为3
第2次执行循环体
执行c=2%10=2;
执行printf("%d",c);再输出2
判断循环条件num=2/10=0,0等于0,因此循环条件(num/=10)>0不成立。结束循环
10
#include <stdio.h>
main()
{
int s=0,a=5,n;
scanf("%d",&n);
do {
s+=1; a=a-2; }while(a!=n);
printf("%d,%d\n",s,a);
}
若输入的值1,运行结果为: 2,1
详见教材p117循环结构;p60复合的赋值运算符
执行{
s+=1; a=a-2; }直到循环条件a!=n不成立;
已知为n赋值1,s为0,a为5
第1次执行循环体
执行s+=1;等价于s=s+1=0+1
执行a=a-2; a=5-2=3
判断循环条件,3不等于1,因此循环条件a!=n成立,继续执行循环体。
执行完第1次循环时,s为1,a为3
第2次执行循环体
执行s+=1;等价于s=s+1=1+1=2
执行a=a-2; a=3-2=1
判断循环条件,1等于1,因此循环条件a!=n不成立,结束循环。
执行完第2次循环时,s为2,a为1
输出此时s,a中的值,结果为2,1
11.
#include "stdio.h"
main()
{
char c;
c=getchar();
while(c!='?') {
putchar(c); c=getchar(); }
}
如果从键盘输入abcde?fgh(回车)
运行结果为:abcde
12.
#include <stdio.h>
main()
{
char c;
while((c=getchar())!=’$’)
{
if(‘A’<=c&&c<=‘Z’) putchar(c);
else if(‘a’<=c&&c<=‘z’) putchar(c-32); }
}
当输入为ab*AB%cd#CD$时,运行结果为:ABABCDCD
13.
#include <stdio.h>
main()
{
int x, y =0;
for(x=1;x<=10;x++)
{
if(y>=10)
break;
y=y+x;
}
printf(“%d %d”,y,x);
}
运行结果为:10 5
详见教材p120 for语句
详见教材p126~128 break,continue语句
for( 表达式1;表达式2;表达式3)
{
}
(1) 先求解表达式1
(2) 求解表达式2,若其值为真,执行循环体,然后执行 (3). 若为假,则结束循环,转到(5)
(3) 求解表达式3
(4) 转回上面 (2)继续执行
(5) 循环结束,执行for语句下面的一个语句
break ,跳出循环体;continue,结束本次循环(第i次循环),继续执行下一次循环(第i+1次循环)
此题 表达式1为x=1,表达式2(循环条件)为x<=10,表达式3为x++
初值x为1,y为0,循环条件(即表达式2)x<=10成立,进入循环体
第1次循环
执行if语句。0小于10,if语句的条件表达式不成立,不执行break;
执行y=y+x; y=0+1=1
转向表达式3,执行x++, x=x+1=1+1=2。循环条件x<=10成立,进入第2次循环
第2次循环
执行if语句。1小于10,if语句的条件表达式不成立,不执行break;
执行y=y+x; y=1+2=3
转向表达式3,执行x++, x=x+1=2+1=3。循环条件x<=10成立,进入第3次循环
第3次循环
执行if语句。3小于10,if语句的条件表达式不成立,不执行break;
执行y=y+x; y=3+3=6
转向表达式3,执行x++, x=x+1=3+1=4。循环条件x<=10成立,进入第4次循环
第4次循环
执行if语句。6小于10,if语句的条件表达式不成立,不执行break;
执行y=y+x; y=6+4=10
转向表达式3,执行x++, x=x+1=4+1=5。循环条件x<=10成立,进入第5次循环
第5次循环
执行if语句。10等于10,if语句的条件表达式成立,执行break,跳出循环。
从break跳出至for语句的下一条语句。执行printf(“%d %d”,y,x);
输出当前的y与x.结果为10 5
14.
#include<stdio.h>
main( )
{
char ch;
ch=getchar( );
switch(ch)
{
case ‘A’ : printf(“%c”,’A’);
case ‘B’ : printf(“%c”,’B’); break;
default: printf(“%s\n”,”other”);
} }
当从键盘输入字母A时,运行结果为:AB
详见教材p103,switch语句
switch(表达式)
{
case 常量1 :语句1
case 常量2 :语句2
┇ ┇ ┇
case 常量n :语句n
default : 语句n+1
}
其中表达式,常量1,…,常量n都为整型或字符型
case相当于给出执行程序的入口和起始位置,若找到匹配的常量,则从此处开始往下执行程序,不再匹配常量,直至遇到break或switch结束
本题过程:
首先从键盘接收一个字符’A’并将其放在变量ch中。
执行switch语句。Switch后面的条件表达式为ch,因此表达式的值即为字符’A’. 用字符’A’依次与下面的 case中的常量匹配。
与第1个case后的常量匹配,则从其后的语句开始往下执行程序(在执行过程中不再进行匹配。)因此先执行printf(“%c”,’A’),屏幕上输出A;再往下继续执行printf(“%c”,’B’),屏幕上输出B;再继续执行break, 此时跳出switch语句。
15.
#include <stdio.h>
main( )
{
int a=1,b=0;
scanf(“%d”,&a);
switch(a)
{
case 1: b=1;break;
case 2: b=2;break;
default : b=10;}
printf("%d ", b);
}
若键盘输入5,运行结果为:10
本题过程:
首先用scanf函数为变量a赋值为5。
执行switch语句。switch后面的条件表达式为a,因此表达式的值即为5. 用5依次与下面 case中的常量匹配。没有找到匹配的常量,因此两个case后的语句都不执行。执行default后面的语句b=10;将10赋给变量b。
输出变量b,结果为10
16.
#include <stdio.h>
main()_
{
char grade=’C’;
switch(grade)
{
case ‘A’: printf(“90-100\n”);
case ‘B’: printf(“80-90\n”);
case ‘C’: printf(“70-80\n”);
case ‘D’: printf(“60-70\n”); break;
case ‘E’: printf(“<60\n”);
default : printf(“error!\n”);
}
}
运行结果为:
70-80
60-70
本题过程:
首先从键盘接收一个字符’C’并将其放在变量grade中。
执行switch语句。switch后面的条件表达式为grade,因此表达式的值即为字符’C’. 用字符’C’依次与下面的 case中的常量匹配。
与第3个case后的常量匹配,则从其后的语句开始往下执行程序(在执行过程中不再进行匹配。)因此先执行printf(“70-80\n”);,屏幕上输出70-80,并换行;再往下继续执行printf(“60-70\n”),屏幕上输出60-70,并换行;再继续执行break, 此时跳出switch语句。
17.
#include <stdio.h>
main()
{
int y=9;
for(;y>0;y- -)
if(y%3==0)
{
printf(%d”,- -y);
}
}
运行结果为:
852
详见教材p53,自增自减符号
此题 表达式1被省略,表达式2(循环条件)为y>0,表达式3为y--
初值y为9,循环条件(即表达式2)y>0成立,进入循环体
第1次循环
执行if语句。9%3==0,if语句的条件表达式成立,执行printf(%d”,- -y),即y先自减1变为8,然后在输出,因此屏幕上输出8
转向表达式3,执行y--, y=y-1=8-1=7。循环条件y>0成立,进入第2次循环
第2次循环
执行if语句。7%3不为0,if语句的条件表达式不成立,不执行printf(%d”,- -y)
转向表达式3,执行y--, y=y-1=7-1=6。循环条件y>0成立,进入第3次循环
第3次循环
执行if语句。6%3==0,if语句的条件表达式成立,执行printf(%d”,- -y),即y先自减1变为5,然后在输出,因此屏幕上输出5
转向表达式3,执行y--, y=y-1=5-1=4。循环条件y>0成立,进入第4次循环
第4次循环
执行if语句。4%3不为0,if语句的条件表达式不成立,不执行printf(%d”,- -y)
转向表达式3,执行y--, y=4-1=3。循环条件y>0成立,进入第5次循环
第5次循环
执行if语句。3%3==0,if语句的条件表达式成立,执行printf(%d”,- -y),即y先自减1变为2,然后在输出,因此屏幕上输出2
转向表达式3,执行y--, y=y-1=2-1=1。循环条件y>0成立,进入第5次循环
第6次循环
执行if语句。1%3不为0,if语句的条件表达式不成立,不执行printf(%d”,- -y)
转向表达式3,执行y--, y=1-1=0。循环条件y>0不成立,循环结束。
18.
#include <stdio.h>
main()
{
int i,sum=0; i=1;
do{
sum=sum+i; i++; }while(i<=10);
printf(“%d”,sum);
}
运行结果为: 55
19.
#include <stdio.h>
#define N 4
main()
{
int i;
int x1=1,x2=2;
printf("\n");
for(i=1;i<=N;i++)
{
printf("%4d%4d",x1,x2);
if(i%2==0)
printf("\n");
x1=x1+x2;
x2=x2+x1;
}
}
运行结果为:
1 2 3 5
8 13 21 34
此题 首先为整型变量赋初值x1=1,x2=2
表达式1为i=1,表达式2(循环条件)为i<=N即i<=4,表达式3为i++
循环变量初值i为1,循环条件(即表达式2)i<=4成立,进入第1次循环
第1次循环
执行printf("%4d%4d",x1,x2);因此屏幕上输出1 2
执行if语句。1%2不为0,if语句的条件表达式不成立,不执行printf("\n");
执行x1=x1+x2=1+2=3;此时x1中的值已变为3
执行x2=x2+x1=2+3=5。
转向表达式3,执行i++, i为2。循环条件i<=4成立,进入第2次循环
第2次循环
执行printf("%4d%4d",x1,x2);因此屏幕上输出3 5
执行if语句。2%2==0,if语句的条件表达式成立,执行printf("\n");换行
执行x1=x1+x2=3+5=8;此时x1中的值已变为8
执行x2=x2+x1=5+8=13。
转向表达式3,执行i++, i为3。循环条件i<=4成立,进入第3次循环
第3次循环
执行printf("%4d%4d",x1,x2);因此屏幕上输出8 13
执行if语句。3%2不为0,if语句的条件表达式不成立,不执行printf("\n");
执行x1=x1+x2=8+13=21;此时x1中的值已变为21
执行x2=x2+x1=21+13=34。
转向表达式3,执行i++, i为4。循环条件i<=4成立,进入第4次循环
第2次循环
执行printf("%4d%4d",x1,x2);因此屏幕上输出21 34
执行if语句。4%2==0,if语句的条件表达式成立,执行printf("\n");换行
执行x1=x1+x2=21+34=55;此时x1中的值已变为55
执行x2=x2+x1=34+55=89。
转向表达式3,执行i++, i为5。循环条件i<=4不成立,结束循环
20
#include <stdio.h>
main( )
{
int x, y;
for(x=30, y=0; x>=10, y<10; x--, y++)
x/=2, y+=2;
printf(“x=%d,y=%d\n”,x,y);
}
运行结果为:
x=0,y=12
21.
#include <stdio.h>
#define N 4
main( )
{
int i,j;
for(i=1;i<=N;i++)
{
for(j=1;j<i;j++)
printf(" ");
printf("*");
printf("\n");
}}
运行结果为:
*
*
*
*
详见教材P41符号常量
用宏处理指令定义符号常量N为4,在编译过程中,遇到N即视为整数4。
外层for循环,表达式1为i=1,表达式2(循环条件)为i<=N,表达式3为 i++
内层for循环,表达式1为j=1,表达式2(循环条件)为j<i, 表达式3为j++
首先计算外层循环的表达式1,i为1,使得循环条件i<=4成立,进入外层for循环体
外层for循环第1次 此时i为1
内层循环j=1,使得循环条件j<i不成立,因此不执行内层循环体(不输出空格)
执行printf("*");
执行printf("\n");换行
至此外层循环体执行完,计算外层循环的表达式3,i++,此时i为2. 使得循环条件i<=4
成立,再次进入外层for循环体
外层for循环第2次 此时i为2
内层循环j=1,使得循环条件j<i成立
第1次执行内层循环体printf(" ");
执行内层循环表达式3,j++为2,j<i不成立,跳出内层循环
执行printf("*");
执行printf("\n");换行
至此外层循环体执行完,计算外层循环的表达式3,i++,此时i为3. 使得循环条件i<=4
成立,进入外层for循环体
外层for循环第3次 此时i为3
内层循环j=1,使得循环条件j<i成立
第1次执行内层循环体printf(" ");
执行内层循环表达式3,j++为2,j<i成立,再次执行内层循环
第2次执行内层循环体printf(" ");
执行内层循环表达式3,j++为3,j<i不成立,跳出内层循环
执行printf("*");
执行printf("\n");换行
至此外层循环体执行完,计算外层循环的表达式3,i++,此时i为4. 使得循环条件i<=4
成立,进入外层for循环体
外层for循环第4次 此时i为4
内层循环j=1,使得循环条件j<i成立
第1次执行内层循环体printf(" ");
执行内层循环表达式3,j++为2,j<i成立,再次执行内层循环
第2次执行内层循环体printf(" ");
执行内层循环表达式3,j++为3,j<i成立,再次执行内层循环
第3次执行内层循环体printf(" ");
执行内层循环表达式3,j++为4,j<i不成立,跳出内层循环
执行printf("*");
执行printf("\n");换行
至此外层循环体执行完,计算外层循环的表达式3,i++,此时i为5. 使得循环条件i<=4
不成立,跳出外层for循环体
边栏推荐
- The second discussion class on mathematical basis of information and communication
- 国际期货黄金手续费怎么算?
- Database introduction
- PostgreSQL database replication - background first-class citizen process walreceiver receiving and sending logic
- Unity MonoSingleton
- 梅州P2实验室建设方案阐述
- Guanghetong officially released the sc126 series of intelligent modules to promote more intelligent connection
- Sorting out relevant programming contents of renderfeature of unity's URP
- Unity 消息框架 NotificationCenter
- Decision tree (hunt, ID3, C4.5, cart)
猜你喜欢

Meedu knowledge payment solution v4.5.4 source code

Unity item model rotating display

Mathematical basis of information and communication -- the first experiment

Product milestones in May 2022

Feature engineering feature dimension reduction

What are the similarities and differences between the data center and the data warehouse?

Best practices and principles of lean product development system

meedu知识付费解决方案 v4.5.4源码

New UI learning method subtraction professional version 34235 question bank learning method subtraction professional version applet source code

Unity advanced backpack system
随机推荐
Unity 可缩放地图的制作
Programming Examples Using RDMA Verbs
Redis master-slave replication, sentinel, cluster cluster principle + experiment (wait, it will be later, but it will be better)
国际琪貨:做正大主帐户风险有那些
CRMEB/V4.4标准版打通版商城源码小程序公众号H5+App商城源码
梅州植物组培实验室建设资料整理
Acts: how to hide defects?
Carbon path first, Huawei digital energy injects new momentum into the green development of Guangxi
SAVING AND LOADING A GENERAL CHECKPOINT IN PYTORCH
Guanghetong launched a new generation of 3GPP R16 industrial 5g module fg160 engineering sample
Leetcode question brushing series - mode 2 (datastructure linked list) - 725 (m): split linked list in parts
Data type conversion and conditional control statements
Unity creates rivers on uneven terrain
Holiday Homework
Exness: liquidity series - order block, imbalance (II)
USB转232 转TTL概述
Unity Editor Extension save location
碳路先行,华为数字能源为广西绿色发展注入新动能
Redis持久化(少年一贯快马扬帆,道阻且长不转弯)
Unity MonoSingleton