C语言代码题解析(一)

        前言:将在做题过程中的一些思路进行分享,也对一些错题进行回顾。如果有哪些地方我写错了,欢迎批评指正,愿与诸位携手共同拿下C语言。

目录

1.选择题

 1.1 下面代码输出的结果是()

1.2下面代码执行的结果是()

1.3 在这段代码中,func(1) = (      ) 

1.4下面代码的执行结果是什么( )

1.5判断下面代码的结果是()

2.实操题

2.1 计算带余除法

2.2 编程判断

2.3 判断2个数的大小

2.4 写代码将三个整数数按从大到小输出

2.5  被5整除问题

 2.6 线段图案

2.7 打印1-100之间3的倍数

1.选择题

 1.1 下面代码输出的结果是()

                A. 程序有问题,不能编译

                B.输出1

                C.输出10

                D.输出0

#include <stdio.h>
int num = 10;
int main()
{
    int num = 1;
    printf("num= %d\n", num);
	return 0;	
}

        解析:1.在同一个作用域中,不允许存在多个相同名称的变量

                    2.在不同的作用域中,允许存在1多个相同名称的变量。在使用时,局部变量优先于全局变量。

        在这个题目中。num=10 是全局变量,num=1 是局部变量。所以打印出来是 num=1。选择 B

1.2下面代码执行的结果是()

        A.1 2 3 4 5 6 7 8 9 10

        B.5 5 5 5 5 5 5 5 5 5

        C.死循环的打印5

        D.0 1 2 3 4 5 6 7 8 9

#include <stdio.h>

int main()
{
	int i = 0;
	for (i = 0; i<10; i++)
	{
		if (i = 5)
			printf("%d ", i);
	}
	return 0;
}

          解析:如果if的表达式里面是 i==5 ,就是说如果当 i 等于 5时,执行打印 i 的动作。但是题目中if 的表达式是 i=5 ,到了这里总是给 i 赋值一个 5,也就是说 if 判断条件恒成立。所以选择 C

1.3 在这段代码中,func(1) = (      ) 

        A.30

        B.20

        C.16

        D.0

int func(int a)
{
    int b;
    switch (a)
    {
        case 1: b = 30;
        case 2: b = 20;
        case 3: b = 16;
        default: b = 0;
    }
    return b;
}

        解析:在 switch 语句中,如果 case 没有 break ,就会继续执行,所以这段代码,执行到最后的 default ,b=0。选择D。

1.4下面代码的执行结果是什么( )

        A.secondthird

        B.hello

        C.firstsecond

        D.hellothird

#include <stdio.h>
int main() {
	int x = 3;
	int y = 3;
	switch (x % 2) {
	case 1:
		switch (y)
		{
		case 0:
			printf("first");
		case 1:
			printf("second");
			break;
		default: printf("hello");
		}
	case 2:
		printf("third");
	}
	return 0;
}

        解析:x%2 的结果是1,所以进入 case 1:里面的 switch 语句中没有表达式中相应的 case ,于是执行 default ;内层的 switch 语句执行结束后,外层的 switch 语句中的  case 1 没有 break ,于是继续执行 case 2.。最后打印出 “hellothird”,选择D。

1.5判断下面代码的结果是()

        A.a = 8 b = 23 c = 8

        B.a = 9 b= 23 c = 8

        C.a = 9 b = 25 c = 8

        D.a = 9 b = 24 c = 8

#include <stdio.h>
int main()
{
	int a, b, c;
	a = 5;
	c = ++a;
	b = ++c, c++, ++a, a++;
	b += a++ + c;
	printf("a=%d  b=%d  c=%d\n", a, b, c);
	return 0;
}

        解析:

c = ++a;

        这行代码使用了前置++,先让 a 自增1,得到 a=6,然后将 a 的值赋予 c ,得到c=6

b = ++c , c++ , ++a , a++;

//看作下面的格式
b=++c;
c++;
++a;
a++;

        这行代码可以注释下面的这四行代码。先将 c 进行自增1,得到 c=7,然后将 c 的值赋给 b,得到b=7。c++ 、 ++a  、a++ 都是对本身进行自增1,计算过程:c=8、a=7、a=8。所以最后得到 c=8 ,a=8.

