黑马程序员--练习题汇总(未完待续)

时间:2022-03-05 21:43:47


1.输入一个小写字母,将其转化为大写

#import <Foundation/Foundation.h>

char change(char c)
{
    if (c>='a' && c<='z') // 保证输入的是小写字母
    {
        return c - 32;
    }
    else
    {
        return c;
    }
}

int main()
{
    NSLog(@"please input");
    
    char m;
    
    scanf("%c",&m);
    
    char k = change(m);
    
    NSLog(@"%c",k);
    
    return 0;
}






2.输入一个句子,然后把每个单词首字母大写之后输出。

int main()
{
    char *sen;
    
    NSLog(@"please input");
    
    gets(sen);
    
    if(sen[0]>='a' && sen[0]<='z')
    {
       sen[0] = sen[0]-32;
    };
    
   for (int i = 0;sen[i] != '\0';i++)
    {
        if(sen[i] == ' ')
        {
            if (sen[i+1]>='a' && sen[i+1]<='z')
            {
                sen[i+1] = sen[i+1]-32;

            };
            
                    }
        
    }
    
    NSLog(@"%s",sen); // NSLog输出看来也是认地址,然后到/0结束
    
    return 0;
}

3.用类与对象的思想设置一个学生

#import <Foundation/Foundation.h>

typedef enum
{
    Sexman,
    Sexwomen,
    Unknown
}Sex; // 定义一个枚举

typedef struct
{
    int year;
    int month;
    int day;
}Date; // 定义一个结构体

typedef enum
{
    FavRed,
    FavWhite,
    FavBlack
}Favcolor; // 定义一个枚举

@interface Student : NSObject
{
    @public
    Sex sex;
    Date birthday;
    double weight;
    Favcolor fav;
}

- (void)eat;
- (void)run;
- (void)printf;
@end

@implementation Student

- (void)eat
{
    weight = weight=1;
    NSLog(@"weight=%f",weight);
}

- (void)run
{
    weight = weight-1;
    NSLog(@"weight=%f",weight);
}

- (void)printf
{
    NSLog(@"xingbieshi%d,shengrishi%d-%d-%d,tizhongshi%f,xihuandeyanseshi%d",sex,birthday.year,birthday.month,birthday.day,weight,fav);
}

@end

int main()
{
    Student *p = [Student new];
    p->sex = Sexman;
    Date d = {2011,10,9}; // 先将生日赋值给d,然后再传递给birthday,因为在定义对象的时候,已经对birthday赋值,这里无法用这种方式再次赋值
    p->birthday = d;
    p->weight = 120;
    p->fav = FavRed;
    
    [p eat];
    [p run];
    [p run];
    [p run];
    [p printf];
    
    return 0;
}

4.用类和对象设置一个计算器,可以计算和,平方,返回3,14

#import <Foundation/Foundation.h>

@interface Jisuanqi : NSObject

- (double)pi;

- (int)pingfang:(int)num;

- (int)sumAndnum1:(int)num1 Withnum2:(int)num2; // 注意书写格式,两个形参之间加一个空格

@end

@implementation Jisuanqi

- (double)pi
{
    return 3.14;
}

- (int)pingfang:(int)num
{
    return num * num;
}

- (int)sumAndnum1:(int)num1 Withnum2:(int)num2
{
    return num1 + num2;
}
@end

int main()
{
    Jisuanqi *p = [Jisuanqi new];
    
    double c1 = [p pi];
    int c2 = [p pingfang:10];
    int c3 = [p sumAndnum1:2 Withnum2:4];
    
    NSLog(@"pi=%f,pingfang=%d,sum=%d",c1,c2,c3);
    
    return 0;
}

5.设计一个方法,用来比较车速,若本车速快,返回1,若本车速慢,返回-1,若车速相同,返回0

#import <Foundation/Foundation.h>

@interface Car : NSObject
{
    @public
    int speed;
}

- (int)Comparespeedwith:(Car *)other;

@end

@implementation Car

- (int)Comparespeedwith:(Car *)other
{
    return speed - other->speed;
}

@end

int main()
{
    Car *p1 = [Car new];
    p1->speed = 100;
    
    Car *p2 = [Car new];
    p2->speed = 150;
    
    int c =[p1 Comparespeedwith:p2];
    NSLog(@"suducha=%d",c);
    
    return 0;
}

6.

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

#import <Foundation/Foundation.h>

