返回首页   进站必读

0825练习题


1.

练习使用strcmp, strncmp函数并自己编程实现strcmp, strncmp函数;
(提示:查看man手册)
1.c

/** 
* @file 1.c
* @brief 练习使用strcmp, strncmp函数并自己编程实现strcmp, strncmp函数
* @author GuoPengyu
* @version 0.1
* @date 2011-09-09
*/
#include <stdio.h>
#include <string.h>

int my_strcmp(char *s1, char *s2)
{
	while(*s1 == *s2)
	{
		if(*s1 == '\0')
			return 0;
		s1++;
		s2++;
	}

	return (*s1 > *s2 ? 1 : -1); 
}

int my_strncmp(char *s1, char *s2, int n)
{
	if(!n)
		   return 0;
	while(*s1 == *s2)
	{
		if(*s1 == '\0' || !(--n))
			return 0;
		s1++;
		s2++;
	}

	return (*s1 > *s2 ? 1 : -1); 
}
int main(int argc, const char *argv[])
{
	char *p = "akaedu1", *q = "akadeu", *str = "helaka";

	printf("%d\n", strcmp(p, q));
	printf("%d\n", my_strcmp(p, q));
	printf("strncmp = %d\n", strncmp(p, str,3));
	printf("my_strncmp = %d\n", my_strncmp(p, str, 3));

	return 0;
}

2.

从命令行读取数据, 要求用户输入的日期形式为:8/25/2011,并且假设日期中没有空 格,执行后显示的数据格式为:August 25,2011,如果没有按照指定格式录入日期, 那么程序显示出错次信息;(提示:可以使用sscanf函数从命令行截取出年,月,日)

关于命令行的例子:

#include <stdio.h>

int main(int argc, char *argv[])
{
	printf("argc = %d\n", argc);
	printrf("argv[0] = %s\n", argv[0]);
	printrf("argv[1] = %s\n", argv[1]);
	printrf("argv[2] = %s\n", argv[2]);
	return 0;
}

编译完成后,在执行的时候,键入:./app hello akaedu 回车;
2.c

/** 
* @file 2.c
* @brief 从命令行读取数据,
* 要求用户输入的日期形式为:8/25/2011,并且假设日期中没有空
* 格,执行后显示的数据格式为:August 25,2011,如果没有按照指定格式录入日期,
* 那么程序显示出错次信息;(提示:可以使用sscanf函数从命令行截取出年,月,日)
* @author GuoPengyu
* @version 0.1
* @date 2011-09-09
*/
#include <stdio.h>

int main(int argc, const char *argv[])
{
        char *mon[13] = {NULL,"January","Febrary","March","April","May","June","July",
                "August","September","October","November","December"};

        int year, month, day, ret;
        
        if(argc != 2)
        {
                printf("Please Usage : ./XX 8/25/2011\n");
                return 0;
        }
        ret = sscanf(argv[1], "%d/%d/%d", &month, &day, &year);
        if(ret != 3)
        {
                printf("Error!\n");
                return 0;
        }
        printf("%s %d, %d\n", mon[month], day, year);

        return 0;
}

3.

用结构体数组实现5个学生的成绩统计。功能包括
1)输入学生的学号,姓名,成绩;
2)按成绩由高到低进行排序并打印结果,并且60及60分以上的学生打印出标志“pass”,
60分以下的学员打印出标志“fail”; 3.c

/** 
* @file 3.c
* @brief 用结构体数组实现5个学生的成绩统计。功能包括
* 1)输入学生的学号,姓名,成绩;
* 2)按成绩由高到低进行排序并打印结果,并且60及60分以上的学生打印出标志“pass”,
* 60分以下的学员打印出标志“fail”;
* @author GuoPengyu
* @version 0.1
* @date 2011-09-09
*/
#include <stdio.h>

#define N 3

typedef struct student
{
        int id;
        char name[10];
        int score;
}stu_t;

int main(int argc, const char *argv[])
{
        stu_t stu[N], tmp;
        int i, j, pos;

        for(i = 0; i < N; i++)
                scanf("%d %s %d", &stu[i].id, stu[i].name, &stu[i].score);
        
        for(i = 0; i < N-1; i++)
        {
                pos = i;
                for(j = i+1; j < N; j++)
                {
                        if(stu[pos].score < stu[j].score)
                                pos = j;
                }
                if(pos != i)
                {
                        tmp = stu[pos];
                        stu[pos] = stu[i];
                        stu[i] = tmp;
                }
        }

        printf("id\t%-10s\tscore\tgrade\n", "name");
        for(i = 0; i < N; i++)
        {
                printf("%d\t%-10s\t%d\t%s\n", stu[i].id, stu[i].name, stu[i].score, stu[i].score >= 60 ? "pass" : "fail");
        }

        return 0;
}