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;
x2= x2+ x1;
}
}
运行结果为:
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 < 60 error.
D. >= 60 < 60 error.
13. 下列各个错误中,哪一个不属于编译错误 ( ) ( 苏州特点电子科技)
A. 改变x 原值 3 为 5 ,写作“ x== 5 ; ”
B. 花括号不配对
C. 复合语句中的最后一条语句后未加分号
D. 变量有引用、无定义
A. 改变x 原值 3 为 5 ,写作“ 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
程序输出 1 到10 偶数之和为: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 ;
}