题目一

cs
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//将字符指针s所指字符串中的字符倒序
void reverseStr(char * s);
int main() {
char s[100+1];
gets(s);
reverseStr(s);
printf("result=%s\n",s);
return 0;
}
/* 请在这里填写答案 */
具体解法
利用strlen函数计算字符串s的长度n(即字符的个数,不包括字符串结束语\0);
通过循环遍历字符串的前半部分(i从0到n/2-1),将当前位置i的字符与对称位置n-i-1的字符进行交换;
由于字符串是以字符指针的形式传递,交换操作会直接修改原字符串的内容,无需返回新字符串。
cs
//将字符指针s所指字符串中的字符倒序
void reverseStr(char * s){
int n=strlen(s);
for(int i=0;i<n/2;i++){
int temp=s[i];
s[i]=s[n-i-1];
s[n-i-1]=temp;
}
}
题目二

cs
#include <stdio.h>
#define HERB_NAME_LEN 1000
#define HERB_EPITHET_NUM 10
char errorMsg[] = "没有那么多别名!";
struct HerbMedicine {
int herbNo;//中药编号
char name[HERB_NAME_LEN+1];//中药正名
char epithet[HERB_EPITHET_NUM][HERB_NAME_LEN+1];//每个中药保存最多HERB_EPITHET_NUM个别名
int epithetNum; // 别名个数
};
char* getEpithet(struct HerbMedicine *pHerb, int i);
int main()
{
struct HerbMedicine herb = {10000, "麦冬", {"麦门冬","杭寸冬","杭麦冬","寸冬","大麦冬"}, 5};
int i;
scanf("%d", &i);
printf("%s\n", getEpithet(&herb, i));
return 0;
}
/* 请在这里填写答案 */
题目分析
理解结构体与参数含义:
struct HerbMedicine结构体包括:
epithet:存储别名的二维字符数组(最多HERB_EPITHET_NUM个别名);
epithetNum:实际的别名个数;
函数参数i是用户传入的"第i个别名"(注意:用户输入的i是从1开始的序号,而数组下标是从0开始的)。
具体解法
- 将用户传入的i转换为数组下标(i-1),并检查改下标是否在有效范围内(i-1既不小于0,也不超过实际别名个数);
- 若下标有效,返回结构体中对应的下标别名;
- 若无效,返回全局定义的错误信息errorMsg。
cs
char* getEpithet ( struct HerbMedicine *pHerb, int i ){
if(i-1>=0&&i-1<pHerb->epithetNum){
return pHerb->epithet[i-1];
}
else return errorMsg;
}
题目三

解题思路
统一文件名格式:所有字母先转小写,再将首字母(若为字母)转大写。
具体解法
- 读取文件名的数量n;
- 循环n次,每次读取一个文件名存入字符数组s(保证了多组输入);
- 遍历文件名的每个字符,如果字符为大写字母,通过加32(ASCII码偏移)转换为对应的小写字母,数字和-保持不变;
- 在处理后的字符中,如果首字符为小写字符,通过减32转换为对应的大写字母,若首字母是数字或-,保持不变;
- 每次处理完一个文件名后,直接输出结果。
cs
#include <stdio.h>
#include <string.h>
int main(){
int n;
scanf("%d",&n);
while(n--){
char s[50];
scanf("%s",s);
int a=strlen(s);
for(int i=0;i<a;i++){
if(s[i]>='A'&&s[i]<='Z'){
s[i]+=32;
}
}
if(s[0]>='a'&&s[0]<='z'){
s[0]-=32;
}
printf("%s\n",s);
}
return 0;
}
题目四

具体解法
- 首先读取班级数量N,接着读取N个班级的学生人数,存入数组a,最后读取每个场地能容纳的学生人数C;
- 通过循环遍历数组a,累加所有班级的学生人数,得到总人数sum;
- 计算所需场地数量:如果总人数sum能被C整除,则场地数为sum/C,若不能整除,则场地数为sum/C+1(需额外一个场地容纳剩余学生);
- 最后输出结果x。
cs
#include <stdio.h>
int main(){
int N;
scanf("%d",&N);
int a[N];
for(int i=0;i<N;i++){
scanf("%d",&a[i]);
}
int C;
scanf("%d",&C);
int x,sum=0;
for(int i=0;i<N;i++){
sum+=a[i];
}
if(sum%C!=0)x=sum/C+1;
else x=sum/C;
printf("%d",x);
return 0;
}