9.4 C语言基础作业4

	1.考虑到多重循环对程序效率的影响,以下哪种实现效率较高?为什么?(泰华智慧)
(a)循环次数大的放在外层,循环次数小的放在内层;
(b)循环次数小的放在外层,循环次数大的放在内层;

应选择(b)循环次数小的放在外层,循环次数大的放在内层;
次数多的循环放在内层,会减少cache更新数据的次数,当离开内层循环的时候会恢复外层的计数器,外层循环次数越少,恢复计数器的次数越少,效率较高
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();
}
代码(1)是先循环再判断,代码(2)是先判断再循环,使用代码(2)有可能会循环次数更低,效率更高。
3.	do-while语句的循环体( ) (鲁科安全)
A. 可能一次都不执行 		B. 至少执行一次 
C. 由循环条件决定次数 	D. BC均正确

B. 至少执行一次
4.1~100的和,写作for(int s=0,i=1;	i<=100	;++i)  s = 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
        x2=x2+x1; //5 13 34
    }
}
运行结果为:
    1    2    3    5
    8    13	  21   34
6.	有以下程序段,int k=0; while(k=1) k++;while循环执行的次数是( ) (杭州快越科技,山东大齐通讯,山东信通电子)
A. 一次也不执行 			B. 执行1次 
B. 有语法错,不能执行 	D. 无限次

D. 无限次
7.	语句while(!E)中表达式!E等价于( ) (杭州快越科技)
A. E == 1 		B. E != 0 		C. E != 1 		D. E==0 

D. E==0
8.	goto语句有什么作用?(深圳元征信息科技)
	goto语句是跳转语句。
9.	语句for(1) 有问题吗?它是什么作用?(深圳元征信息科技)
	没有问题,作用:死循环		
10.	下面代码是否有错,如果有,错在哪里?(深圳元征信息科技)
int main()
{
   float a=3;
    switch(a)
    {
      case 3:
         printf("a");
    }
    return 0;
}
switch里只能是结果为整型或者单字符型的合法表达式
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. >=60<60error.
13.	下列各个错误中,哪一个不属于编译错误 ( ) (苏州特点电子科技)
A. 改变x 原值 35 ,写作“ x==5 ;” 
B. 花括号不配对
C. 复合语句中的最后一条语句后未加分号
D. 变量有引用、无定义

A. 改变x 原值 35 ,写作“ x==5 ;
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. 2 * i - 1 
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 x=0 , y=0 , z=0;
	int n;
	printf("输入:");
	scanf("%d", &n);
	while(n!=0){
		float a;
		scanf("%f", &a);
		if(a>0){
			x++;
		}else if(a<0){
			z++;
		}else{
			y++;
		}
		n--;
	}
	printf("正数个数:%d\n", x);
	printf("零个数:%d\n", y);
	printf("负数个数:%d\n", z);
	return 0;
}
16.	请实现一下功能:(威海精讯畅通)
输入任意两个数,输出两数之间(包括这两个数)偶数之和。
输入:
XXX XXX
输出:
XXX 到XXX偶数之和为:XXX
示例:
输入 1 10
程序输出 110偶数之和为:30
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int x , y ,sum=0;
	int n , m;
	printf("输入两个数:");
	scanf("%d %d", &x , &y);
	n=x;
	m=y;
	for(int i=x; i<=y; i++){
		if(i%2==0){
			sum = sum + i;
		}
	}
	printf("%d到%d偶数之和为:%d", n , m , 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 ;
	for(i=1; i<=2000; i++){
		int sum = 0;
		for(j=1; j<i; j++){
			if(i%j == 0){
				sum = sum + j;
				}
			}
		if(sum == i){
			printf("完数有:%d ", i);
			}
		}
	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 , ys , sum=0;
	printf("输入:");
	scanf("%d", &n);
	if(n<INT_MIN || n>INT_MAX/10){
		printf("0\n");
		return 0;
	}
	while(n!=0){
		ys = n%10;
		sum = sum*10 + ys;
		n = n/10;
	}
	printf("倒序后的数为:%d", sum);
	return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值