#include <stdio.h>
//所用到的三个函数的声明;
int getDays(int y, int m, int d);
void estimate(int days);
int isRun(int y);
int main()
{   //初始化年,月,日,用于接收输入键盘录入。
    int year,month,day;
    do
    {
        printf("请输入2006.1.1之后的任意一天,年月日之间以.隔开\n");
        scanf("%d.%d.%d", &year, &month, &day);
    } while (year<2006 || month<1 || month>12 ||day>31);
    //调用函数getDays获得这天离2006年1月1日相差的天数。
    int days=getDays(year, month, day);
    //调用函数判断遇到的是美女还是帅哥。
    estimate(days);
    return 0;
    
}
int getDays(int y,int m,int d)
{
    //闰年每月的天数
    int leapYearMonths[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
    //正常年每月的天书
    int yearMonths[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    //初始化一个月份差距的天数和,默认值为0。
    int sumOfMonth=0;
    //初始化一个年差距的天数和,默认值为0.
    int sumOfYear=0;
    //从2006年开始遍历,算出年差距的总天数。
    for(int x=2006;x<y;x++)
    {
        if(isRun(x))
            sumOfYear+=366;
        else
            sumOfYear+=365;
    }
    //从1月份算起,算出月差距的总天数。
    for(int i=1;i<m;i++)
    {
        if(isRun(y))
            sumOfMonth+=leapYearMonths[i];
        else
            sumOfMonth+=yearMonths[i];
    }
    //返回一个年月日差距的总天数。
    return sumOfMonth+sumOfYear+d;
}
void estimate(int days)
{
    //利用%的特性来判断是否遇见美女和帅哥。
    if(days%2==0)
        printf("这天小明碰到的是帅哥\n");
    if(days%3==0)
        printf("这天小明碰到的是美女\n");
    if(days%2!=0 && days%3!=0)
        printf("这天小明既没有碰到美女,也没有碰到帅哥");
}
//判断是否是闰年的函数。
int isRun(int y)
{
    //闰年的计算是1,能被4整除,且不能被100整除,
    //     2。能被400整除。两者满足其一即可。
    if((y/4==0 && y/100!=0)||(y/400==0))
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
7.

//学生信息管理系统,包含添加,删除和查看功能(有个功能实现不了,就是不知道怎么样在第一次运行程序时候输入的数据,关闭再打开还能查看)

#import <Foundation/Foundation.h>
#include <stdio.h>
#include <string.h>

void gongNing (); // 增加、删除、查询的功能声明
void zengJia(); // 增加功能声明
void shanchu(); // 删除功能声明
void chaxun(); // 查询功能声明
void xuehao();
void xingming();
void xingbie();
void fenshu();
void suoyou();
void shanchuxingming();
void shanchuxuehao();
void shanchuxingbie();
void shanchufenshu();
void shanchusuoyou();

// 定义一个学生的结构体
struct Student
{
    char name[10]; // 姓名
    int age; // 年龄
    char set[10]; // 姓别
    int number;  // 学号
    double score; // 分数
} ;
// 定义一个学生数组可放100人
struct Student str[100];

int main()
{
    // 提示用户登陆学生管理系统
    //    printf("欢迎登陆学生管理系统\n");
    printf("\n\n\n\n\t\t\t\t\t\t 欢迎使用学生管理系统!\n");
    
    // 调用功能
    gongNing();
    
    
    // 程序归零,正常退出
    return 0;
}
// 所有功能定义
void gongNing ()
{
    // 保证功能函数一直不退出循环,想退出的时候再退出(可退出的死循环)
    // 定义功能的标识
    int n = 0;
    
    // 提示用户输入
    printf("\t\t\t\t\t\t*******************\n");
    printf("\t\t\t\t\t\t   1.增加学生信息\n");
    printf("\t\t\t\t\t\t   2.删除学生信息\n");
    printf("\t\t\t\t\t\t   3.查询学生信息\n");
    printf("\t\t\t\t\t\t   退出系统按任意键\n");
    printf("\t\t\t\t\t\t*******************\n");
    
    // 接收用户的选择
    scanf("%d", &n);
    
    // 定义用户所需进入的选择
    if (n == 1)
    {
        zengJia(); // 增加
    }
    else if (n == 2)
    {
        shanchu(); // 删除
    }
    else if (n == 3)
    {
        chaxun(); // 查询
    }
    else
    {
        exit(0);//退出函数的命令
    }
}

// 增加功能定义
void zengJia()
{
    static int i;
    // 定义学生数组每个人的信息
    while (i<100) {
        printf("请输入该学生的姓名\n");
        scanf("%s",str[i].name);
        printf("请输入该学生的年龄(5岁-30岁之间)\n");
        scanf("%d",&str[i].age);
        // 检察年龄是否适当(5岁-30岁之间)
        while  (str[i].age<5 || str[i].age>30)
        {
            printf("对不起您的学生年龄输入可能有误\n");
            printf("请重新输入该学生年龄\n");
            scanf("%d",&str[i].age);
        }
        
        printf("请输入该学生的性别(man或woman)\n");
        scanf("%s",&str[i].set);
        // 只能输入男或女或man或woman
        while ((strcmp("man",str[i].set)!=0) && (strcmp("woman",str[i].set)!=0))
        {
            printf("您输入的性别有误\n请重新输入\n");
            scanf("%s",&str[i].set);
        }
        
        printf("请输入该学生的学号\n");
        scanf("%d",&str[i].number);
        // 检察学号是否相同,学号具有惟一性,不能同时给多人赋值
        for (int a = 0; a<i; a++)
        {
            while  (str[i].number == str[a].number)
            {
                printf("对不起学号具有惟一性,不能同时给多人同一学号\n");
                printf("请重新输入该学生的学号\n");
                scanf("%d",&str[i].number);
            }
        }
        printf("请输入该学生的分数\n");
        scanf("%lf",&str[i].score);
        // 检察分数是否适当
        while  (str[i].score<0 || str[i].score>100)
        {
            printf("对不起您的考生考分不符合判卷标准\n");
            printf("请重新输入该学生的分数\n");
            scanf("%lf",&str[i].score);
        }
        
        // 确保每次调用函数都输入下一个数组的信息
        i++;
        printf("是否继续添加,请按1,返回菜单请按2,退出按任意键\n");
        int a = 0;
        scanf("%d", &a);
        if (a == 1)
        {
            zengJia();
            
        }
        else if (a == 2)
        {
            gongNing();
        }
    }
}
// 删除功能定义
void shanchu()
{
    printf("请输入需要删除的选择\n学号删除请按1\n姓名删除请按2\n性别删除请按3\n分数删除请按4\n删除所有请按5\n返回请按6\n");
    int a = 0;
    scanf("%d",&a);
    if (a == 1) {
        shanchuxuehao();
    } else if (a == 2) {
        shanchuxingming();
    } else if (a == 3) {
        shanchuxingbie();
    } else if (a == 4) {
        shanchufenshu();
    } else if (a == 5){
        shanchusuoyou();
    }else if(a == 6)
    {
        gongNing();
    }
}
void shanchuxuehao()
{
    // 提示用户需要删除该学生的学号
    printf("请输入需要删除该学生的学号\n");
    int n = 0;
    scanf("%d",&n);
    // 找到这个学号对应的数组
    for (int i = 0,count = 0; i<100; i++)
    {
        // 定义一个空的学生变量a
        struct Student a;
        // 如果数组某一个元素的学号与需要删除的学号相等
        if (str[i].number == n)
        {
            printf("您要删除的学生姓名是%s、年龄是%d、性别是%s、学号是%d、分数是%f\n如不是很按1(跳过继续查找),返回请按2,删除请按任意键\n",str[i].name, str[i].age, str[i].set, str[i].number,str[i].score);
            int b = 0;
            scanf("%d",&b);
            if (b==1) {
                continue;
            } else if (b ==2) {
                shanchu();
            } else {
                str[i] = a; // 然后将这个数组元素清空
                --count;
            };
        }
        ++count;
        if (count==100) {
            printf("无此学生\n");
            shanchu();
        }
    }
    
}
void shanchuxingming()
{
    // 提示用户需要删除该学生的学姓名
    printf("请输入需要删除该学生的姓名\n");
    char n[10] = {0};
    scanf("%s",&n);
    // 找到这个性别对应的数组
    for (int i = 0,count = 0; i<100; i++)
    {
        // 定义一个空的学生变量a
        struct Student a;
        // 如果数组某一个元素的姓名与需要删除的姓名相等
        if (strcmp(str[i].name, n) == 0)
        {
            printf("您要删除的学生姓名是%s、年龄是%d、性别是%s、学号是%d、分数是%f\n如不是很按1(跳过继续查找),返回请按2,删除请按任意键\n",str[i].name, str[i].age, str[i].set, str[i].number,str[i].score);
            int b = 0;
            scanf("%d",&b);
            if (b==1) {
                continue;
            } else if (b ==2) {
                shanchu();
            } else {
                str[i] = a; // 然后将这个数组元素清空
                --count;
            };
        }
        ++count;
        if (count==99) {
            printf("无此学生\n");
            shanchu();
        }
    }
}

void shanchuxingbie()
{
    // 提示用户需要删除该学生的学姓别
    printf("请输入需要删除该学生的姓别(man或woman)\n");
    char n[10] = {0};
    scanf("%s",&n);
    // 找到这个性别对应的数组
    for (int i = 0,count = 0; i<100; i++)
    {
        // 定义一个空的学生变量a
        struct Student a;
        // 如果数组某一个元素的姓名与需要删除的姓名相等
        if (strcmp(str[i].set, n) == 0)
        {
            printf("您要删除的学生姓名是%s、年龄是%d、性别是%s、学号是%d、分数是%f\n如不是很按1(跳过继续查找),返回请按2,删除请按任意键\n",str[i].name, str[i].age, str[i].set, str[i].number,str[i].score);
            int b = 0;
            scanf("%d",&b);
            if (b==1) {
                continue;
            } else if (b ==2) {
                shanchu();
            } else {
                str[i] = a; // 然后将这个数组元素清空
                --count;
            };
        }
        ++count;
        if (count==99) {
            printf("无此学生\n");
            shanchu();
        }
    }
    
}
void shanchufenshu()
{
    // 提示用户需要删除该学生的分数
    printf("请输入需要删除多少学生的分数以内的数据用“-”(如:90-100,单个成绩100-100)\n");
    int n = 0,m = 0;
    scanf("%d-%d",&n, &m);
    for (;n <= m;n++)
    {
        // 找到这个学号对应的数组
        for (int i = 0,count = 0; i<100; i++)
        {
            // 定义一个空的学生变量a printf("您要删除的学生是%d-%d将被删除,返回请按2,确认请按任意键\n",n,m);
            struct Student a;
            // 如果数组某一个元素的分数与需要删除的分数相等
            if (str[i].number == n)
            {
                str[i] = a; // 然后将这个数组元素清空
                
            }
            ++count;
            if (count==99) {
                printf("无此学生\n");
                shanchu();
            }
        }
    }
}
void shanchusuoyou()
{
    for (int i = 0; i<100; i++) {
        struct Student a;
        // 如果数组某一个元素的姓名与需要删除的姓名相等
        
        printf("您将要删除所有学生信息,返回请按1,删除请按任意键\n");
        int b = 0;
        scanf("%d",&b);
        if (b==1) {
            continue;
        } else if (b ==2) {
            shanchu();
        } else {
            str[i] = a; // 然后将这个数组元素清空
        };
    }
}

// 查询功能定义
void chaxun()
{
    printf("按学号查询请按1\n按姓名查询请按2\n按性别查询请按3\n按分数查询请按4\n查询所有(按录入顺序)请按5\n");
    int a = 0;
    scanf("%d", &a);
    if (a==1) {
        xuehao();
    } else if (a == 2) {
        xingming();
    } else if (a == 3) {
        xingbie();
    } else if (a == 4) {
        fenshu();
    } else if (a == 5) {
        suoyou();
    }
    printf("是否继续查询,查询请按1,返回菜单请按2\n");
    int b = 0;
    scanf("%d",&b);
    if (b == 1) {
        chaxun();
    }else if (b ==2){
        gongNing();
    }
}
void suoyou()
{
    printf("从录入顺序\n");
    for (int i = 0; i<=99; i++) {
        printf("第%d个的姓名是%s、年龄是%d、性别是%s、学号是%d、分数是%f\n",(i+1),str[i].name, str[i].age, str[i].set, str[i].number,str[i].score);
    }
}
void fenshu()
{
    // 提示用户输入需要查询的学生分数
    printf("请输入需要查询的学生分数\n");
    double n = 0;
    scanf("%lf",&n);
    // 将这个分数找出
    for (int i = 0,count = 0; i<100; i++)
    {
        // 如果数组的某一个元素分数与需要查找的元素分数相等
        if (str[i].score == n)
        {
            // 打印这个学生元素的所有信息
            printf("该学生的姓名是%s、年龄是%d、性别是%s、学号是%d、分数是%f\n",str[i].name, str[i].age, str[i].set, str[i].number,str[i].score);
            --count;
        }
        ++count;
        // 遍历每一个分数,如果找不到打印无此学生,返回查询
        if (count==100)
        {
            printf("无此学生\n");
            chaxun();
        }
    }
    
}

void xingbie()
{
    // 提示用户输入需要查询的学生姓别
    printf("请输入需要查询的学生姓别\n");
    char n[10] = {0};
    scanf("%s",n);
    // 将这个姓别找出
    for (int i = 0,count = 0; i<100; i++)
    {
        // 如果数组的某一个元素姓别与需要查找的元素姓别相等
        if (strcmp(str[i].set, n) == 0)
        {
            // 打印这个学生元素的所有信息
            printf("该学生的姓名是%s、年龄是%d、性别是%s、学号是%d、分数是%f\n",str[i].name, str[i].age, str[i].set, str[i].number,str[i].score);
            --count;
        }
        ++count;
        // 遍历每一个姓别,如果找不到打印无此学生,返回查询
        if (count == 100)
        {
            printf("无此学生\n");
            chaxun();
        }
    }
    
}

void xingming()
{
    // 提示用户输入需要查询的学生姓名
    printf("请输入需要查询的学生姓名\n");
    char n[10] = {0};
    scanf("%s",n);
    // 将这个姓名找出
    for (int i = 0, count = 0; i<100; i++)
    {
        // 如果数组的某一个元素姓名与需要查找的元素姓名相等
        if (strcmp(str[i].name, n) == 0)
        {
            // 打印这个学生元素的所有信息
            printf("该学生的姓名是%s、年龄是%d、性别是%s、学号是%d、分数是%f\n",str[i].name, str[i].age, str[i].set, str[i].number,str[i].score);
            --count;
        }
        // 遍历每一个姓名,如果找不到打印无此学生,退出此功能
        ++count;
        if (count==100)
        {
            printf("无此学生\n");
            chaxun();
        }
        
    }
    
}
void xuehao()
{
    // 提示用户输入需要查询的学生学号
    printf("请输入需要查询的学生学号\n");
    int n = 0;
    scanf("%d",&n);
    // 将这个学号找出
    for (int i = 0; i<100; i++)
    {
        // 如果数组的某一个元素学号与需要查找的元素学号相等
        if (str[i].number == n)
        {
            // 打印这个学生元素的所有信息
            printf("该学生的姓名是%s、年龄是%d、性别是%s、学号是%d、分数是%f\n",str[i].name, str[i].age, str[i].set, str[i].number,str[i].score);
            break;
        }
        // 遍历每一个学号,如果找不到打印无此学生,退出此功能
        else if (i == 99)
        {
            printf("无此学生\n");
            chaxun();
        }
    }
    
}


8.

#import <Foundation/Foundation.h>
#include <stdio.h>
#include <string.h>

int string_len(char *s)

{  //两种方法:第一种是遍历字符串,计数,第二种是利用strlen函数
    /* int i;
     
     for (i=0;s[i] != '\0';i++);//前边一直,出错,是因为这里少了一个分号;
     
     return i;*/
    
    int a=strlen(s);
    
    return a;
}

int main()

{
    char name[1024];
    
    printf("please input a sentence");
    
    gets(name);
    
    int c=string_len(name);
    
    printf("字符串长度=%d",c);
    
    return 0;
}

9.

//输入字符串,将每个单词首字母变成大写再输出

#import <Foundation/Foundation.h>
#include <stdio.h>

int main()

{
    char name[1024];//定义字符数组
    
    printf("please input a sentence");
    
    gets (name);//接收输入的字符串
    
    if (name[0]>='a'&&name[0]<='z')//如果首字母是小写
        
    {
        
        name[0]=name[0]-32;//将首字母转化为大写
    }
    
    for (int i=1;name[i]!='\0';i++)//遍历字符串
        
    {
        if (name[i-1] ==' '&&name[i]>='a' && name[i]<='z')//如果该字符前一个字符为空格,且该字符为小写
            
        {
            name[i]=name[i]-32;
        }
    }
    
    
    printf("%s",name);
    
    return 0;
}

10.在键盘输入run,然后打印pao [str isEqualToString:@""]的用法

#import <Foundation/Foundation.h>

int main()
{
    NSLog(@"please input a sentence");
    char *sen;
    scanf("%s",sen);
    
    NSString *str = [NSString stringWithUTF8String:sen];
    
    if ([str isEqualToString:@"run"])
    {
        NSLog(@"跑");
    }
    else if ([str isEqualToString:@"pao"])
    {
        NSLog(@"跑1");
    }
    else
    {
        NSLog(@"wrong input");
    }
    
    
    
    
    return 0;
}