// 返回:在数组中查找指定元素
int search(int list[],int n,int x){
// 返回值
int result=-1;
// 顺序查找
for(int i=0;i<n;++i){
if(list[i]==x){
result=i;
break;
}
}
// 返回
return result;
}
// 交换数组两个元素
void swap(int a[],int i,int j){
int tmp=a[i];
a[i]=a[j];
a[j]=tmp;
// 返回
return;
}
// 逆置
void reverse(int a[],int left,int right){
// 对撞指针
while(left<right){
swap(a,left++,right--);
}
// 返回
return;
}
// 数组循环右移m个位置
void ArrayShift(int a[],int n,int m){
// m比n大时
m=m%n;
// 三次逆置等效实现循环右移
reverse(a,0,n-1);
reverse(a,0,m-1);
reverse(a,m,n-1);
// 返回
return;
}
// 处理:报数
void CountOff( int n, int m, int out[] ){
int people[MAXN]; // 1表示还在圈中,0表示已退出
int i, count, pos, exit_order;
// 初始化所有人都在圈中
for (i = 0; i < n; i++) {
people[i] = 1;
}
pos = 0; // 当前位置
exit_order = 1; // 退出顺序
while (exit_order <= n) {
count = 0; // 当前报数
// 找到第m个人
while (count < m) {
if (people[pos] == 1) {
count++;
}
if (count < m) {
pos = (pos + 1) % n; // 移动到下一个人
}
}
// 当前位置的人退出
out[pos] = exit_order;
people[pos] = 0;
exit_order++;
// 移动到下一个还在圈中的人
while (people[pos] == 0 && exit_order <= n) {
pos = (pos + 1) % n;
}
}
}
// 处理:字符串复制
void strmcpy( char *t, int m, char *s ){
int i, j;
int len = 0;
// 计算字符串t的长度
while (t[len] != '\0') {
len++;
}
// 如果m超过字符串长度,结果字符串为空串
if (m > len) {
s[0] = '\0';
return;
}
// 从第m个字符开始复制(m从1开始计数,数组下标从0开始)
for (i = m - 1, j = 0; t[i] != '\0'; i++, j++) {
s[j] = t[i];
}
// 添加字符串结束符
s[j] = '\0';
}
#include <string.h>
// 处理:删除字符串中的指定字符
void delchar(char *str, char c){
// 删除 前后双指针
int left=0;
int right=0;
int sLen=strlen(str);
while(right<sLen){
if(str[right]!=c){
str[left++]=str[right];
}
++right;
}
str[left]='\0';
// 返回
return;
}
// 返回:回文字符串—>true 否则->false
bool palindrome(char *s){
// 返回值
bool result=true;
// 判断 相向双指针
int left=0;
int right=strlen(s)-1;
while(left<right){
if(s[left++]!=s[right--]){
result=false;
break;
}
}
// 返回
return result;
}
#include <string.h>
// 处理:分类统计各类字符个数
void StringCount(char *s){
// 统计
int sLen=strlen(s);
int cnt[5]={0};
for(int i=0;i<sLen;++i){
if(s[i]>='A' && s[i]<='Z'){
++cnt[0];
}else if(s[i]>='a' && s[i]<='z'){
++cnt[1];
}else if(s[i]==' '){
++cnt[2];
}else if(s[i]>='0' && s[i]<='9'){
++cnt[3];
}else{
++cnt[4];
}
}
// 输出
for(int i=0;i<5;++i){
printf("%d",cnt[i]);
if(i<4){
printf(" ");
}
}
// 返回
return;
}
// 返回:两个复数之积
struct complex multiply(struct complex x, struct complex y){
// 结果
struct complex result;
// 计算
result.real=x.real*y.real-x.imag*y.imag;
result.imag=x.real*y.imag+x.imag*y.real;
// 返回结果
return result;
}
// 返回:不及格人数
// 处理:设置等级
int set_grade(struct student *p, int n){
// 返回值
int result=0;
// 根据学生成绩设置其等级 统计不及格人数
for(int i=0;i<n;++i){
int score=p[i].score;
if(score>=85 && score<=100){
p[i].grade='A';
}else if(score>=70 && score<=84){
p[i].grade='B';
}else if(score>=60 && score<=69){
p[i].grade='C';
}else{
p[i].grade='D';
++result;
}
}
// 返回
return result;
}
// 递归:计算前n项和
int sum(int n){
// 边界处理
if(n<=0) return 0;
// 递归出口
if(n==1) return 1;
// 递归表达式
return n+sum(n-1);
}
《《程序设计》函数题|021-030》有1条评论