《C语言程序设计》作业3-循环结构1

1075 求最小公倍数

1、题目分析

在这个题目里考察了两个知识点,一个是如何实现多样例,另一个是如何求最小公倍数;在实现多样例的时候,只要对输入采取 while(scanf()!=EOF)就行了,这个以后可一定要会用,因为基本上以后的所有题目都能看到它,其中EOF可以理解为 计算机所能承受的输入次数的最大值(理解的时候可以这么去看)。另外考察的就是对最小公倍数的求解,此时主要就考察一个数学关系式了。a,b的乘积就等于a,b的最小公倍数和最大公约数的乘积。求a和b的最大公约数可以采取高中数学中学过的辗转相除法。这个题目考察的知识点很常用噢,一定得弄会啦。

2、参考代码

#include<stdio.h> 
int common(int a,int b) //递归求解最小公倍数,采用的就是辗转相除法 
{
    if(b==0) return a;
    else     return common(b,a%b);
}  //递归求解,代码比较简单,但是思想都是辗转相除啦,知道吧
int main()
{
    int x,y;
    while(scanf("%d %d",&x,&y)!=EOF) //多样例输入格式 
    {
        if(x==0&&y==0) break;  //题目要求说如果x与y同时为0则结束 
        else
        {
            int result; 
            result=(x*y)/(common(x,y)); //数学定理,a,b最小公倍数=(a*b)/(a,b最大公约数) 
            printf("%d\n",result);//输出结果 
        }
    }
    return 0; 
}

1088 N!

1、题目分析

这个题在求阶乘的过程主要就是要注意可能在循环的过程里会发生数据的溢出,所以在每一步解阶乘的过程里都根据题目要求对值取余10007。

2、参考代码

#include<stdio.h> 
int main()
{
    int n,i,j,k,m;
    while(scanf("%d",&n)!=EOF&&n!=-1)
    {
        m=1;
        for(i=1;i<=n;i++)
        {
            m=(m*i)%10007;
        }
        printf("%d\n",m);
    }
    return 0;
}

1100 三角形面积

1、题目分析

在这个题目里,首先要学会如何实现样例个数的控制,这个主要就是采取一个循环就好了。另外,要注意的是,由于我们不知道输入的三角形的底和高的大小情况,无法预测计算出来的三角形面积有多大,所以,为了防止溢出,我们就用一个能存储大点数据的double类型来定义面积变量存储面积值,不然就会错的。对了,别忘了输出的时候是需要修改格式的噢,只可以输出一个小数,题目要求的。

2、参考代码

#include<stdio.h>
int main()
{
    int n,i;
    float x,y;
    double s;
    scanf("%d",&n); //记录样例个数
    for (i=1;i<=n;i++) //循环输入每一个样例
    {
        scanf("%f %f",&x,&y);
        s=(x*y)/2.0;
        printf("%.1lf\n",s);   //保留一位小数不许忘记输出格式的控制
    }
    return  0;
}

1101 大小写转换

1、题目分析

在这个题目中,主要就是考察了对字符串函数的使用。在c语言里,关于字符串的处理函数都被存在了 string 这个头文件中,所以引用时记得要加上头文件 string.h 常用的字符串处理函数有 strlen()-求字符串的长度;getchar()-读入一个字符;gets()读入一个字符串;另外记得同一个字母大小写之间的转化,通过加减 ASCII码的差值32就可以咯。
大可爱注意哈:就是在输入字符串的时候,每个字符串的末尾都默认加了一个‘\0’的字符表示字符串的结束。在使用字符串中各个字符的时候要注意考虑一下,但是它不属于字符串的噢,比如 字符串 “abc” 其实用数组输入这个字符串以后,c语言在其末尾加了一个‘\0’字符串,但是咧,字符串的长度(strlen测量)为3。

2、参考代码

#include<stdio.h>
#include<string.h>
int main()
{
    int i,j,k,m,n;
    scanf("%d",&k); //输入样例的个数
    getchar();     //去除换行符,这个地方需要多理解一下,尝试着比较一下没它的时候的效果
    while(k--)
    {
        char str[202];
        gets(str); //读入字符串
        m=strlen(str); //获取字符串的长度
        for(i=0;i<m;i++) //遍历数组中各个元素
        {
            if(str[i]>='A'&&str[i]<='Z') //若字母为大写
            {
                str[i]+=32; //转小写加32
            }
            else if(str[i]>='a'&&str[i]<='z') //若字母为小写
            {
                str[i]-=32; //转大写减32
            }
             else continue; //如果为其它的字符,那保持不变好了。
        }
        puts(str); //输出整个字符串
    }
    return 0;
}

1110 奇数的个数

1、题目分析

这个题目比较简单,首先,咱们依次读入每一组中的每一个数字,对读入的数字进行判断,若为奇数,则计数变量m就加一,不是则不加,而后输出奇数的个数。

2、参考代码

#include<stdio.h>
int main()
{
    int i,j,k,m,n;
    while(scanf("%d",&n)!=EOF&&n!=0) //多样例且n不能为0
    {
        int m=0;   //定义m为计数变量
        for(i=0;i<n;i++)  //读入每一组的各个数字
        {
            scanf("%d",&k);
            if(k%2!=0) m++; //若为奇数则计数变量加一
            else       continue;
        }
        printf("%d\n",m); //输出每一组中的奇数个数
    }
    return 0;
}

1111 偶数的和

1、题目分析

这个题目其实和上一个题目是一个意思,读入每组数据的每个数,判断其是否为偶数,若为偶数,则相加,否则,就不加,输出每组数据的结果。

2、参考代码

#include<stdio.h>
int main()
{
    int i,j,k,n;
    while(scanf("%d",&n)!=EOF&&n!=0) //多样例输入且n不能为0
    {
        int m=0;
        for(i=0;i<n;i++)
        {
            scanf("%d",&k);
            if(k%2==0) //若为偶数则加起来
            {
                m+=k; 
            }
            else      //否则就不加
            {
                continue;
            }
        }
        printf("%d\n",m); //输出每组的结果
    }
    return 0;
}

我要才华横溢,你要貌美如花。永远爱你~

这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42987451/article/details/82713119