b += a++ + c;
//将简写转为正常的格式   b +=   ===》     b = b +
b = b + ( a++ + c );
//看作   
b = b + (a + c);
a++;

        这行代码可以看作第二个注释下面的这两行代码。先计算整个表达式的值,再对 a 进行自增1。计算过程:在b = b + (a +  c)带入值,b =  7 +( 8 + 8 ),之后在对 a 进行自增1,得到 b=23 ,a=9

        所以最后打印得到 a=9,b=23,c=8。选择 B

2.实操题

2.1 计算带余除法

        题目:给定两个整数a和b,多组输入,计算a除以b的整数商和余数。

        分析:根据题目,我们可以想到,输入数字需要用到 scanf 函数,求商需要用到 / 计算符,求余数需要用 % 计算符。还需要使用 if 函数来进行判断除数 b 是否为 0,使用 while 循坏来实现多组输入,对求商和余数的过程进行循环。

                 使用while循环,表达式中,当 scanf 能够读到输入的值,读到2个值就为2。在C语言中,0为假,非零为真,所以 scanf  函数能够一直成功读到数值的话,循环的条件就一直成立。

2.2 编程判断

        题目:据说智商140以上者称为天才,请写一个编程判断。输入一个整数表示一个人的智商,如果大于等于140,则表明他是一个天才,输出“天才”。要求多组输入,每行输入包括一个整数表示的智商。

        分析:在题目中,140是一个分界线,当输入的数字大于等于140时,输出天才,反之则不是。我们可以使用 if 语句来对输入的数字进行判断。需要实现多组输入,那就需要对判断过程进行循环。

        

         使用while循环,表达式中,当 scanf 能够读到输入的值,读到1个值就为1。在C语言中,0为假,非零为真,所以 scanf  函数能够一直成功读到数值的话,循环的条件就一直成立。

2.3 判断2个数的大小

        题目:判断从键盘输入的两个整数的大小关系,要求多组输入,请编程实现

        分析:需要输入2个整数,就需要使用到 scnaf 函数;实现多组输入,就需要实现比较两个数的循环,一般使用 while 循环。使用 if 进行分支循环时,需要考虑到 a>b ,a=b, a<b这些情况。

          使用while循环,表达式中,当 scanf 能够读到输入的值,读到2个值就为2。在C语言中,0为假,非零为真,所以 scanf  函数能够一直成功读到数值的话,循环的条件就一直成立。

2.4 写代码将三个整数数按从大到小输出

        题目:写代码将三个整数数按从大到小输出。

        分析:三个数的大小判断,也可以使用 if ……else if……else 这样的语句进行判断,但是需要包含多种情况,容易遗漏或者写错。

        可以使用置换的方式,给变量 a , b , c 输入三个整数,然后两两进行比较判断。以 a<b 为例,使用变量 tmp 对数值小的 a 的值 进行存储,将大的数值 b的值赋值给数值小的那个变量 a ,再将用于存储的变量 tmp 中的值,赋值给数值大的那个变量 b 。如此一来,通过两两比较判断,就可以将数值大的 b的值,赋值给了位置靠前的变量 a ;将数值小的a 的值,赋值给了位置靠后的 b 。最后输出 除变量 a , b , c 时,就是从大到小的顺序了。

        

2.5  被5整除问题

        题目:请写一串代码,多组输入判断整数是否能5整除

        分析:判断能否被5整除,就需要用5除后使用 % 进行取余。使用 if 分支来打印能否被5整除。

 2.6 线段图案

        题目:多组输入一个整数,打印相应数量的“ * ”组成的线段图案。。

        分析:使用 scanf 函数输入整数。使用 while 循环对输入数字和打印 * 进行循环。 使用 a 来输入想要输入 * 的数量,再使用 b 来进行for循环打印相应数量的 * 。 

         使用两个while循环也能达到相应的效果

        使用 do while 进行打印也可以,但是由于 do while 先进行动作再进行判断,所以要使用 if

 分支对当输入的数字为 0 时进行判断,否则输入0时,也会打印一个 * 。

2.7 打印1-100之间3的倍数

        题目:写一个代码打印1-100之间所有3的倍数的数字

        分析:可以通过使用循环来过一遍1-100的数字,在循环中使用 if 来进行判断。

        这里给出两种写法供读者参考。

        1.while循环 if分支

        2.for 循环 if 分支

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值