一、堂上练习
1.由键盘输入一个句子(字符个数不定,最多不超过80个,以’\n’结束),将其中的大写字符变成小写(其它类型的字符不变),
最后输出变换后的句子。
输入样例 ThiS IS My fIrSt C ProgrAm!
输出样例 this is my first c program!
代码如下(示例):
#include<stdio.h>
int main ()
{
char c;
while((c=getchar()) != '\n')
{
if( c>='A' && c<='Z')
c = c + 'a' - 'A';
putchar(c);
}
return 0;
}
或者
#include<stdio.h>
#include<string.h>
int main()
{
char arr[81];
gets(arr);
strlwr(arr);//相对应的就有strupr
printf("%s\n",arr);//或者puts(arr);
return 0;
}
2.计算数列的和:2/1+3/2+5/3+8/5+13/8+21/13…
编程实现,由键盘输入n,计算输出数列前n项和。(结果保留四位小数,提示:要使用double,否则精度不够)
输入样例:20
输出样例:32.6603
代码如下(示例):
#include<stdio.h>
int main()
{
int i,n;
double a=2,b=1,s=0;
scanf("%d",&n);
for(i=1; i<=n; i++)
{
s=s+a/b;
a=a+b;
b=a-b;
}
printf("%.4lf\n",s);
return 0;
}
3.由键盘输入两个正整数m、n(m、n<1000000),计算它们的最大公约数。
输入样例 16,24
输出样例 8
代码如下(示例):
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d,%d",&a,&b);
while(a%b!=0)
{
c = a%b;
a = b;
b = c;
}
printf("%d\n",c);
return 0;
}
这里求最大公约数用的是辗转相除法(但是这并不是最好的解法)。辗转相除法就是,先选定其中一个数作为被除数,另一个作为除数,然后不断把上一次的除数作为下一次的被除数,余数作为下一次的除数,直到余数为0,下面红色框的就是最大公约数,同时我们可以发现无需一定要把较大的数放在被除数的位置。
4.写一个函数实现:输入一行字符,以空格分割单词,回车结束输入,输出单词的个数
输入样例 There are many students and many trees!
输出样例 7
代码如下(示例):
#include<stdio.h>
int main ()
{
int num=0,flag=1,i;
char c;
for(i=0;(c=getchar())!='\n';i++)
{//遍历,同时判断输入结束了。
if(flag == 1)
{
if(c != ' ')
{//单词的起始,如果有连续空格或者句子开头就又空格,不计算单词数。
num++;
flag = 0;
}
}
else if(c == ' ')//判断单词的结束位置。
flag = 1;//遇到单词结尾,flag为1
}
printf("%d\n",num);
return 0;
}
5.一个百万富翁遇到一个陌生人,陌生人找他谈了一个换钱的计划。该计划如下:我每天给你m元,而你第一天只需给我一分钱。第二天我仍给你m元,你给我2分钱。第三天,我仍给你m元,你给我4分钱。依次类推,你每天给我的钱是前一天的两倍,直到一个月(30天)。百万富翁很高兴,欣然接受这个契约。现要求,编写一个程序,由键盘输入m,计算多少天后,百万富翁开始亏钱。
输入样例
100
输出样例
18
代码如下(示例):
#include<stdio.h>
int main()
{
int n,m,count = 0;//count表示天数
double ret = 0.01;//表示1分钱
scanf("%d",&m);
while((m+m*count)>ret)
{
ret *= 2;
count++;
}
printf("%d\n",count);
return 0;
}
二、单元测试
1.由键盘输入一个int类型的正整数n,求n有多少个不同的正整数因子。注:能整除N的数称为N的因子
输入格式 正整数
输入样例 24
输出样例 8
代码如下(示例):
#include<stdio.h>
int main()
{
int n = 0,count = 0,i = 1;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
if(n%i==0)
{
count++;
}
}
printf("%d\n",count);
return 0;
}
总结
想多介绍点方法,但是好懒~