c语言小练习(1)

1、 设计一个函数,找出整型数组元素的最小值(C语言编程题)

#import <Foundation/Foundation.h>

//宏定义数组的长度
#define LENGTH 5
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        //定义整形数组
        int arr[LENGTH];
        printf("输入五个整数:");
        //循环输入整形数据,存放在数组中
        for(int i = 0 ;i < LENGTH; i ++)
        {
            //输入函数:%d整形占位符,&取地址
            scanf("%d",&arr[i]);
        }
        //从第一个开始比较
        int min = arr[0];
        //下标从0开始,长度为定义的LENGTH
        for(int i = 0 ;i < LENGTH ; i ++ )
        {
            //如果min大于数组当前下标i的值
            if(min > arr[i])
            {
                //将当前a[i]值,赋给min
                min = arr[i];
            }
        }
        //输出函数
        printf("min = %d", min);
    }
    return 0;
}

2、 计算1~100中所有7的倍数的个数(C语言编程题)

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        //记录7倍数的个数
        int count= 0;
        //循环遍历1到100之间的数
        for(int i = 1;i <= 100; i++  )
        {
            //如果是7的倍数,则满足条件
           if(i % 7 ==0)
           {
               //满足条件,个数加1
               count++;
               //打印当前满足条件的数
               printf("%d是7的倍数\n",i);
           }
        }
        //输出函数:打印7倍数的总个数
        printf("总个数为:%d",count);
    }
    return 0;
}

3  输入一英文句子,将其中所有单词首字符转换成大写后输出。(C语言)

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        //定义一个字符数组
        char s[100];
        //输入提示
        printf("输入一个英文句子:");
        //调用接收字符串函数
        gets(s);
        //定义一个字符指针pt,指向s
        char *pt = s;
        
        //如果第一个字符是小写
        if(islower(*pt))
        {
            //通过改变ASCII值,转变为大写
            *pt-=32;
        }
        //移动指针,指向下一个字符
        pt++;
        //如果没有到达字符串结尾
        while (*pt)
        {
            //如果当前字符是小写,并且上一个字符不是英文字符
            if( islower(*pt) && !isalpha(*(pt -1 )))
            {
                //将当前字符转变为大写
                (*pt)-=32;
            }
            //指针指向下一个字符
            pt++;
        }
        //调用输出字符串函数
        puts(s);
    }

    return 0;
}

4 编写一个int string_len(char *s),返回字符串s的字符长度(不包括\0)  (C语言编程题)

#import <Foundation/Foundation.h>

int string_len(char *s)
{
    //定义字符指针ch
    char *ch;
    //字符长度计数器
    int count = 0;
    //首地址赋给指向当前字符的指针
    ch = s;
    //如果不到字符串结尾'\0'
    while (*ch) {
        //字符计数器加1
        count++;
        //指针加1,指向下一个字符
        ch++;
    }
    //返回字符串的长度
    return count;
}

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        //输入提示
        printf("输入一个字符串:");
        //定义一个字符串数组,大小为100
        char s[100];
        //输入函数,%s占位符,输入类型为字符串
        scanf("%s",s);
        //输出函数,调用string_leng函数,输出返回输入字符串的长度
        printf("字符长度为:%d",string_len(s));
        
    }
    return 0;
}

5 小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)写复杂了。。。

/*
 分析:
 0,判断输入时间是否正确
 1,首先算出输入时间距离之前时间过去了多少天
     1.1 编写函数,计算木一年总天数
         1.11闰年问题:二月按28天计算,如果是闰年,加一天,不是则不加
     1.2函数实现当年第几天
 2,如果差值%2==0 则是结识美女,%3 == 0 结识帅哥
 3,计算木一年的总天数和实现当年第几天可以合并为一个函数
 */

#define FIRSTYEAR 2006
#import <Foundation/Foundation.h>

//判断是否是闰年
bool isLeapYear(int year)
{
    //闰年的判断条件:如果能被400整除,或者不能够被100整除能被4整除
    if(year % 400 == 0 || (year%4 ==0 && year %100 !=0))
    {
        //如果是闰年返回真
        return true;
    }
    //不是则返回假
    return false;
}

//判断当木一年的总天数
int daysInTheYear(int year )
{
    int sum = 0 ;
    //将一年十二个月的天数,放在整形数组中,二月暂时按28天,后面再处理
    int daysInMonth[] ={31,28,31,30,31,30,31,31,30,31,30,31};
    //循环遍历并计算总月数的天数
    for(int month = 0; month < sizeof(daysInMonth) / sizeof(daysInMonth[0]); month ++)
    {
        sum+=daysInMonth[month];
    }
    //如果是闰年
    if(isLeapYear(year))
    {
        //闰年加一天,二月为29天
        sum++;
    }
    printf("%d年总共%d天\n",year,sum);
    //返回木一年的总天数
    return sum;
}

//返回输入时间为当年第几天
int daysInCurYear(int year ,int month ,int day)
{
 
    int curYearDays = 0 ;
    //将一年十二个月的天数,放在整形数组中,二月暂时按28天,后面再处理
    int daysInMonth[] ={31,28,31,30,31,30,31,31,30,31,30,31};
    //循环遍历计算当前月份上一个月之前的总天数
    for(int mo = 0; mo < month -1 ; mo ++)
    {
        curYearDays +=daysInMonth[mo];
    }
    //加上当前月过得天数
    curYearDays+=day;
    //如果是闰年并且,过了二月,则总天数加1
    if( isLeapYear(year) && month > 2)
    {
        curYearDays = curYearDays + 1;
    }
    printf("%d年第%d天\n",year,curYearDays);
    //返回输入时间为当前年第几天
    return curYearDays;
}

