- 考虑到多重循环对程序效率的影响,以下哪种实现效率较高?为什么?(泰华智慧)
(a)循环次数大的放在外层,循环次数小的放在内层;
(b)循环次数小的放在外层,循环次数大的放在内层;
b效率高,嵌套循环时,外层循环会被放在cache里面,当内层循环执行完成后会去cache取,cache操作次数越少,效率越高。
- 请简述以下两个 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)只执行一次判断一次。
- do-while语句的循环体( ) (鲁科安全) BC
A. 可能一次都不执行 B. 至少执行一次
C. 由循环条件决定次数 D. BC均正确
解析:至少执行一次,但具体次数由循环条件决定。
- 求1~100的和,写作for(int s=0,i=1;___i<=100_____;++i) ___s = s+i_____;(富士安全)
- 程序如下,运行结果为:(中科四平)
#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
}
}
- 有以下程序段,int k=0; while(k=1) k++;则while循环执行的次数是( ) (杭州快越科技,山东大齐通讯,山东信通电子) D
A. 一次也不执行 B. 执行1次
B. 有语法错,不能执行 D. 无限次
解析:while()里面的条件是一个赋值语句,条件会一直满足。
- 语句while(!E)中表达式!E等价于( ) (杭州快越科技) D
- E == 1 B. E != 0 C. E != 1 D. E==0
- 解析:!E当E是非零,条件为假,当E为零,条件为真。选项中只有D满足条件。
- goto语句有什么作用?(深圳元征信息科技)
- 程序执行goto指向的语句位置。
- 语句for( ;1 ;) 有问题吗?它是什么作用?(深圳元征信息科技)
- 没有问题,for循环中的条件可以省略,但分号不能省略。作用:实现死循环
- 下面代码是否有错,如果有,错在哪里?(深圳元征信息科技)
int main()
{
float a=3;
switch(a)
{
case 3:
printf("a");
}
return 0;
}
解析: 有误 a为float型 switch中的表达式的结果只能是整型或单字符型。
- break 语句的正确的用法是 ( ) (福建新大陆) B
A. 无论在任何情况下,都中断程序的执行,退出到系统下一层
B. 在多重循环中,只能退出最靠近的那一层循环语句
C. 跳出多重循环
D. 只能修改控制变量
- 若输入 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'开始直到程序结束。
- 下列各个错误中,哪一个不属于编译错误 ( ) (苏州特点电子科 A
A. 改变x 原值 3 为 5 ,写作“ x==5 ;”
B. 花括号不配对
C. 复合语句中的最后一条语句后未加分号
D. 变量有引用、无定义
- 下面代码的功能是输出以下形式的金字塔图案是:(华三外协,紫光云数,新华三)
*
***
*****
*******
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
- 请实现如下功能:(威海精讯畅通)
输入一排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;
}
- 请实现一下功能:(威海精讯畅通)
输入任意两个数,输出两数之间(包括这两个数)偶数之和。
输入:
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;
}
- 编程求 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; }
- 完成一个 32 位整数型数按 10 进制倒置的程序;当越界后返回值为 0。 (北京君正集成电路)
例如: 输入 1234;输出为 4321
输入-1234;输出为-4321
输入为 1023456789,输出为 0
if语句中n>INT_MAX/10是因为防止逆序后的数字越界。