1.考虑到多重循环对程序效率的影响,以下哪种实现效率较高?为什么?
(a)循环次数大的放在外层,循环次数小的放在内层;
(b)循环次数小的放在外层,循环次数大的放在内层;
答:(b);因为循环次数小的放在外层,当cpu处理完内层循环后从缓冲区拿取外层循环数据的次数会减少,在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();
}
答:(1)优点:代码简单,逻辑清晰;缺点:效率低,每执行一次for循环就要判断(2)优点:高效,只用执行if或else语句;缺点:代码冗长;
3.do-while语句的循环体(D )
A. 可能一次都不执行 B. 至少执行一次
C. 由循环条件决定次数 D. BC均正确
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
x2=x2+x1; //5 13 34
}
}
结果为:1 2 3 5
8 13 21 34
6.有以下程序段,int k=0; while(k=1) k++;则while循环执行的次数是( D)
A. 一次也不执行 B. 执行1次
B. 有语法错,不能执行 D. 无限次
k=1是赋值语句,不管k为多少,while()循环语句的条件控制永远为1(真),所以会一直执行下去,陷入死循环;
7.语句while(!E)中表达式!E等价于( D)
A.E == 1 B. E != 0 C. E != 1 D. E==0
while()语句中应是非零值,E==0时指的是E为假,而!为逻辑非运算符,那么!E就是非零值符合要求;
8.goto语句有什么作用?
goto语句可以实现程序的跳转,会影响程序的走向
9.语句for( ;1 ;) 有问题吗?它是什么作用?
有问题;for循环语句当条件控制表达式永远为1,即为真时,语句会永远执行下去;
10.下面代码是否有错,如果有,错在哪里?
int main()
{
float a=3;
switch(a)
{
case 3:
printf("a");
}
return 0;
}
switch语句的表达式可以是任意合法表达式,但其结果必须是一个整型或单字符型;
11.break 语句的正确的用法是 (B )
A. 无论在任何情况下,都中断程序的执行,退出到系统下一层
B. 在多重循环中,只能退出最靠近的那一层循环语句
C. 跳出多重循环
D. 只能修改控制变量
12.若输入 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.
13.下列各个错误中,哪一个不属于编译错误 ( A)
A. 改变x 原值 3 为 5 ,写作“ x==5 ;”
B. 花括号不配对
C. 复合语句中的最后一条语句后未加分号
D. 变量有引用、无定义
B、C、D都属于编译错误,如果出现编译器会识别并报错;
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”);
}
在下划线处应填入的是:(B )
A. i B. 2 * i - 1 C. 2 * i + 1 D. i + 2
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;
float b;
int z=0,l=0,f=0;
printf("请输入多个数:");
scanf("%d",&n);
while(n!=0){
scanf("%f",&b);
if(b>0)
z++;
else if(b==0)
l++;
else
f++;
n--;
}
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 num1,num2,temp=0;
printf("请输入任意两个数:");
scanf("%d %d",&num1,&num2);
//输入的两个数据必须是前数小于后数
if(num1>=num2){
printf("输入有误,请重新输入\n");
return 0;
}
//使用for循环获取偶数之和
//声明循环变量使其等于第一个输入数据,并且小于等于第二个数据
for(int i =num1;i<=num2;i++){
//如果该数能被2整除便将其赋给temp变量
if(i%2==0){
temp += i;
}
}
printf("%d到%d偶数之和为:%d\n",num1,num2,temp);
return 0;
}
运行结果如图所示:
17.编程求 2000 以内的所有“完数”。所“完”是指一个数恰好等于它的因子值之和,例如:6是完数,因为 6=1+2+3。
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);
//确认输入数值未越界,否则显示0
if(n<INT_MIN || n>INT_MAX/10){
printf("0\n");
return 0;
}
//运用while循环语句生成倒置数值
while(n!=0){
//整数模除10取余部分为数值个位
int ys=n%10;
//后位数字变前位数字需要乘10加上余数
sum=sum*10+ys;
//处理完个位后除10使十位成为尾数
n/=10;
}
printf("%d\n",sum);
return 0;
}
运行结果如图所示:
标签:练习题,语句,--,C语言,int,循环,printf,include,输入 From: https://blog.csdn.net/KBDYD1010/article/details/141901024