各种循环结构

问题:1.考虑到多重循环对程序效率的影响,以下哪种实现效率较高?为什么?(泰华智慧)

(a)循环次数大的放在外层,循环次数小的放在内层;

(b)循环次数小的放在外层,循环次数大的放在内层;

答案:b

分析:可以减少CPU跨切循环层的次数

问题:2.请简述以下两个 for 循环的优缺点。(山大华天,登虹科技)

(1)、

for(i=0; i<N; i++)

{

    if(condition)

        DoSomething();

    else

        DoOtherthing();

}

(2)、

if(condition)

{

    for(i=0; i<N; i++)

        DoSomething();

}

else

{

    for(i=0; i<N; i++)

        DoOtherthing();

}

分析:第一个代码更短,但是运行效率更低,每次循环都会进行if判断;第二个代码更长,重复了两次for循环,但是只需要进行一次if判断,效率更高。

问题:3.do-while语句的循环体( ) (鲁科安全)

A. 可能一次都不执行 B. 至少执行一次

C. 由循环条件决定次数 D. BC均正确

答案:D

问题:4.求1~100的和,写作for(int s=0,i=1;_i<=100_;++i) _s+=i_;(富士安全)

问题:5.程序如下,运行结果为:(中科四平)

#include <stdio.h>

#define N 4

void 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; //3 8 21 55

        x2=x2+x1; //5 13 34 89

    }

}

答案:3 5 8 13

          21 34 55 89

分析:n=4,循环四次,并且i为偶数时换行;第一次输出1+2和2+3,第二次3+5和5+8.。。。

问题:6.有以下程序段,int k=0; while(k=1) k++;则while循环执行的次数是( ) (杭州快越科技,山东大齐通讯,山东信通电子)

A. 一次也不执行 B. 执行1次

B. 有语法错,不能执行 D. 无限次

答案:D

分析:死循环,k=1永远是true

问题:7.语句while(!E)中表达式!E等价于( ) (杭州快越科技)

A.E == 1 B. E != 0 C. E != 1 D. E==0

答案:D

分析:!E只有E==0时为True, 其余为False

问题:8.goto语句有什么作用?(深圳元征信息科技)

答案:直接跳转到loop的位置,会降低代码连贯,不推荐。

问题:9.语句for( ;1 ;) 有问题吗?它是什么作用?(深圳元征信息科技)

答案:没有问题,可以运行,但是死循环。

问题:10.下面代码是否有错,如果有,错在哪里?(深圳元征信息科技)

int main()

{

   float a=3;

    switch(a)

    {

      case 3:

         printf("a");

    }

    return 0;

}

答案:有问题

分析:case不能对应float,必须是整数型

问题:11.break 语句的正确的用法是 ( ) (福建新大陆)

A. 无论在任何情况下,都中断程序的执行,退出到系统下一层

B. 在多重循环中,只能退出最靠近的那一层循环语句

C. 跳出多重循环

D. 只能修改控制变量

答案:B

问题:12.若输入 B,则以下程序运行后的输出结果是 ( ) (智洋创新)

int main(void)

{

    char grade;

    scanf("%c", &grade);

    switch (grade)

    {

        case 'A':

printf(">=85");

        case 'B':

        case 'C':

printf(">=60") :

case 'D':

            printf("<60");

        default:

            printf("error.");

    }

}

A. error. B. >=60 C. >=85 D. >=60<60error.

答案:D

分析:case B内没有break,电梯不会停会一直跑完。

问题:13.下列各个错误中,哪一个不属于编译错误 ( ) (苏州特点电子科技)

A. 改变x 原值 3 为 5 ,写作“ x==5 ;”

B. 花括号不配对

C. 复合语句中的最后一条语句后未加分号

D. 变量有引用、无定义

答案:A

分析:A是运行错误,编译不会报错,x==5作为判定会输出0

问题:14.下面代码的功能是输出以下形式的金字塔图案是:(华三外协,紫光云数,新华三)

*

***

*****

*******

int  i, j;

for(i = 1; i<= 4; i++)

{

        for(j = 1; j<= 4 - i; j++)

        {

            printf(“ “);

        }

        for(j = 1; j <= _______; j++)

        {

            printf(“*”);

        }

        printf(“\n”);

}

在下划线处应填入的是:(  )

A. i B. 2 * i - 1 C. 2 * i + 1 D. i + 2

答案:B

分析:星星数为1, 3, 5, 7,i为1, 2, 3, 4,通过B的算式i等于星星数

问题:15.请实现如下功能:(威海精讯畅通)

输入一排n个数,第一个数为后面所有的数的个数。统计这后面所有数中,正数、零和负数的个数。

输入:

XXX

输出:

正数个数:XXX

零个数:XXX

负数个数:XXX

示例:

输入 7 -2 0 6 5 -3.2 0 2.5

程序输出 正数个数:3

零个数:2

负数个数:2

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int n, z=0, f=0, l=0, i, j;
	printf("输入一排n个数,第一个数为后面所有的数的个数");
	scanf("%d", &n);
	for(i=1; i<=n; i++){
		scanf("%d", &j);
		if(j==0) l+=1;
		else if(j>0) z+=1;
		else f+=1;
	}
		printf("正数个数为%d\n零个数为%d\n负数个数为%d\n", z, l, f);
	return 0;
}

问题:16.请实现一下功能:(威海精讯畅通)

输入任意两个数,输出两数之间(包括这两个数)偶数之和。

输入:

XXX XXX

输出:

XXX 到XXX偶数之和为:XXX

示例:

输入 1 10

程序输出 1到10偶数之和为:30

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int a, b, i, sum=0;
	printf("请由小到大输入两个数\n");
	scanf("%d%d", &a, &b);
	if(a>b){
		printf("输入不合法");
	}else{
	for(i=a; i<=b; ++i){
		if(i%2==0){
			sum+=i;
		}
	}
	printf("%d和%d之间的偶数和为%d\n", a, b, sum);
	}	
	return 0;
}

问题:17.编程求 2000 以内的所有“完数”。所“完”是指一个数恰好等于它的因子值之和,例如:6是完数,因为 6=1+2+3。 (戈尔特西斯)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int i, j, sum=0;
	for(i=1; i<=100; i++){
		for(j=1; j<i; j++){
			if(i%j==0) {
				sum+=j;
			}
		}
		if(sum==i) {
			printf("%d是完数 ", i);
		
		}
		
	sum=0;
	}	
	return 0;
}

问题:18.完成一个 32 位整数型数按 10 进制倒置的程序;当越界后返回值为 0。 (北京君正集成电路)

例如: 输入 1234;输出为 4321

输入-1234;输出为-4321

输入为 1023456789,输出为 0

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
int main(int argc, const char *argv[])
{
	int n, sum=0;
	printf("请输入一个数");
	scanf("%d", &n);
	if(n<INT_MIN || n>INT_MAX/10) {
		printf("越界\n");
		return 0;
	}
	while(n!=0){
		int ys = n%10;
		printf("%d" ,ys);
		sum = sum * 10 + ys;
		n = n / 10;
	}
	printf("逆序后数为%d\n", sum);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值