c언어 함수구현문제2
문제7
最长单词
编写一个自己的函数,能够将一个字符串中最长的单词查找出来。
编写主程序,功能是能够由键盘输入一行字符,并能调用自己编写的最长单词查找函数,输出这个单词。
#include<stdio.h>
#include<string.h>
void f_lw(char* s) {
int l;
char word[20] ={0};
l = strlen(s);
int ml = 0;
int sp = 0;
for (int i = 0; i < l - 1; i++) {
int t = 0;
if (s[i] != ' ') {
t = i;
while (s[i] != ' ') {
i++;
if (s[i] == '\n') break;
}
}
if (ml < i - t ){
ml = i - t;
sp = t;
}
}
for (int j = 0; j < ml; j++) word[j] = s[sp + j];
printf("word:%s", word);
}
int main(void) {
char s[100];
printf("input str:");
fgets(s, 100, stdin);
f_lw(s);
return 0;
}
문제8
最长公共子串
编写一个函数,求两个字符串s和t的一个最长公共子串。
编写主程序,输入两个字符串,调用自己编写的最长公共子串函数,在主程序中输出最长公共子串。
#include<stdio.h>
#include<string.h>
char* l_str(char* s, char* t) {
static char answer[50];
int ls = strlen(s);
int lt = strlen(t);
int a = 0, b = 0;
int ml = 0, sp = 0, ep = 0;
for (int i = 0; i < ls - 1; i++) {
for (int j = 0; j < lt - 1; j++) {
if (s[i] == t[j]) {
a = i, b = j;
while (s[a] ==t[b]){
a++;
b++;
if (s[a] == '\n') break;
else if (t[b] == '\n')break;
}
}
if (ml < a - i) {
ml = a - i;
sp = i;
ep = a;
}
}
}
for (int i = 0; i < a - i + 1; i++) {
answer[i] = s[sp + i];
}
return answer;
}
int main(void) {
char s[100];
char t[100];
printf("input s:");
fgets(s, 100, stdin);
fflush(stdin);
printf("input t:");
fgets(t, 100, stdin);
printf("%s", l_str(s, t));
return 0;
}
문제9
成绩排名
期中考试快要结束了,老师需要进行年级成绩排名。排名的规则如下:
以期中考试的平均成绩为排名依据(满分为100分);
对学生A,如果一共有K个学生的平均成绩比A的平均成绩高,则学生A的年级排名为K+1;
如果学生A和学生B的平均成绩相同,则他们的排名相同。
要求编写几个函数,分别实现以下的功能:
函数1:输入N个同学的学号、姓名、平均成绩
函数2:按平均成绩由大到小的顺序进行排序,学号、姓名也随之调整,并请按照上述规则进行排名
函数3:输入一个同学的学号,能够用折半查找法找出该同学的姓名、平均成绩、排名等信息
编写一个程序来使用验证上述函数。
输入、输出格式要求:
(1) 第一行为一个整数N(1 < N < 200),表示学生的人数。随后有N行,每行有两个非负整数和字符串描述一个学生的信息,依次为学号、姓名和平均成绩。
(2) 随机输入一个同学的学号,请输出这个同学的姓名、平均成绩、排名等信息。如果学号不存在,输出错误提示信息。
(3) 输入 学号0000000000 时,程序退出。
#include<stdio.h>
#include<string.h>
void input_infor(int n, char number[][11], char name[][15], int score[]) {
for (int i = 0; i < n; i++) {
scanf_s("%s %s %d", number[i],11,name[i],15, &score[i]);
}
}
void sort(int n, int score[], int rank[]) {
int s[101] = { 0 };
for (int i = 0; i < n; i++) {
s[score[i]]++;
}
for (int i = 0; i < n; i++) {
int r = 1;
for (int j = 100; j >= 0; j--) {
if (j == score[i]) {
rank[i] = r;
break;
}
if (s[j] != 0) {
r+=s[j];
}
}
}
}
int search(int n,char s_number[],char name[][15],char number[][11],int score[],int rank[]){
for (int i = 0; i < n; i++)
{
printf("%s %s", number[i], s_number);
if (strcmp(number[i],s_number)) {
printf("number:%s name:%s score:%d rank:%d", number[i], name[i], score[i], rank[i]);
break;
}
}
return 0;
}
int main(void) {
int n;
char number[200][11] = { 0,0 };
char name[200][15] = { 0,0 };
int score[200] = { 0 };
int rank[200] = { 0 };
printf("input n:");
scanf_s("%d", &n);
input_infor(n, number, name, score);
sort(n, score, rank);
while (1) {
char s_number[11];
printf("input search number:");
scanf_s("%s", s_number,11);
if (s_number == "0000000000") break;
search(n,s_number, name,number,score,rank);
}
}
Author And Source
이 문제에 관하여(c언어 함수구현문제2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sungmin-choi/c언어-함수구현문제2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)