add 1-* (Function problems)
This commit is contained in:
parent
06f1dc419c
commit
5e6d6c63ee
30
pset13/1-1-GetScore.c
Normal file
30
pset13/1-1-GetScore.c
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define MAX 48
|
||||||
|
|
||||||
|
int getScore(char *s);
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
char input[MAX];
|
||||||
|
int score;
|
||||||
|
|
||||||
|
scanf("%s", input);
|
||||||
|
score = getScore(input);
|
||||||
|
printf("%d\n", score);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 请在这里填写答案 */
|
||||||
|
int getScore(char *s) {
|
||||||
|
int score = 0;
|
||||||
|
while (*s != '\0') {
|
||||||
|
if (*s == 'W') { // Win
|
||||||
|
score += 3;
|
||||||
|
} else if (*s == 'D') { // Draw
|
||||||
|
score += 1;
|
||||||
|
} // If lost, the score is unchanged
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
return score;
|
||||||
|
}
|
47
pset13/1-2-GetScore.c
Normal file
47
pset13/1-2-GetScore.c
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
int *create(int n);
|
||||||
|
void cal(int *array, int size);
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int *array, n, i;
|
||||||
|
|
||||||
|
scanf("%d", &n);
|
||||||
|
array = create(n);
|
||||||
|
cal(array, n);
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
printf("%d", *(array + i));
|
||||||
|
if (i == n - 1)
|
||||||
|
printf("\n");
|
||||||
|
else
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
free(array);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 请在这里填写答案 */
|
||||||
|
int *create(int n) { return malloc(n * sizeof(int)); }
|
||||||
|
|
||||||
|
void cal(int *array, int size) {
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
scanf("%d", &array[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
int sum = 0, max = array[0], min = array[0];
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
sum += array[i];
|
||||||
|
if (array[i] > max)
|
||||||
|
max = array[i];
|
||||||
|
else if (array[i] < min)
|
||||||
|
min = array[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%d\n", sum);
|
||||||
|
printf("%.2f\n", sum / (float)size);
|
||||||
|
printf("%d\n", max);
|
||||||
|
printf("%d\n", min);
|
||||||
|
}
|
87
pset13/1-3-DynamicMemoryAllocation.c
Normal file
87
pset13/1-3-DynamicMemoryAllocation.c
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
char **create1(int n);
|
||||||
|
void create2(char **strPtr, int n);
|
||||||
|
void fill(char **strPtr, int n);
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int n, i, j;
|
||||||
|
char **strPtr;
|
||||||
|
|
||||||
|
scanf("%d", &n);
|
||||||
|
strPtr = create1(n * 2 + 1);
|
||||||
|
create2(strPtr, n * 2 + 1);
|
||||||
|
fill(strPtr, n);
|
||||||
|
|
||||||
|
for (i = 0; i < 2 * n + 1; i++) {
|
||||||
|
printf("%s\n", strPtr[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < n * 2 + 1; i++)
|
||||||
|
free(strPtr[i]);
|
||||||
|
free(strPtr);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 请在这里填写答案 */
|
||||||
|
char **create1(int n) {
|
||||||
|
char **strPtr =
|
||||||
|
malloc(sizeof(char *) * n); // This char * is soooooo important
|
||||||
|
return strPtr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void create2(char **strPtr, int n) {
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
strPtr[i] = malloc(sizeof(char) * (n + 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void fill(char **strPtr, int n) {
|
||||||
|
int loc;
|
||||||
|
if (n == 0) { // Take care of special case
|
||||||
|
strPtr[0][0] = 'X'; // When n == 0, it is only X
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (int i = 0; i <= n; i++) {
|
||||||
|
loc = 0;
|
||||||
|
for (int j = 0; j < n - i; j++) {
|
||||||
|
strPtr[i][loc++] = ' ';
|
||||||
|
}
|
||||||
|
if (i % n == 0) {
|
||||||
|
strPtr[i][loc++] = 'X';
|
||||||
|
} else {
|
||||||
|
strPtr[i][loc++] = '/';
|
||||||
|
}
|
||||||
|
for (int j = 0; j < 2 * i - 1; j++) {
|
||||||
|
strPtr[i][loc++] = ' ';
|
||||||
|
}
|
||||||
|
if (i != 0) {
|
||||||
|
if (i == n) {
|
||||||
|
strPtr[i][loc++] = 'X';
|
||||||
|
} else {
|
||||||
|
strPtr[i][loc++] = '\\';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
strPtr[i][loc] = '\0'; // EOL
|
||||||
|
}
|
||||||
|
for (int i = n + 1; i < 2 * n + 1; i++) {
|
||||||
|
loc = 0;
|
||||||
|
for (int j = 0; j < i - n; j++) {
|
||||||
|
strPtr[i][loc++] = ' ';
|
||||||
|
}
|
||||||
|
if (i != n * 2) {
|
||||||
|
strPtr[i][loc++] = '\\';
|
||||||
|
} else {
|
||||||
|
strPtr[i][loc++] = 'X';
|
||||||
|
}
|
||||||
|
for (int j = 0; j < -2 * (i - n) + 2 * n - 1; j++) {
|
||||||
|
strPtr[i][loc++] = ' ';
|
||||||
|
}
|
||||||
|
if (i != 2 * n) {
|
||||||
|
strPtr[i][loc++] = '/';
|
||||||
|
}
|
||||||
|
strPtr[i][loc] = '\0'; // EOL
|
||||||
|
}
|
||||||
|
}
|
41
pset13/1-4-LocateSubStr.c
Normal file
41
pset13/1-4-LocateSubStr.c
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
char *locatesubstr(char *str1, char *str2);
|
||||||
|
int main() {
|
||||||
|
char str1[505], str2[505];
|
||||||
|
char *p;
|
||||||
|
// Was gets in the example, but it is unsafe.
|
||||||
|
fgets(str1, 505, stdin);
|
||||||
|
fgets(str2, 505, stdin);
|
||||||
|
p = locatesubstr(str1, str2);
|
||||||
|
|
||||||
|
if (p == NULL)
|
||||||
|
printf("NULL!\n");
|
||||||
|
else
|
||||||
|
puts(p);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 请在这里填写答案 */
|
||||||
|
char *locatesubstr(char *str1, char *str2) {
|
||||||
|
char *loc = NULL;
|
||||||
|
int i;
|
||||||
|
while (*str1 != '\0' && loc == NULL) {
|
||||||
|
if (*str1 == *str2) { // Head matched
|
||||||
|
loc = str1;
|
||||||
|
i = 1;
|
||||||
|
while (*(str2 + i) != '\0') {
|
||||||
|
if (*(str1 + i) != *(str2 + i) &&
|
||||||
|
*(str2 + i) != '\n' && // Because gets also inputs the \n
|
||||||
|
*(str1 + i) != '\n') { // So we need to take care of that.
|
||||||
|
loc = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
str1++;
|
||||||
|
}
|
||||||
|
return loc;
|
||||||
|
}
|
47
pset13/1-5-GetString.c
Normal file
47
pset13/1-5-GetString.c
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int getString(char *source, char *strPtr[]);
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
char str[100005];
|
||||||
|
char *strPtr[1005] = {0};
|
||||||
|
int i, num;
|
||||||
|
|
||||||
|
/* gets(str); */
|
||||||
|
fgets(str, 100005, stdin);
|
||||||
|
num = getString(str, strPtr);
|
||||||
|
for (i = 0; i < num; i++)
|
||||||
|
puts(strPtr[i]);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 请在这里填写答案 */
|
||||||
|
int getString(char *source, char *strPtr[]) {
|
||||||
|
int count = 0;
|
||||||
|
int loc;
|
||||||
|
int j;
|
||||||
|
// Find the first ones.
|
||||||
|
for (int i = 0; source[i] != '\0'; i++) {
|
||||||
|
if (source[i] != ' ') {
|
||||||
|
strPtr[count++] = &source[i];
|
||||||
|
loc = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Start populating the array by finding the spaces.
|
||||||
|
for (int i = loc; source[i] != '\0'; i++) {
|
||||||
|
if (source[i] == ' ') {
|
||||||
|
// Find the next alpha.
|
||||||
|
for (j = i; j < 1005 + i && source[j] != '\0'; j++) {
|
||||||
|
if (source[j] != ' ' && source[j] != '\n') {
|
||||||
|
strPtr[count++] = &source[j];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
source[i] = '\0';
|
||||||
|
i = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
33
pset13/1-6-DelChar.c
Normal file
33
pset13/1-6-DelChar.c
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void delcharfun(char *str, char ch);
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
char ch, str[110];
|
||||||
|
|
||||||
|
scanf("%s", str); //读入字符串
|
||||||
|
getchar(); //读取回车符号
|
||||||
|
scanf("%c", &ch); //读入字符
|
||||||
|
delcharfun(str, ch); //删除
|
||||||
|
printf("%s\n", str); //输出删除后结果
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 请在这里填写答案 */
|
||||||
|
void delcharfun(char *str, char ch) {
|
||||||
|
int i;
|
||||||
|
while (*str != '\0' && *str != '\n') {
|
||||||
|
if (*str == ch) {
|
||||||
|
// Shift this array
|
||||||
|
i = 0;
|
||||||
|
while (*(str + i + 1) != '\0') {
|
||||||
|
*(str + i) = *(str + i + 1);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
// End this string to avoid duplicates
|
||||||
|
*(str + i) = '\0';
|
||||||
|
str--; // Because the string is shifted
|
||||||
|
}
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue