c言語関数実装問題2
5602 ワード
質問です。
最長単語
独自の関数を作成し、文字列の中で最も長い単語を検索することができます.
メインプログラムを作成し、キーボードから1行の文字を入力し、自分で作成した最長単語検索関数を呼び出して、この単語を出力する機能です.
#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;
}
質問です。
最長共通サブストリング
1つの関数を記述して、2つの文字列sとtの1つの最も長い共通のサブ列を求めます.
メインプログラムを作成し、2つの文字列を入力し、自分で作成した最長共通サブストリング関数を呼び出し、メインプログラムに最長共通サブストリングを出力します.
#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;
}
質問です。
成績ランキング
中間試験はもうすぐ終わります.先生は学年の成績ランキングを行う必要があります.ランキングのルールは以下の通りです.
中間試験の平均成績をランキングの根拠とする(満点は100点).
学生Aに対して、K人の平均成績がAの平均成績より高い場合、学生Aの学年順位はK+1となる.
学生Aと学生Bの平均成績が同じなら、彼らの順位は同じだ.
いくつかの関数を作成し、それぞれ以下の機能を実現する必要があります.
関数1:N個の学友の学号、姓名、平均成績を入力します
関数2:平均成績が大きい順、小さい順に並べ替え、学号、氏名も調整し、上記の規則に従って順位付けを行ってください
関数3:1つの学友の学号を入力して、半分の検索法でその学友の名前、平均成績、順位などの情報を探し出すことができます
上記の関数を検証するためのプログラムを作成します.
入力、出力フォーマットの要件:
(1)第1の行為は、学生の人数を表す整数N(1
(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);
}
}
Reference
この問題について(c言語関数実装問題2), 我々は、より多くの情報をここで見つけました https://velog.io/@sungmin-choi/c언어-함수구현문제2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol