PTA-循环结构1

作者 zhangweina

单位 赤峰学院

在for(表达式1;表达式2;表达式3)中,如果表达式2为空,表示循环条件默认为真。(T)

作者 基础教研室

单位 湖南工程学院计算机与通信学院

for语句循环体可能一次也不执行。(T)

作者 王从银

单位 吉首大学

continue 只能用于循环体中。(T)

作者 王从银

单位 吉首大学

continue 不是结束本次循环,而是终止整个循环的执行。(F)

作者 王从银

单位 吉首大学

在多层循环中, 一个break语句只向外跳一层。(T)

作者 徐镜春

单位 浙江大学

运行包含以下代码段的程序将可能进入死循环。(F)

int i = 1; while(i>0){ i++; printf("%d ",i); }

作者 王从银

单位 吉首大学

do-while循环的while后的分号可以省略。(F)

作者 王从银

单位 吉首大学

do-while循环至少要执行一次循环语句。(T)

作者 颜晖

单位 浙大城市学院

以下两个程序段等价,其功能是计算 s=1+2+...+10。(T)

/* 程序段A*/
s = 0;
i = 1;
while(i <= 10){
    s = s + i;
    i++;
}
/* 程序段B */
s = 0;
i = 1;
while(1){
    if(i > 10){
        break;
    }
    s = s + i;
    i++;
}

作者 王从银

单位 吉首大学

C语言的三种循环不可以互相嵌套。(F)

作者 王秀

单位 福州大学

下面的这个循环的循环次数是(B)。
for(int i=0,j=10; i=j=10; i++,j--)

A.语法错误,不能执行

B.无限次

C.10

D.1

作者 颜晖

单位 浙江大学

下列程序段的输出结果是(A)。

int main(void) 
{
      for(int i = 1; i < 6; i ++) {
            if( i % 2 != 0) { 
                  printf("#");
                  continue;  
            }
      printf("*");     
      }
      printf("\n");    
     
      return 0;
}

A.#*#*#

B.#####

C.*****

D.*#*#*

作者 C课程组

单位 湖南工程学院计算机与通信学院

下列程序段中,非死循环的是(A)。

A.

int i=100;
 while(1)
 { i=i%100+1;
   if(i>=100)
       break;    
}

B.

int k=0;
 do{
     ++k;
 }while(k>=0);

C.int s=10; while(s) s++;

D.

for(   ;   ;    )

作者 黄龙军

单位 绍兴文理学院

下面有关for循环的正确描述是(D)。

A.for循环只能用于循环次数确定的情况

B.for循环先执行循环体语句,后判断循环条件

C.在for循环中,不能用break语句跳出循环体

D.for循环的循环体可以包含多条语句,但多条语句必须构成复合语句

作者 王才善

单位 兰州交通大学

下面程序计算100之内能被3整除的整数之和。阅读程序,从4个选项中选出合适的选项填到【1】处,使程序功能完整。(C)

#include <stdio.h> int main() { int i, sum = 0; for (i = 1; i < 100; i++) { if (i % 3) 【1】; sum += i; } printf("%d\n", sum); return 0; }

A.break

B.return

C.continue

D.return 0

作者 颜晖

单位 浙大城市学院

C语言中while和do-while循环的主要区别是(A)。

A.do-while的循环体至少无条件执行一次

B.while的循环控制条件比do-while的循环控制条件严格

C.do-while允许从外部转到循环体内

D.do-while的循环体不能是复合语句

作者 C课程组

单位 湖南工程学院计算机与通信学院

下列程序段执行后s值为_C_。

int i=5, s=0;
while(--i!=0){
        if (i%2==1)
            continue;
        s+=i;  
    }

A.15

B.9

C.6

D.4

作者 C课程组

单位 湖南工程学院计算机与通信学院

要求通过 while 循环不断输出字符,当读入字母 N 时结束循环。若变量已正确定义,下列程序段正确的是(C)。

A.

while ((ch = getchar()) == 'N')  
     printf("%c", ch);

B.

while (ch = getchar() == 'N')
   printf("%c", ch);

C.while ( (ch = getchar( )) != 'N')

printf("%c", ch);

D.while (ch = getchar() != 'N')

  printf("%c", ch);

作者 CMY

单位 集美大学

以下有关C语言while循环和do-while循环的描述中正确的是(C)

A.while和do-while结束循环只能靠break语句

B.do-while的循环控制条件比while的循环控制条件严格

C.do-while的循环体可以无条件执行一次

D.在任何情况下,while循环的程序都不能用do-while循环来实现

作者 gllypx

单位 桂林学院

若i,j已定义为int类型,则以下程序段中内循环体的总的执行次数是?(B)

for (i=5;i;i--)
   for (j=0;j<4;j++) 
      {......} //内循环体

A.25

B.20

