C语言程序设计, c++

1.输入一个班30个学生的成绩,统计各个分数段059,6069,7079,8089,90~100 的人数;分别统计在60 70 80 90以上的人数。学生成绩由用户根据实际需要输入。
2.有一个长度不大于40的字符串,已知其中包含个字符“A”,求处于这两个字符“A”中间 的字符个数,并把这些字符依此打印出来。(#include<string.h>

//#include<stdlib.h>

main()

{

      int a,j,i,c;

      char x[100];

     while(gets(x))

     {

      j=strlen(x);

      for(i=0;i<j;i++)

      if(x[i]=='A')

         {

           a=i;

           break;

         }

         for(i=0;i<j;i++)

      if(x[i]=='A')

         {

           c=i;)这是第二个的部分,但我不知道为什么不对?


#include <stdio.h>
#include <string.h>
int main(){
    
     int a,j,i,c;
      char x[100];
     while(gets(x))
     {

      j=strlen(x);

      for(i=0;i<j;i++){
      if(x[i]=='A')
         {

           a=i;

           break;

         }//找到第一个A 
     }

    /*for(i=0;i<j;i++)
      if(x[i]=='A')

         {

           c=i;)*/
           //这里错啦,这段循环应该从a开始循环到j找到第二个A
       
    for(i = a + 1; i < j; i++){
          if(x[i]=='A'){

           c=i;

           break;

         }
     }//找到第2个A
 }
     

     
     
     
     int t = c - a;
     printf("%d",t);
     
    
    return 0;
}

按照你的想法是第一次找到A把下标存到a,
而第二次找A的方法错啦,你应该从a开始找第二个A。


 
#include <stdio.h>
int main()
{
    int stu[30];                  
    int i;
    int cnt1 = 0, cnt2 = 0, cnt3 = 0, cnt4 = 0, cnt5 = 0;
 
    printf("请输入30位学生的成绩:\n");
    for (i = 0; i < 30; i++)
    {
        scanf("%d", &stu[i]);     
        if (stu[i] >= 90)
            count1++;
        else if (stu[i] >= 80)
            count2++;
        else if (stu[i] >= 70)
            count3++;
        else if (stu[i] >= 60)
            count4++;
        else
            count5++;
    }
 
    printf("90及90分以上有%d人\n", cnt1);
    printf("80~89分有%d人\n", cnt2);
    printf("70~79分有%d人\n", cnt3);
    printf("60~69分有%d人\n", cnt4);
    printf("60分以下有%d人\n", cnt5);
 
    return 0;
}

这个方法比较简单,还可以用switch case 将分数/10分成区间来做

  1. 第1个
#include<stdio.h>
int main()
{
    int G[30];
    int k0 = 0, k6 = 0, k7 = 0, k8 = 0, k9 = 0;
    int i;
    
    for(i = 0; i < 30; ++i){
        printf("input %dth G:");
        scanf("%d",&G[i]);
        
        if(G[i] < 0 || G[i] > 100){
            printf("输入有误,重新输入");
            --i;
            continue;
        }
        
        if(G[i] < 60) k0++;
        else if(G[i] < 70) k6++;
        else if(G[i] < 80) k7++;
        else if(G[i] < 90) k8++;
        else k9++;
    }
    
    printf("0~59之间有%d人\n",k0);
    printf("60~69之间有%d人\n",k6);
    printf("70~79之间有%d人\n",k7);
    printf("80~89之间有%d人\n",k8);
    printf("90~100之间有%d人\n",k9);
    
    printf("60分及其以上有%d人\n",k6+k7+k8+k9);
    printf("70分及其以上有%d人\n",k7+k8+k9);
    printf("80分及其以上有%d人\n",k8+k9);
    printf("90分及其以上有%d人\n",k9);
    
    return 0;
    
}

  1. 第2个

第二次找A时错了,你应该从a+1开始找第二个A,参考我这里的第16行代码

这里没有用循环,楼主微调一下

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    int a,j,i,c;
    char x[100] = "sdAytufvtf6Alkj";
 
    j=strlen(x);
    for(i=0;i<j;i++){
        if(x[i]=='A') {
            a=i;
            break;
        }
    }
    for(i=a+1;i<j;i++){
        if(x[i]=='A') {
            c=i;
            break;
        }
    }
    printf("两个A之间有%d个字符\n",c-a-1);
    for(i = a + 1; i < c; ++i)
        printf("%c",x[i]);
    
    return 0;
    
}

按照楼主代码的形式
改成循环:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    int a,j,i,c;
    //char x[100] = "sdAytufvtf6Alkj";

    char x[100];
    while(gets(x)){
        j=strlen(x);
        for(i=0;i<j;i++){
            if(x[i]=='A') {
                a=i;
                break;
            }
        }
        for(i=a+1;i<j;i++){
            if(x[i]=='A') {
                c=i;
                break;
            }
        }
        printf("两个A之间有%d个字符\n",c-a-1);
        for(i = a + 1; i < c; ++i)
            printf("%c",x[i]);
    }
    return 0;
    
}

第一个

img

#include<stdio.h>

int main()
{
    int score[30];
    int d1=0,d2=0,d3=0,d4=0,d5=0;
    for(int i=0; i<30; i++)
    {
        scanf("%d",&score[i]);
        if(score[i]>=0&&score[i]<=59)
            d1++;
        else if(score[i]>=60&&score[i]<=69)
            d2++;
        else if(score[i]>=70&&score[i]<=79)
            d3++;
        else if(score[i]>=80&&score[i]<=89)
            d4++;
        else if(score[i]>=90&&score[i]<=100)
            d5++;
    }
    printf("各分段人数:\n");
    printf("0-59:%d\n",d1);
    printf("60-69:%d\n",d2);
    printf("70-79:%d\n",d3);
    printf("80-89:%d\n",d4);
    printf("90-100:%d\n",d5);

    return 0;
}

第二个

img

#include<stdio.h>
#include<string.h>
int main()
{
    char str[41];
    gets(str);
    int len=strlen(str),i,j,p1=0,p2=0;
    for(i=0; i<len; i++)
    {
        if(str[i]=='A')
        {
            p1=i;
            break;
        }
    }
    for(i=p1+1; i<len; i++)
    {
        if(str[i]=='A')
        {
            p2=i;
            break;
        }
    }
    int count=p2-p1-1;
    printf("两个字符“A”中间 的字符个数为:%d\n",count);
    for(i=p1+1; i<p2; i++)
    {
        printf("%c",str[i]);
    }
    return 0;
}

第一题

img

第二题是按照你的那个改的

img

你思路没错但是有点小问题,首先是输入的while循环我不是很理解,gets应该是直接读取整个字符串的,不需要循环,另外你没有加输入输出的头文件stdio.h
其次,你在第一个for循环之后,用a取到了第一个A在数组中下标,但是第二次for循环你依旧是使用i=0开始循环。其次,题目是输入AA之间的内容那么在第二个循环里面直接输出就好了,没必要再去取第二个A的数组下标