//获取总天数
int getDays(int year, int month ,int day)
{
    int sumDays = 0 ;
    //如果不是起始年
    if((year - FIRSTYEAR) > 0)
    {
        //计算过去几年的总天数
        for(int ye = FIRSTYEAR ; ye <year ; ye++)
        {
            sumDays+=daysInTheYear(ye);
        }
    }
    //返回当年第几天
    int curYearDays = daysInCurYear(year, month, day);
    //计算总天数
    sumDays += curYearDays;
    //返回总天数
    return sumDays;
}
//判断时间是否输入正确
BOOL checkDate(int year,int month ,int day)
{
    int daysInMonth[] ={31,28,31,30,31,30,31,31,30,31,30,31};
    //判断是否是闰年,用来判断二月是否输入正确
    if(isLeapYear(year))
    {
        daysInMonth[1] = 29;
    }
    //如果小于起始年,月不在1-12,天数不在当月正确范围内,返回false
    if(! (year >= FIRSTYEAR && month <= 12&&month > 0 &&  daysInMonth[month] > 0 && daysInMonth[month]>= day))
    {
        printf("时间输入错误\n");
        return false;
    }
    return true;
}
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        //提示输入年月日
        int year = 0, month = 0 ,day = 0;
        printf("输入年:");
        //输入函数,%d占位符,整形,&取地址符
        scanf("%d",&year);
        printf("输入月:");
        scanf("%d",&month);
        printf("输入日:");
        scanf("%d",&day);
        
        if(!checkDate(year,month,day))
        {
            return 0;
        }
        //调用函数返回总天数
        int days = getDays(year,month,day);
        printf("当前第%d天",days);
        //如果从起始时间到当天天数差是3的倍数,则认识的是帅哥
        if(days % 2 == 0)
        {
            printf("认识的为帅哥\n");
        }
        //如果从起始时间到当天天数差是3的倍数,则认识的是美女
        if(days % 3 == 0)
        {
            printf("认识的为美女\n");
        }
        //不满足上述条件,输出提示
        if(days %3 != 0 && days % 2 != 0)
        {
            printf("当天没有认识美女或帅哥\n");
        }
    }
    return 0;
}

6,在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。

int _tmain(int argc, _TCHAR* argv[])
{
   //定义三个变量,及两个数组来记录输入字符串及其长度 和最大字符串及其长度
    int i,len = 0,maxlen = 0;
    char *p,*pt,s[1024],subs[100];
   //提示让用户输入字符串
    printf("请输入字符串: ");
    //获取输入的字符串
   gets(s);
    //通过for循环依次比较,遇到是空格或者其他字符的,就从下一个数继续开始比较.
    for(pt = s;*pt != '\0';pt++)
    {
        //判断字符是否是除字母意外的其他字符
        if((*pt != ',') && (*pt != '.') && (*pt != ' ') && (*pt != '"') && (*pt != '\0'))
        {
            len++;
        }
        
        //如果是字母,则开始记录,并将长度及最大字符串数组记录
        else
        {
            if(len > maxlen)
            {
                maxlen = len;
                p = pt - len;
                len = 0;
            }
        }
    }
	 if(len > maxlen)
            {
                maxlen = len;
                p = pt - len;
                len = 0;
            }
    
    //遍历最长单词,打印最长单词,并且输出这个单词的长度
    for(i = 0;i < maxlen;i++)
    {
        subs[i] = *(p + i);
    }
    subs[maxlen] = '\0';
	    printf("最长的英文词是:%s,其长度是:%d个字符。\n\n",subs,maxlen);
	return 0;
}

7  编程实现将任意的十进制整数转换成任意R进制数(R在2-16之间)。

#import <Foundation/Foundation.h>

#include<stdio.h>
#include<string.h>
void TentoAny(int number,char *str,int digits)
{
    int i=0;
    if(digits>16||digits<2)//非2~16进制则直接退出
        return ;
    while(number)
    {
        switch(number%digits)
        {
            //根据余数的情况做相应处理

            case 15:
                str[i++]='F';
                break;
            case 14:
                str[i++]='E';
                break;
            case 13:
                str[i++]='D';
                break;
            case 12:
                str[i++]='C';
                break;
            case 11:
                str[i++]='B';
                break;
            case 10:
                str[i++]='A';
                break;
            default:
                str[i++]=number%digits+'0';
                break;
        }
        number=number/digits;
    }
    str[i]='\0';
    strrev(str);//strrev函数定义在string.h中的,是对字符串做逆序处理的函数
    //这里需要逆序的原因是因为得到的结果为该进制的逆序
}
int main()
{
    //定义一个数组从来存储,两个变量记录输入的十进制数字
    int number,i;
    char str[80];
    printf("输入一个十进制数:");
    scanf("%d",&number);
    printf("\n---------2到16进制对应关系----------\n");
    for(i=2;i<=16;i++)
    {
        TentoAny(number,str,i);
        printf("%d转换为%d进制为:%s\n",number,i,str);
    }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值