C.24

D.30
 

7-1 打印沙漏

作者 陈越

单位 浙江大学

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

*****
 ***
  *
 ***
*****

所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:

输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

输出格式:

首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

输入样例:

19 *

输出样例:

*****
 ***
  *
 ***
*****
2

解答:

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int n;
    char ch;
    cin>>n>>ch;
    int h = (int)sqrt((n+1)/2);
    for(int i = h,z = 0;i>=1;i--,z++)
    {
        for(int j = 1;j<=z;j++)
            cout<<" ";
        for(int k = 1;k<=2*i-1;k++)
            cout<<ch;
        cout<<endl;
    }
    for(int i = 2,z=h-1;i<=h;i++,z--)
    {
        for(int j = 1;j<=z-1;j++)
            cout<<" ";
        for(int k = 1;k<=2*i-1;k++)
            cout<<ch;
        cout<<endl;
    }
    cout<<n-(2*h*h-1)<<endl;
    return 0;
}

7-2 念数字

作者 翁恺

单位 浙江大学

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:

0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu

输入格式:

输入在一行中给出一个整数,如:1234

提示:整数包括负数、零和正数。

输出格式:

在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如
yi er san si

输入样例:

-600

输出样例:

fu liu ling ling

 解答:

#include<stdio.h>
int main()
{
    int a[100000] = {0}, len = 0;
    int n,i;
    scanf("%d", &n);
    if (n < 0) {
        printf("fu ");
        n = -n;
    }
    while (n > 0){   
        a[len] = n % 10;
        n = n / 10;
        len++;
    }
    if (len != 0) {
        for (i = len - 1; i >= 0; i--) {
            switch (a[i]) {
            case 0: printf("ling"); break;
            case 1: printf("yi"); break;
            case 2: printf("er"); break;
            case 3: printf("san"); break;
            case 4: printf("si"); break;
            case 5: printf("wu"); break;
            case 6: printf("liu"); break;
            case 7: printf("qi"); break;
            case 8: printf("ba"); break;
            case 9: printf("jiu"); break;
            }
            if (i != 0)
                printf(" ");
        }
        printf("\n");
    }
    else
        printf("ling\n");
    return 0;
}
 

7-3 求整数段和

作者 杨起帆

单位 浙大城市学院

给定两个整数A和B,输出从A到B的所有整数以及这些数的和。

输入格式:

输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。

输出格式:

首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X

输入样例:

-3 8

输出样例:

   -3   -2   -1    0    1
    2    3    4    5    6
    7    8
Sum = 30

解答:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int a,b;
    cin>>a>>b;
    int count=0;
    int sum=0;
    if(a>b)
    {
        int temp=a;
        a=b;
        b=temp;
    }
    for(int i=a;i<=b;i++)
    {
        count++;
        cout<<setw(5)<<setfill(' ')<<i;
        if(count%5==0)
        {
            cout<<endl;
        }
        sum=sum+i;
        if(i==b)
        {
            cout<<endl;
        }
    }
    cout<<"Sum = "<<sum<<endl;
    return 0;

7-4 就不告诉你

作者 CHEN, Yue

单位 浙江大学

做作业的时候,邻座的小盆友问你:“五乘以七等于多少?”你应该不失礼貌地围笑着告诉他:“五十三。”本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积。

输入格式:

输入在第一行给出两个不超过 1000 的正整数 A 和 B,其间以空格分隔。

输出格式:

在一行中倒着输出 A 和 B 的乘积。

输入样例:

5 7

输出样例:

53

解答:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b;
    cin>>a>>b;
    int c=a*b;
    int flag=0;
    if(c==0)
    {
        cout<<0;
    }
        while(c>0)
        {
            int x=c%10;
            if(x==0)
            {
                if(flag==1) cout<<x;
            }
            else
            {
                if(flag==0) flag=1;
                cout<<x;
            }
            c=c/10;
        }
    return 0;
}

7-5 Cassels方程

作者 陈越

单位 浙江大学

Cassels方程是一个在数论界产生了巨大影响的不定方程:x2+y2+z2=3xyz。该方程有无穷多自然数解。

本题并不是要你求解这个方程,只是判断给定的一组 (x,y,z) 是不是这个方程的解。

输入格式:

输入在第一行给出一个不超过 10 的正整数 N,随后 N 行,每行给出 3 个正整数 0<x≤y≤z≤1000。

输出格式:

对于每一组输入,如果是一组解,就在一行中输出 Yes,否则输出 No

输入样例:

2
1 1 1
5 6 7

输出样例:

Yes
No

 解答:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int x,y,z;
        cin>>x>>y>>z;
        if(x*x+y*y+z*z==3*x*y*z)
        {
            cout<<"Yes"<<endl;
        }
        else
        {
            cout<<"No"<<endl;
        }
    }
    return 0;
}

