这次说的主要是循环结构,加上清明补课刚好两节课都在学循环结构,不过都是围绕while的,还没学到for循环,while 和 do while用法。
首先while后加的条件,一旦不满足就停止循环,但是do while 是先执行再判断,所以在一些问题下用do while 会好一点,但是也可以利用while 并在最后加一行来单独输出(这样的话能输出正确答案,但在结构上会略输do while。
平均数问题注意下用float或者double来定义,可能会出现小数。
第一个题:
7-3 统计数字字符和空格 (15 分)
本题要求编写程序,输入一行字符,统计其中数字字符、空格和其他字符的个数。建议使用switch语句编写。
输入格式:
输入在一行中给出若干字符,最后一个回车表示输入结束,不算在内。
输出格式:
在一行内按照
blank = 空格个数, digit = 数字字符个数, other = 其他字符个数
的格式输出。请注意,等号的左右各有一个空格,逗号后有一个空格。
输入样例:
在这里给出一组输入。例如:
Reold 12 or 45T
输出样例:
在这里给出相应的输出。例如:
blank = 3, digit = 4, other = 8
#include <stdio.h>
int main()
{
char a;
int blank,digit,other;
blank=0;
digit=0;
other=0;
while ((a=getchar())!='\n') /*getchar*/
{
if (a==' '){ /*==*/
blank++;
}
else if (a>='0'&&a<='9'){ /*格式样例*/
digit++;
}
else{
other++;
}
}
printf("blank = %d, digit = %d, other = %d",blank,digit,other);
return 0;
}
这里有刚学的getchar,使用getchar在一些题目上优于scanf不用定义,且可以输入字符。
第二个题:
7-4 求给定精度的简单交错序列部分和 (15 分)
本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。
输入格式:
输入在一行中给出一个正实数eps。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。
输入样例1:
4E-2
输出样例1:
sum = 0.854457
输入样例2:
0.02
输出样例2:
sum = 0.826310
#include <stdio.h>
#include <math.h>
int main()
{
int i=1,flag=1;
double eps,sum=0.0,term=1.0;
scanf("%lf",&eps);
while (fabs(term)>eps) /*一开始写成sum*/
{
sum=sum+term;
i=i+3;
flag=-flag;
term=flag*1.0/i;
}
sum=sum+term;
printf("sum = %.6lf",sum);
return 0;
}
精度的问题
第三个题:
7-5 寻找250 (10 分)
对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。
输入格式:
输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”。
输出格式:
在一行中输出第一次出现的“250”是对方扔过来的第几个数字(计数从1开始)。题目保证输出的数字在整型范围内。
输入样例:
888 666 123 -233 250 13 250 -222
输出样例:
5
#include <stdio.h>
int main()
{
int zhengshu,num=1;
scanf("%d",&zhengshu);
while (zhengshu!=250)
{
num++;
scanf("%d",&zhengshu);
}
printf("%d",num);
return 0;
}
一开始用\n来判断循环结束,所以错了,因为定义的zhengshu是整形