C语言中循环结构的练习

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

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

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

b效率高,嵌套循环时,外层循环会被放在cache里面,当内层循环执行完成后会去cache取,cache操作次数越少,效率越高。

  1. 请简述以下两个 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();

}

(1)程序代码量少,相对于(2)代码效率不高,(1)每次循环都会执行if语句,(2)只执行一次判断一次。

  1. do-while语句的循环体( ) (鲁科安全)   BC

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

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

解析:至少执行一次,但具体次数由循环条件决定。

  1. 求1~100的和,写作for(int s=0,i=1;___i<=100_____;++i) ___s = s+i_____;(富士安全)
  2. 程序如下,运行结果为:(中科四平)

#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

        x2=x2+x1; //5 13 34

    }

}

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

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

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

解析:while()里面的条件是一个赋值语句,条件会一直满足。

  1. 语句while(!E)中表达式!E等价于( ) (杭州快越科技) D
  1. E == 1                  B. E != 0           C. E != 1           D. E==0
  2. 解析:!E当E是非零,条件为假,当E为零,条件为真。选项中只有D满足条件。
  1. goto语句有什么作用?(深圳元征信息科技)
  2. 程序执行goto指向的语句位置。
  3. 语句for( ;1 ;) 有问题吗?它是什么作用?(深圳元征信息科技)
  4. 没有问题,for循环中的条件可以省略,但分号不能省略。作用:实现死循环
  5. 下面代码是否有错,如果有,错在哪里?(深圳元征信息科技)

int main()

{

   float a=3;

    switch(a)

    {

      case 3:

         printf("a");

    }

    return 0;

}

解析: 有误   a为float型   switch中的表达式的结果只能是整型或单字符型。

  1. break 语句的正确的用法是 ( ) (福建新大陆)   B

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

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

C. 跳出多重循环

D. 只能修改控制变量

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

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.

解析:case语句中都没有break语句,程序会从case 'B'开始直到程序结束。

  1. 下列各个错误中,哪一个不属于编译错误 ( ) (苏州特点电子科   A

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

B. 花括号不配对

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

D. 变量有引用、无定义

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

*

***

*****

*******

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”);

}

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

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

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

输入一排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>
#include <limits.h>
int main(int argc, const char *argv[])
{ 
	int n;	  	//存放输入的数字数
	float c; 	//获取用户输入的数字
	int z = 0,l = 0,f = 0; 	//用于存放正数、负数、零的数量
	scanf("%d",&n);
	while(n!=0){
		scanf("%f",&c);
		if(c>0)z++;
		else if(c<0)f++;
		else l++;
		n--;
	}
	printf("正数:%d  负数:%d  零:%d",z,f,l);
	return 0;
}
  1. 请实现一下功能:(威海精讯畅通)

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

输入:

XXX XXX

输出:

XXX 到XXX偶数之和为:XXX

示例:

输入 1 10

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
int main(int argc, const char *argv[])
{ 
	int a,b,num = 0;
	scanf("%d,%d",&a,&b);
	for(;a<=b;a++){
		if(a%2 == 0){
			num = num+a;
		}
	}
	printf("偶数和:%d\n",num);
	return 0;
}
  1. 编程求 2000 以内的所有“完数”。所“完”是指一个数恰好等于它的因子值之和,例如:6是完数,因为 6=1+2+3。 (戈尔特西斯)
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <limits.h>
    
    int main(int argc, const char *argv[])
    { 
    /*
    	for(int i = 0;i <= 2000;i++){	
    		int num = 0;
    		for(int j = 0;j<=sqrt(i);j++){
    			if(i%j == 0){
    				num =num+j+i/j;	
    			}
    		}
    		if(num == i){
    			printf("%d\n",i);
    		}
    	}*/
    
    	for(int i = 1;i <= 2000;i++){	
    		int num = 0;
    		for(int j = 1;j<i;j++){
    			if(i%j == 0){
    				num += j;
    			}
    		}
    		if(num == i){
    			printf("%d\n",i);
    		}
    	}
    	return 0;
    }
    

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

例如: 输入 1234;输出为 4321

输入-1234;输出为-4321

输入为 1023456789,输出为 0

if语句中n>INT_MAX/10是因为防止逆序后的数字越界。

1. 请写1个支付宝接龙红包程序. 随机产生1-100的随机数,作为红包金额. 让用户不断的去猜,直到猜正确为止.最后发给用户的红包金额是 红包金额/猜得次数. 2. 循环录入5个人的年龄并计算平均年龄,如果录入的数据出现负数或大于100的数,立即停止输入并报错. 3. 实现要求用户一直输入QQ号码和密码,只要不是123456、888888就一直提示要求重新输入,如果正确则提登录成功. 4. 1-100之间不能够被7整除的数的和. 5. 求1-200之间的所有的整数的累加和 6. 求1-100之间6的倍数的个数 7. 输入班级人数,然后依次输入学员成绩,计算班级学员的平均成绩和总成绩 8. 2006年培养学员80000人,每年增长25%,请问按此增长速度,到哪一年培训学员人数将达到20万人?*** 9. 从键盘输入10个数,求出最大数 10. 1000~ 5000之间有多少整数,其各位数字之和为5,分别是哪些数(例如整数2003的各位数字之和为 2+0+0+3 ,等于5)), 并统计满足条件的整数有多少个。 11. 求1-100 是7的倍数 的数值之和 12. 求1-1000之间的所有的奇数之和 13.猜数字游戏. 随机产生1个1-100之间的数 让用户猜 当用户输入的数比产生的随机数大 就输出 猜大了 并让用户继续输入新的数.。 当用户输入的比产生的随机数小的时候 就输出 猜小了 并且继续猜 当用户刚好输入的就是这个随机数的时候 提示成功 并显示用户猜了多少次. 14. 老师问学生,这道题你会做了吗? 如果学生答"会了(y)",则可以放学. 如果学生不会做(n),则老师再讲一遍,再问学生是否会做了......直到学生会为止,才可以放学. 直到学生会或老师给他讲了10遍还不会,都要放学 15. 写1个程序. 随机的产生1个2位数的加法运算.让用户输入这个运算的结果 然后判断这个结果是否正确. 来10次. 每个人默认有10分. 产生10个加法运算.操作数的范围在0-100之间. 每产生1个加法运算 就让用户输入结果.判断是否正确. 当回答正确的时候就为用户加1分. 错误的时候就扣1分. 当10道题目回答完毕之后 就显示用户得的分数. ***
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值