PTA纠错

若变量已正确定义,执行以下while语句将陷入死循环。

i = 1;
while (i <= 10) ;
    i++;

T   原因是 阴间考法:while后面的分号。只要i!=0一直循环

 2.

以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算每位学生的平均分并输出,但运行后结果不正确,调试中发现有一条语句出现的位置不正确。这条语句是:        (A)

int main(void)
{ 
  int n,k;
  float score, sum, ave;
  sum=0.0;
  for(n=1; n<=10; n++)
  {   
        for(k=1; k<=4; k++)
        {   
            scanf("%f",&score);
            sum+=score;
        }
        ave=sum/4.0;
        printf("NO%d:%f\n",n,ave);
   }
   return 0;
}

A.sum=0.0;

B.sum+=score;

C.ave=sun/4.0;

D.printf("NO%d:%f\n",n,ave);

选择A的原因是 在内层循环将sum赋值后,sum的值需要重新定义为0;因此A式子放在外层循环内

3.

等比数列的第一项a= 1, 公比 q=2, 下面程序段计算前n项和小于100的最大n。程序划线处应填(C)。
int main(void)
{ int a, q, n, sum;
a=1; q=2;
for(n =sum = 0; sum<100; n++)
{ sum += a;
a*= q; }
——————;
printf("n =%d\n", n);
return 0; }

A.空行

B.n- = 2;

C.n--;

D.n++;

选C 

4.

要求以下程序的功能是计算:s=1+1/2+1/3+······+1/10, 但运行后输出结果错误, 导致
错误结果的程序行是(C)。
int main(void)
{ int n; float s;
s = 1.0;
for(n =10;n>1; n--) s=s+1/n;
printf("%6.4f\n ",s);
return 0; }

A.int n; float s;

B.for(n= 10; n>1;n--)

C.s=s+1/n;

D.s=1.0;

选择C 原因是1/n因为两个数字都是整型,所以得出来的数小于1时最终结果都是0,应该将1改为1.0就可以了

5.       7-3 统计字符串中去除某个字符的其他字符的数量并输出去除后的结果字符串。

输入格式:

一个字符串
一个字符

输出格式:

一个字符串
一个数值

输入样例:

abc87dd
c

输出样例:

ab87dd
6

 不会就问,做题思路可以这样:

#include <stdio.h>
#include <stdlib.h>
#include<string.h>

void deleteChar(char c, char str[]) {   
    int strLength = strlen(str);// 计算字符串的长度
    int point = 0;  // 字符串位置标号,用于保存当前有效字符位置
    for(int i =0;i<strLength;i++){
        if(str[i]==c){   //这里的字符c不用加引号
            continue;// 若当前字符为要删除的字符,则直接跳过继续进行循环
        }else{
        str[point]=str[i];// 当前字符为非删除字符,则往前覆盖
        point++; // 有效字符标号位置递增
        }
    }
    str[point]='\0';  // 循环结束,最后一个字符为结束符
     puts(str);
    printf("%d",point);

}
int main(void)
{
    char c,str[1000];   //定义位置数量的数组,在中括号里填写一个大数值
    int point;
    gets(str);       //在C语言中,scanf和gets这两个函数进行输入。gets的输入分割符只有回车,                                    gets是能够读入空格的,但是scanf不能。
    scanf("%c",&c);
    deleteChar(c,str);   //这里的字符c也不用加引号


    return 0;
}

6.7-7 求经过的闰年数

请编写函数,求从公元 y1​ 年开始到公元 y2​ 年之间经过的闰年总数 n。

按照现行历法(格里高利历):四年一闰,百年不闰,四百年再闰。即:年数是 4 的倍数且不是 100 的倍数,或者年数是 400 的倍数,则为闰年,否则为平年。

输入格式

y1​ y2​

注:0<y1​≤y2​

输出格式

n

注:n≥0

输入样例

2021 2025

输出样例

1

#include<stdio.h>
main(){
     int m,n;
    int y=0;
    scanf("%d%d",&m,&n);
   y=n/4-n/100+n/400-m/4+m/100-m/400;
    if((m%100!=0&&m%4==0)||m%400==0){
        y++;
    }
     printf("%d",y);
    return 0;
}

自己写的运行总是超时,所以就问了学姐, 学姐说可以用一个式子y就是n到公元一年的闰年数减去m到公元一年的闰年数,只用判断m是否是闰年就可以了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 这是因为while语句后面的分号导致循环体为空,所以i的值无法更新,始终满足i<=10的条件,导致陷入死循环。应该将分号去掉,改为如下形式: i = 1; while (i <= 10) { i++; } ### 回答2: 这段while语句将会造成死循环,因为条件判断中的变量i是一直小于等于10的,不会出现i大于10的情况,因此条件判断始终为真。而循环内部没有对变量i做任何修改,导致循环一直无法跳出,一直重复执行,直到程序强制终止。 为了避免这种情况发生,应该在循环内部对计数器变量i做出修改,使其增大或者减小,从而在一定条件下跳出循环。比如可以在循环体中使用i++或者i--等操作,控制循环次数达到预期的目的。 除此之外,可以结合条件判断语句使用,当满足一定条件时跳出循环。而条件判断语句中的条件应该是会发生变化,否则也会出现死循环的情况。 总之,避免死循环的方法是在循环体中对计数器变量进行修改,并且结合条件判断语句来控制循环次数。如果程序仍然陷入死循环,可以考虑增加输出语句或者调试工具,帮助定位问题。 ### 回答3: 首先,我们来看一下这段代码的语法结构: i = 1; // 定义变量i的初始值为1 while (i <= 10) ; // 当i小于等于10时执行下面的语句 i ; // 循环体,每次循环i都不变,不会出现i自增等操作 在这段代码中,我们可以发现while语句后面的分号“;”使得while语句成为空语句,即没有任何实际的执行内容。由于while语句的判断条件永远为真(即i<=10总是成立),因此程序会一直执行while语句,导致程序陷入死循环,并且i变量的值不会发生变化,随着每次循环的进行,计算机的硬件资源也会被消耗殆尽,导致程序无法正常执行下去。 这种情况称为“死循环”,是程序设计中常见的一种错误。为了避免死循环的发生,我们需要在while语句中添加合适的循环体,这样才能让程序按预期运行。 例如,我们可以将while语句的循环体修改为i++,这样每次循环i都会自增1,直到i的值大于10时才会跳出循环,代码如下: i = 1; while (i <= 10) { i++; // 每次循环i自增1 } // 此时i的值为11,循环结束 这样就可以避免陷入死循环的问题,让程序按照预期执行。在编写程序时,我们需要仔细检查每一行代码的语法结构和逻辑,避免出现死循环等错误,确保程序的正确性和稳定性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值