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