返回首页   进站必读

0820练习题


1.

实现char *mystrcpy(char *dest, char *src)函数,功能与strcpy函数相同,strcpy用法举例:

#include <stdio.h>

int main(int argc, char *argv[])
{
    char src[20] = "Hello world!";
    char dest[20];
    strcpy(dest, src);
    printf("%s", dest);
    
    return 0;
}
1.c
/** 
* @file 1.c
* @brief mystrcpy
* @author GuoPengyu
* @version 0.1
* @date 2011-09-09
*/
#include <stdio.h>

/** 
* @brief strcpy
* 
* @param dest dest
* @param src source
* 
* @return original address of dest
*/
char *mystrcpy(char *dest, char *src)
{
	char *bak = dest;

	while(*dest++ = *src++);

	return bak;
}

int main(int argc, const char *argv[])
{
	char src[20] = "Hello world!";
	char dest[20];

	printf("%s\n", mystrcpy(dest, src));

	return 0;
}

2.

编写函数把任意十进制的正整数转换为二进制,主函数调用该函数完成整数的二进制形式输出,要求不能按逆序输出。2.c

/** 
* @file 2.c
* @brief 编写函数把任意十进制的正整数转换为二进制,主函数调用该函数完成整数的二进制形式输出,要求不能按逆序输出
* @author GuoPengyu
* @version 0.1
* @date 2011-09-09
*/
#include <stdio.h>

/** 
* @brief convert to binary
* 
* @param buf store in
* @param num number to convert
* 
* @return total place of the number
*/
int convert(int *buf, int num)
{
	int i = 0;

	while(num)
	{
		buf[i++] = num % 2;
		num /= 2;
	}

	return i - 1;
}

int main(int argc, const char *argv[])
{
	int b[32] = {0};
	int num;
	int place;

	printf("Please enter the number to convert: ");
	scanf("%d", &num);
	place = convert(b, num);
	while(place >= 0)
	{
		printf("%d", b[wei--]);
	}

	return 0;
}

3.

找出形参s所指字符串中出现频率最高的字母,不区分大小写,并统计其出现的次数,例如,形参s所指的字符串为:abcAbsmaxless,程序执行后的输出结果为:letter ‘a’:3 times letter ‘s’ 3 times.3.c

/** 
* @file 3.c
* @brief 找出形参s所指字符串中出现频率最高的字母,不区分大小写,并统计其出现的次数,例如,形参s所指的字符串为:abcAbsmaxless,程序执行后的输出结果为:letter * ‘a’:3 times letter ‘s’ 3 times
* @author GaoJinlong
* @version 0.1
* @date 2011-09-09
*/
#include <stdio.h>

int main(int argc, const char *argv[])
{
	char str[100];
	char *p = str;
	char letter[26] = {0};
	char c;
	int i;
	int pos = 0, max = 0;

	printf("please enter a string: ");
	scanf("%s", str);

	while(*p)
	{
		c = toupper(*p);
		letter[c - 65]++;
		p++;
	}

	for (i = 0; i < 26; i++)
	{
		if(letter[i] > max)
		{
			pos = i;
			max = letter[i];
		}
	}

	for(i = 0; i < 26; i++)
	{
		if(max == letter[i])
			printf("%c appears %d times!\n", i + 65, max);
	}

	return 0;
}

4.

定义结构体学生,成员包括学号,姓名,四门功课的成绩,和平均分。
编写函数实现平均成绩的计算并存入到结构体相应的域中。
编写函数实现结构体的打印,要求传入一个结构体,把各项打印出来。
在主函数中调用以上两个函数实现各个成员的平均成绩的计算及最终结果的打印。 4.c

/** 
* @file 4.c
* @brief 定义结构体学生,成员包括学号,姓名,四门功课的成绩,和平均分。
* 编写函数实现平均成绩的计算并存入到结构体相应的域中。
* 编写函数实现结构体的打印,要求传入一个结构体,把各项打印出来。
* 在主函数中调用以上两个函数实现各个成员的平均成绩的计算及最终结果的打印。
* @author Gaojinlong
* @version 0.1
* @date 2011-09-09
*/
#include <stdio.h>

typedef struct stu{
	int ID;
	char name[20];
	int score[4];
	float aver;
}student_t;

/** 
* @brief Print the detail of a student
* 
* @param s student_t
*/
void print_stu(student_t s)
{
	printf("%d\t%10s\t%d\t%d\t%d\t%d\t%f\n", s.ID, s.name, s.score[0], s.score[1], s.score[2], s.score[3], s.aver);
}

/** 
* @brief  Calc the average
* 
* @param s array of student_t
* @param size size of the array
*/
void calc_aver(student_t *s, int size)
{
	int i;

	for (i = 0; i < size; i++) 
	{
		s[i].aver = (float)(s[i].score[0] + s[i].score[1] + s[i].score[2] + s[i].score[3]) / 4;
	}
}

int main(int argc, const char *argv[])
{
	student_t s[5];
	int i;

	for (i = 0; i < 5; i++)
		scanf("%d %s %d %d %d %d", &s[i].ID, s[i].name, &s[i].score[0], &s[i].score[1], &s[i].score[2], &s[i].score[3]);

	calc_aver(s, 5);
	for (i = 0; i < 5; i++) 
	{
		print_stu(s[i]);
	}

	return 0;
}
data.txt
1 lixiang 70 80 90 80
2 zhangsan 60 70 70 80
3 wanghuan 67 78 87 56
4 zhaoliu 56 54 56 67
5 caohuan 67 78 87 67