chaoscrow111
111非排序字符串
;;;
过滤字符串
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int isident( char s[] )
{
int i;
for ( i=0; s[i]!='\0'; i++ )
if ( s[i]!= '_' && !isalnum(s[i]))
return 0;
if (isdigit(s[0]))
return 0;
return 1;
}
int main()
{
char s[][10] = { "a%1", "a12", "aaa", "$ss", "1sss" };
int i, j=0;
for ( i=0; i<5; i++ )
if (isident(s[i]))
strcpy( s[j++], s[i] );
for (i=0; i<j; i++ )
printf("%s ", s[i]);
return 0;
}
最长字符串
#include<stdio.h>
#include<string.h>
int main()
{
int f(char a[][100],int n);
char a[5][100];
int i,n=5,s;
for(i=0;i<n;i++)
gets(a[i]);
s=f(a,n);
printf("%s",a[s]);
return 0;
}
int f(char a[][100],int n)
{
int i,s=strlen(a[0]),k;
for(i=1;i<n;i++)
{
if(s<strlen(a[i]))
k=i;
}
return k;
}
连接字符串
#include<stdio.h>
void strconn(char s1[],char s2[])
{
int i,j;
for(i=0;s1[i]!='\0';i++)
;
for(j=0;s2[j]!='\0';j++)
s1[i++]=s2[j];
s1[i]='\0';
}
int main()
{
char str1[100],str2[50];
scanf("%s%s",str1,str2);
strconn(str1,str2);
puts(str1);
return 0;
}
实参传来一个字符串
#include<stdio.h>
void fun(char arr[],int *l,int *d,int *s,int *o)
{
int i;
for(i=0;arr[i]!='\0';i++)
{
if(arr[i]>='A'&& arr[i]<='Z'||arr[i]>='a'&& arr[i]<='z')
(*l)++;
else if(arr[i]>='0'&& arr[i]<='9')
(*d)++;
else if (arr[i]==' ')
(*s)++;
else
(*o)++;
}
}
int main()
{
int letter=0,digit=0,space=0,other=0;
char str[100];
gets(str);
fun(str,&letter,&digit,&space,&other);
printf("letter:%d\ndigit:%d\nspace:%d\nothers:%d\n",letter,digit,space,other);
return 0;
}
求字符串长度
#include<stdio.h>
int len(char *p)
{
int n=0;
while (*(p++)!='\0')
n++;
return(n);
}
int main()
{
char str[20];
gets(str);
printf("%d",len(str));
return 0;
}
复制字符串
#include<stdio.h>
void copystr(char *p1,char *p2,int m){
int i= m-1,j=0;
for( ; *(p1+i)!='\0'; i++,j++ )
*(p2+j) = *(p1+i);
*(p2+j)='\0';
}
int main (){
int m;
char str1[20] = "abcdefg",str2[20];
scanf("%d",&m);
copystr(str1,str2,m);
printf("%s",str2);
return 0;
}
;;;
222数组与回文
;;;
一维实型数组
#include <stdio.h>
void sum(float a[],float n,float *max,float *min,float *aveg){
for(int i=0;i<n;i++){
if(*max<a[i]){
*max = a[i];
}
if(*min>a[i]){
*min = a[i];
}
*aveg = *aveg + a[i];
}
*aveg = *aveg / n;
}
int main(){
int n,i;
scanf("%d",&n);
float a[n],max,min,aveg;
for(i=0;i<n;i++){
scanf("%f",&a[i]);
}
max = min = a[0];
aveg = 0;
sum(a,n,&max,&min,&aveg);
printf("max:%.2f\n",max);
printf("min:%.2f\n",min);
printf("aveg:%.2f\n",aveg);
}
找出数组中的最小数
#include <stdio.h>
#include <math.h>
int qmin(double arr[], int n) {
int min=arr[0],j;
for(j=1; j<n; j++)
if(min>arr[j])
min=arr[j];
return min;
}
int main() {
double y[50];
int i;
for(i=0; i<50; i++)
y[i]=600*sin(i*0.16);
printf("min=%d",qmin(y,50));
return 0;
}
字符是否是回文
#include<stdio.h>
#include<string.h>
int fun(char *str)
{
int i, j, k = 1;
for(i=0,j=strlen(str)-1; i<j; i++,j--)
if (str[i]!= str[j])
return 0;
return 1;
}
int main() {
char str[100];
gets(str);
if (fun(str))
printf("yes");
else
printf("no");
return 0;
}
回文数
#include<stdio.h>
int hws(int x)
{int sum=0,t;
t=x;
while(x)
{sum=10*sum+x%10;
x/=10;}
if(sum==t) return 1;
else return 0;
}
int main() {
int i;
for(i=1;i<=300;i++)
if(hws(i)==1&&hws(i*i)==1)
printf("%d ",i);
}
;;;
333排序
;;;
字符串排序
#include<stdio.h>
#include<string.h>
void sort(char **p) {
int i,j;
char *temp;
for (i=0; i<4; i++) {
for (j=0; j<4-i; j++) {
if (strcmp(*(p+j),*(p+j+1))>0) {
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
}
int main() {
int i;
char str[5][20],*pstr[5];
for(i=0; i<5; i++)
{ pstr[i]=str[i];
scanf("%s",str[i]);
}
sort(pstr);
for (i=0; i<5; i++)
printf("%s ",pstr[i]);
return 0;
}
数组反序输出
#include<stdio.h>
#define N 10
void swap(int* a)
{
int temp = 0;
int i;
for (i=0; i<N/2; i++)
{
temp = *(a+i);
*(a+i) = *(a+N-1-i);
*(a+N-1-i) = temp;
}
}
int main()
{
int i, a[N] = { 0 };
for (i=0; i<N; i++)
scanf("%d", a+i);
swap(a);
for (i= 0; i<N; i++)
printf("%d ", *(a+i));
return 0;
指针方法排序
#include<stdio.h>
int main() {
void sort(int *x,int n);
int i,*p,a[10];
p=a;
for(; p<a+10; p++)
scanf("%d",p);
sort(a,10);
for(p=a; p<a+10; p++)
printf("%d ",*p);
return 0;
}
void sort(int *x,int n) {
int i,j,t;
for(i=0; i<n-1; i++)
for(j=0; j<n-i-1; j++)
if(*(x+j)<*(x+j+1))
{
t=*(x+j);
*(x+j)=*(x+j+1);
*(x+j+1)=t;
}
}
字符串按字母顺序输出
#include<stdio.h>
#include<string.h>
void fun(char *a[],int n)
{
int i, j;
char *t;
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
if( strcmp(*(a+i),*(a+j))>0)
{ t=*(a+i);
*(a+i)=*(a+j);
*(a+j)=t;
}
}
int main() {
char *a[] = { "Follow me", "BASIC", "Great Wall", "FORTRAN", "Computer design" };
int i;
fun(a,5);
for(i=0; i<5; i++)
printf("%s\n",a[i]);
return 0;
}
反序存放
#include <stdio.h>
#include <string.h>
void inverse(char str[] )
{
char t;
int i, j;
for (i=0, j= strlen(str); i<(strlen(str)/2); i++, j-- )
{
t = str[i];
str[i]=str[j-1];
str[j-1]=t;
}
}
int main()
{
char str[100];
scanf("%s", str);
inverse(str);
printf("%s\n", str);
return(0);
}
字符排序
#include <stdio.h>
#include <string.h>
void fun(char str[][10], int n)
{
int i, j;
char t[10];
for (i=0; i<9; i++ )
for (j=0; j<9-i; j++)
if ( strcmp(str[j], str[j+1])>0)
{
strcpy(t, str[j]);
strcpy(str[j], str[j+1]);
strcpy(str[j+1], t);
}
}
int main() {
char str[][10] = {"abc", "edf", "ghi", "jkl", "mno", "pqr", "stu", "vwx", "yz1", "234"};
int i;
fun(str, 10);
for (i=0; i<10; i++ )
printf("%s ", str[i]);
return 0;
}
冒泡
#include<stdio.h>
#define N 10
int main()
{ void sort(char str[]);
char str[N]={'1','a','3','x','v','6','w','8','9','z'};
int i;
sort(str);
for (i=0; i <N; i++)
printf("%c ",str[i]);
printf("\n");
return 0;
}
void sort(char str[]) {
int i,j;
char t;
for(j=0; j<N-1; j++)
for (i=0; i<N-j-1; i++)
if(str[i]>str[i+1]) {
t=str[i];
str[i]=str[i+1];
str[i+1]=t;
}
}
;;;
444杂项
;;;
找出不及格
#include <stdio.h>
int fun(float *p,int n) {
int i;
for(i=0; i<n; i++)
if(*(p+i)< 60)
return 1;
return 0;
}
int main() {
float a[][4]= {{60,70,80,90},{56,89,67,88},{34,78,90,66}};
int i,j;
for(i=0; i<3; i++)
if(fun(a[i],4)){
printf("No.%d score:",i);
for(j=0; j<4; j++)
printf("%.2f ",a[i][j]); //两个空格
printf("\n");
}
return 0;
}
两个整数的最大公约数和最小公倍数
#include <stdio.h>
int main()
{
int hcf(int,int);
int lcd(int,int);
int u,v,h,l;
scanf("%d %d",&u,&v);
h=hcf(u,v);
printf("hcf=%d\n",h);
l=lcd(u,v);
printf("lcd=%d",l);
return 0;
}
int hcf(int m,int n) //最大公约数
{
int t;
t=m%n;
while(t)
{
m=n;
n=t;
t=m%n;
}
return n;
}
int lcd(int m,int n) //最小公倍数
{
int s;
s=m*n/hcf(m,n);
return s;
}
年、月、日
#include <stdio.h>
int main()
{
int sum_day(int month,int day);
int leap(int year);
int year,month,day,days;
scanf("%d %d %d",&year,&month,&day);
days=sum_day(month,day);
if(leap(year)&&month>=3)
days=days+1;
printf("%d",days);
return 0;
}
int sum_day(int month,int day) {
int day_tab[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
int i;
for (i=1; i <month; i++)
day+=day_tab[i];
return(day);
}
int leap(int year) {
int leap;
leap=year%4==0&&year%100!=0||year%400==0;
return(leap);
}
判断一个整数是否既是5又是7的整倍数
#include<stdio.h>
int main() {
int fun(int);
int a;
scanf("%d",&a);
if(fun(a))
printf("yes");
else
printf("no");
return 0;
}
int fun(int x) {
if(x%5==0&&x%7==0)
return 1;
else
return 0;
}
多项式
#include <stdio.h>
int dxs(int x, int n) {
if (n==0)
return 1;
else if (n==1)
return x;
else
return (2*n-1)*dxs(x,n-1)-(n-1)*dxs(x,n-2)/n;
}
int main()
{
int n, x;
scanf("%d %d",&n, &x);
printf("%d",dxs(x, n));
return 0;
}
;;;
555函数与阶乘
;;;
编写函数int fun删除a指向
#include<stdio.h>
int fun(char a[])
{
int i,j=0,n=0;
for(i=0;a[i]!='\0';i++)
if(a[i]>='0'&&a[i]<='9')
n++;
else
a[j++]=a[i];
a[j]='\0';
return n;
}
int main()
{
char a[100];
int n,i;
gets(a);
n=fun(a);
printf("%d:%s",n,a);
return 0;
}
通用函数avernum
#include<stdio.h>
#include<math.h>
double avernum(double x[],int n) {
int i;
double aver,s=0;
for(i=0; i<n; i++)
s=s+x[i];
aver=s/100;
return aver;
}
int main() {
double x[100],aver,m=0;
int i;
for(i=0; i<100; i++)
x[i]=200*(cos(i*0.875));
aver=avernum(x,100);
printf("aver=%.6lf\n",aver);
for(i=0; i<100; i++)
if(x[i]>aver)
m++;
printf("m=%.6lf",m);
return 0;
}
字符比较函数
#include<stdio.h>
int strcmp(char *p,char *q) {
for(;*p==*q;p++,q++)
if (*p=='\0') return 0;
return (*p-*q);
}
int main() {
int m;
char str1[20],str2[20];
scanf("%s",str1);
scanf("%s",str2);
m=strcmp(str1,str2);
printf("%d",m);
return 0;
}
阶乘
#include<stdio.h>
int fun(int i) {
if(i==1)
return 1;
else
return fun(i-1)*i;
}
int main() {
int i,sum=0;
for(i=1; i<=10; i++)
sum+=fun(i);
printf("%d",sum);
return 0;
}
递归法求n!
#include<stdio.h>
double fun(int n){
if(n==0 || n==1) return 1;
else
return n*fun(n-1);
}
int main() {
int n;
scanf("%d",&n);
printf("%.0lf",fun(n));
return 0;
}
;;;