7-6 找出三位水仙花数

作者 颜晖

单位 浙大城市学院

本题要求编写程序,输出给定正整数M和N区间内的所有三位水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。

输入格式:

输入在一行中给出两个正整数M和N(100≤M≤N≤999)。

输出格式:

顺序输出M和N区间内所有三位水仙花数,每一行输出一个数。若该区间内没有三位水仙花数,则无输出。

如果M或者N不符合题目的要求,则输出Invalid Value.

输入样例1:

100 400

输出样例1:

153
370
371

输入样例2:

500 600

输出样例2:

输入样例3:

990 101

输出样例3:

Invalid Value.

解答:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int m,n;
    cin>>m>>n;
    int a,b,c;
    if(m>=100&&n<=999&&m<=n)
    {
        for(int i=m;i<=n;i++)
        {
            a=i%10;
            b=i/10%10;
            c=i/100;
            if(a*a*a+b*b*b+c*c*c==i)
            {
                cout<<i<<endl;
            }
        }
    }
    else
    {
        cout<<"Invalid Value."<<endl;
    }
    return 0;
}

7-7 统计字符[2]

作者 颜晖

单位 浙大城市学院

本题要求编写程序,输入N个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。

输入格式:

输入在第一行中给出正整数N,第二行输入N个字符,最后一个回车表示输入结束,不算在内。

输出格式:

在一行内按照

letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数

的格式输出。请注意,等号的左右各有一个空格,逗号后有一个空格。

输入样例:

10
aZ &
09 Az

输出样例:

letter = 4, blank = 3, digit = 2, other = 1

 解答:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,b=0,c=0,d=0,e=0;
    cin>>n;
    char a;
    for(int i=0;i<=n;i++)
    {
        a=getchar();
        if((a<='z'&&a>='a')||(a<='Z'&&a>='A'))
        {
            b++;
        }
        else if(a==' '||a=='\n')
        {
            c++;
        }
        else if(a>='0'&&a<='9')
        {
            d++;
        }
        else
        {
            e++;
        }
    }
    cout<<"letter = "<<b<<", blank = "<<c-1<<", digit = "<<d<<", other = "<<e<<endl;
    return 0;
}

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以使用循环语句来实现这个功能。具体步骤如下: 1. 从键盘中读入一个字符; 2. 判断该字符是否为字母a,如果是,则跳出循环,否则继续执行; 3. 将读入的字符输出到屏幕上; 4. 回到第一步,继续读入下一个字符。 代码示例: ``` #include <stdio.h> int main() { char ch; while (1) { scanf("%c", &ch); if (ch == 'a') { break; } printf("%c", ch); } return ; } ``` 运行程序后,可以不断输入字符,直到输入字母a时才停止,并将输入的字符原样输出到屏幕上。 ### 回答2: 这是一道很基础的编程题目,要求读入字符并原样输出,直到读入字母“a”才停止输出。 解题思路大致如下: 1. 使用循环结构,每次读入一个字符并判断是否为字母“a”,如果是,则跳出循环,结束输入输出过程;如果不是,则继续输出该字符。 2. 在读入字符之前,需要先将缓冲区清空,以免出现之前的字符影响读入。 3. 读入字符可以使用C语言中的scanf()函数,输出字符可以使用printf()函数。 实现代码如下: #include<stdio.h> int main(){ char ch; //定义字符变量 while(1){ //使用循环结构 fflush(stdin); //清空缓冲区 scanf("%c",&ch); //读入字符 if(ch=='a') //判断是否为字母“a” break; //跳出循环 printf("%c",ch); //输出字符 } return 0; } 以上代码可以在IDE或在线编译器中运行测试,验证结果是否符合题目要求。 ### 回答3: 这是一个典型的输入输出问题,在程序中需要使用循环语句和条件语句来实现读入一系列字符并输出到屏幕上,直到输入字母a时停止。 首先定义一个字符数组来存储键盘输入的字符,然后使用while循环语句来进行输入输出操作。在循环中,每次读取一个字符并判断是否等于字母a,如果等于则退出循环;否则将该字符输出到屏幕上并继续进行下一轮读取和判断,直到读取到字母a为止。 下面是具体实现代码: ```c++ #include <iostream> using namespace std; int main() { char ch[1000]; //定义字符数组存储输入的字符 int i = 0; while (1) //循环读取输入字符 { cin >> ch[i]; //读入一个字符 if (ch[i] == 'a') //判断是否为字母a { break; //如果是则退出循环 } cout << ch[i]; //输出该字符 i++; //移动指针到下一个位置 } return 0; //程序结束 } ``` 以上代码定义了一个大小为1000的字符数组ch,使用while循环读取键盘输入的字符并进行判断和输出操作,当输入字符为字母a时退出循环并结束程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值