编写函数,求一组数中的最大值、最小值和平均值。
float fun(int a[],int n,int *max,int *min);
其中 a
、n
、max
和 min
都是用户传入的参数。函数求a
数组中n
个元素的最大值、最小值和平均值。最大值和最小值分别通过max
和 min
带回,函数返回平均值 。
#include
float fun(int a[],int n,int *max,int *min);
int main()
{
int x[10],i,m,n;
float p;
for(i=0;i<10;i++)
scanf("%d",&x[i]);
p=fun(x,10,&m,&n);
printf("max=%d,min=%d,average=%.2f\n",m,n,p);
return 0;
}
/* 请在这里填写答案 */
float fun(int a[],int n,int *max,int *min){
int ret = 0,ma = 0,mi = 0;
for(int i = 0;i < n;i++)
ma = a[i] > a[ma] ? i : ma,mi = a[i] < a[mi] ? i : mi,ret += a[i];
*min = a[mi],*max = a[ma];
return ret * 1.0 / n; //注意返回值是float
}
本题要求实现一个函数,将两个字符串连接起来。
char *str_cat( char *s, char *t );
函数str_cat
应将字符串t
复制到字符串s
的末端,并且返回字符串s
的首地址。
#include
#include
#define MAXS 10
char *str_cat( char *s, char *t );
int main()
{
char *p;
char str1[MAXS+MAXS] = {'\0'}, str2[MAXS] = {'\0'};
scanf("%s%s", str1, str2);
p = str_cat(str1, str2);
printf("%s\n%s\n", p, str1);
return 0;
}
/* 你的代码将被嵌在这里 */
char *str_cat( char *s, char *t ){
int len = 0;
while(s[++len] != '\0');//扫描到s的末尾
for(int i = 0;t[i];i++,len++)
s[len] = t[i];//粘贴
s[len] = '\0';//结尾处记得有0
return s;
}
本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。
void strmcpy( char *t, int m, char *s );
函数strmcpy
将输入字符串char *t
中从第m
个字符开始的全部字符复制到字符串char *s
中。若m
超过输入字符串的长度,则结果字符串应为空串。
#include
#define MAXN 20
void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */
int main()
{
char t[MAXN], s[MAXN];
int m;
scanf("%d\n", &m);
ReadString(t);
strmcpy( t, m, s );
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
void strmcpy( char *t, int m, char *s ){
int len = 0,i = 0;m--;
while(t[++len] != '\0');//得到t的长度
if(m <= len) //if判断可以避免在m > len时进行复制
while(t[m] != '\0') s[i++] = t[m++];//复制
s[i] = '\0';//结尾处要加'\0'
}
本题要求实现一个字符串查找的简单函数。
char *search( char *s, char *t );
函数search
在字符串s
中查找子串t
,返回子串t在s
中的首地址。若未找到,则返回NULL。
#include
#define MAXS 30
char *search(char *s, char *t);
void ReadString( char s[] ); /* 裁判提供,细节不表 */
int main()
{
char s[MAXS], t[MAXS], *pos;
ReadString(s);
ReadString(t);
pos = search(s, t);
if ( pos != NULL )
printf("%d\n", pos - s);
else
printf("-1\n");
return 0;
}
/* 你的代码将被嵌在这里 */
int equal(char *s,char *t){
while(*s != '\0' && *t != '\0'&& *s++ == *t++);//将s与t扫描,在s与t不相等或者s,t末尾停下
return *t == '\0';//如果停下的地方是t的末尾返回1,否则为0
}//判断s,t字符串是否相等
char *search( char *s, char *t ){
for(int i = 0;s[i];i++)//把s字符串扫描一遍
if (equal(s + i,t)) return s + i;//每到一处就与t对比,如果比对成功返回s + i
return NULL;//如果上述比对没一次成功就返回NULL
}//这里的search是暴力解法,如果数据规模很大可以考虑KMP,Hash
本题要求编写程序,读入5个字符串,按由小到大的顺序输出。
输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。
按照以下格式输出排序后的结果:
After sorted:
每行一个字符串
#include
#include
#include
typedef struct {char str[90];} string;
string str[5];
int cmp(string* a,string* b){
return strcmp(a->str,b->str);//用strcmp比较字符串
}
signed main(){
for(int i = 0;i < 5;i++) scanf("%s",str[i].str);
qsort(str,5,sizeof(string),cmp);//C语言内置的排序函数,效率更高
printf("After sorted:\n");
for(int i = 0;i < 5;i++) printf("%s\n",str[i].str);
}
本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母、数字和小数点 .
,还必须既有字母也有数字。
输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行给出一个用户设置的密码,为不超过 80 个字符的非空字符串,以回车结束。
注意: 题目保证不存在只有小数点的输入。
对每个用户的密码,在一行中输出系统反馈信息,分以下5种:
Your password is wan mei.
;Your password is tai duan le.
;Your password is tai luan le.
;Your password needs shu zi.
;Your password needs zi mu.
。#include
int a,let,num,len,ill;
char str[81],c;
signed main(){
scanf("%d",&a),getchar();
while(a--){
ill = len = let = num = 0;//动态清零的好习惯
gets(str);//一定要用gets,scanf遇到' '会停止,而' '是非法字符,可能会误判
while((c = str[++len]) != '\0')
if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) let++;//统计字母
else if(c >= '0' && c <= '9') num++;//统计数字
else if (c != '.') ill++;//统计非法字符
//上面if-else语句可以用以下语句替换
// (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') ?let++ : c >= '0' && c <= '9' ? num++ : c != '.' ? ill++ : 0;
if(len < 6) printf("Your password is tai duan le.\n");
else if(ill) printf("Your password is tai luan le.\n");
else if (num && let) printf("Your password is wan mei.\n");
else if (!num && let) printf("Your password needs shu zi.\n");
else if(!let && num) printf("Your password needs zi mu.\n");
//上面if-else语句可以用以下语句替换
// len < 6 ? printf("Your password is tai duan le.\n") : ill ? printf("Your password is tai luan le.\n") : (num && let) ? printf("Your password is wan mei.\n") : !num && let ? printf("Your password needs shu zi.\n") : !let && num ? printf("Your password needs zi mu.\n") : 0;
}
}
假设有九宫格输入法键盘布局如下:
[ 1,.?! ] [ 2ABC ] [ 3DEF ]
[ 4GHI ] [ 5JKL ] [ 6MNO ]
[ 7PQRS ] [ 8TUV ] [ 9WXYZ ]
[ 0空 ]
注意:中括号[ ]
仅为了表示键盘的分隔,不是输入字符。每个中括号中,位于首位的数字字符即是键盘的按键,按一下即可输入该数字字符。多次按同一个键,则输入的字符依次循环轮流,例如按两次3
,则输入D
;按5次7
,则输入S
;按6次2
,则输入A
。按键0
的输入组合是0
和空格
字符,即按两次0
输入空格。
你需要对于给定的按键组合,给出该组合对应的文本。
输入在一行中给出数个字符的按键组合(例如 999
表示按3次9
),每个字符的按键组合之间用空格间隔,最后一个输入法组合之后以换行结束。输入数据至少包括一个字符的按键组合,且输入总长度不超过500个字符。
在一行中输出该按键组合对应的文本。
#include
#include
char str[503],ret[10][10] = {"0 ","1,.?!","2ABC","3DEF","4GHI","5JKL","6MNO","7PQRS","8TUV","9WXYZ"};//打表行为
int cnt = 0;
signed main(){
gets(str);//最后一个以换行结束,不是EOF,所以不能用scanf
for(int i = 0;str[i];i++){
if(str[i] == str[i + 1]) cnt++;//与上一次相等,继续统计
else if(str[i] != ' ')//遇到' '停止统计
printf("%c",ret[str[i] - '0'][cnt % strlen(ret[str[i] - '0'])]);//后面那个%防止cnt过大爆数组
cnt = 0;//动态清零的好习惯
}
}