C语言常考编程总结

说明语句
数据的输入
数据的处理
数据的输出

1.将一个整数转换为字符串。

#include <stdio.h>
void tranvers(int n) 
{if (n/10!=0)
   tranvers(n/10);
   printf("%c",n%10+'0');
}
int main(){
	int n;
	scanf("%d",&n);
	if(n<0)
	{
		printf("-");
		n=-n;
	}
	tranvers(n);
	return 0;
	
}

2.在全校1000人中,募捐,当总数达到十万时结束,统计此时的捐款人数,以及平均每人捐款的数目.

#include <stdio.h>
#define sum 100000s
int main(){
	float total,amount,aver;
	int i;
	for(i=1,total=0;i<=1000;i++)
	{
		scanf("%f",&amount);
		total=total+amount;
		if(total>=sum)break;
	}
	if(i<1000) aver=total/i;
	else aver=total/(i-1);
	printf("num=%d\naver=%10.2f",i,aver);
	return 0;
}

3.输出三角形的面积。 思路:先设出三条边长,还有s,还有面积area 然后数据的输入,数据的处理最后输出。

在这里插入图片描述

#include <stdio.h>
#include <math.h>
int main(){
	float a,b,c,s,area;
	scanf("%f%f%f",&a,&b,&c); 
	s=(a+b+c)/2;
	if((a+b>c)&&(a+c>b)&&(b+c>a))
	{
		area=sqrt(s*(s-a)*(s-b)*(s-c));
		printf("面积为%.2f",area);
	}
	else{
		printf("error");
	}
	return 0;
} 

4.计算近似值并输出累加到某项小于10的-5次方为止

在这里插入图片描述

π方/6=1/1方+1/2方+1/3方+1/n方
1.先把需要的变量设出来。
2.sum为总值,必须先给sum设初值 ;s为每一步的值;pi为最终值
3.每一步的值s=1.0/(i*i)
4.总值sum=sum+s
5.用do while 循环完成在s小于10的-5次方时退出
6输出

#include <stdio.h>
#include <math.h>
int main()
{
	float sum,s,pi;
	int i;
	sum=0.0;
	i=1;
	do{
		s=1.0/(i*i);
		sum+=s;
		i++;
	}while(s>1e-5);![在这里插入图片描述](https://img-blog.csdnimg.cn/20210419152800686.png)

	pi=sqrt(sum*6);
	printf("%f",pi);
	return 0;
}

5.求π的近似值,要求某项小于1e-6时为止。

在这里插入图片描述

π/2=1+1/3+1×2/3×5+1×2×3/3×5×7+······
思路:1.先设出来变量i,j,n,m,pi;
2.进行赋初值;
mnj初值为1,i和pi初值为0
3.进入循环
pi=pi+n/m
n/m为每次的值
4,输出值

int main(){
	float i,j,fz,fm,pi;
	fz=1.0;fm=1.0;j=1.0;i=0.0;pi=0.0;
	while(fz/fm>=1e-6){
		pi=pi+fz/fm;
		i++;
		j+=2;
		fz=fz*i;
		fm=fm*j;
	}
	printf("%f",2*pi);
	return 0;
}  

6.有一个3×4的矩阵,要求写出其中最大的元素,以及其所在的行号和列号,最大值保存到max中,行号x,列号y

打擂台法==
思路
设变量初始化数组,利用冒泡排序逐个进行比较。
然后输出。

int main(){
	int i,j,max,x=0,y=0;
	int a[3][4]={{1,2,3,4},{9,8,7,6},{4,8,6,1}};
	max=a[0][0];
	for(i=0;i<3;i++)
	 for(j=0;j<4;j++)
	  if(a[i][j]>max){
	  	max=a[i][j];
	  	x=i;
	  	y=j;
	  } 
	  printf("max=%d,x=%d,y=%d",max,x,y);
	  return 0;
} 

7.斐波那契数列。输出前二十项,并按每行四个数的格式输出。 特点1.第一个数为1,第二个数为一。 2.从第三个数起,该数等于前两个数之和。

思路:先定义出这个数组,然后利用for循环进行循环,因为前两项一样为1,所以定义的时候把他俩定义出来!根据特点可以设f(i)=f(i-1)+f(i-2)

#include <stdio.h>
int main(){
	int i,f[20]={1,1};
	 for(i=2;i<20;i++)
	   f[i]=f[i-1]+f[i-2];
	 for(i=0;i<20;i++)
	  {printf("%12d",f[i]);
	  if((i+1)%4==0)printf("\n");
	  }
} 

8.编写函数判断一个整数是否为素数,是返回1,不是返回0.并调用函数输出100-999之间的个位数字为7的所有的素数之和。

思路:判断素数的标准是看是否是除自身外还有别的因数有的话不是素数,


int inprimer(int x)
{
	int k,flag=1;
	for(k=2;k<x;k++)
	 if(x%k==0)
	 {
	 	flag=0;
	 	break;
	 }
	 return flag;
 } 
 int main(){
 	int i,s;
 	for(i=100;i<1000;i++)
 	 if(i%10==7){
 	 	if(inprimer)
 	 	s=s+i;
	  }
	printf("%d",s);
	return 0;
 }

9.从键盘接收一个字符串,计算长度并输出。(不用strlen)

方法1用指针用while


void main(){
	char s[81],*p;
	int len=0;
	p=s;
	scanf("%s",p);
	while((*p++)!='\0')
	 {len++;
	  } 
	printf("%d",len);
}

方法2用for循环

int main()
{
char s[100];
int i;
scanf("%s",s);//输入字符串。bai
for(i=0;s[i]!='\0';i++);//循环体为空,退出时i值即为字符串长度。
printf("%d\n",i);//输出。
return 0;
}

10.从键盘任意输入a,b,c的值,编程计算并输出一元二次方程ax方+bx+c=0的根

int main(){
	double a,b,c,disc,x1,x2,p,q;
	scanf("a=%f,b=%f,c=%f",&a,&b,&c);
	disc=b*b-4*a*c;
	if(disc<0)
	 printf("无实根");
	else
	 {
	  p=-b/(2.0*a);
	  q=sqrt(disc)/(2.0*a);
	  x1=p+q;
	  x2=p-q;
	  printf("x1=%f,x2=%f",x1,x2);
	  } 
	  return 0;
} 

11.判断是否是闰年

{
    if((x%4==0)&&(x%100!=0)||(x%400==0))
       return 1;
    else
       return 0;
}

12.完数一个数如果恰好等于他的因子之和,这个数就称为完数。 找出1000以内的所有完数!

思路:1找出i的所有因子
2将因子求和
3.判断和是否与i相等

int main(){
	int s,i,k;
	for(i=2;i<1000;i++)
	 {
	 	s=0;
	 for(k=1;k<i;k++)
	 {
	 	if(i%k==0)
	 	s=s+k;
	 }
	 if(s==i)
	 printf("%12d",i);
     }
	return 0} 

13.同构数:一个数恰好等于它的平方数的右端,这个数称为同构数。如5的平方是25,5是25中的右端的数,5就是同构数。 找出1-1000之间的所有同构数

思路:

int main()
{
   int i, k,t;
   for(i=1;i<=1000;i++){
     t=i;
	 k=i*i;
	 while(t)
	 {
     if(k%10!=t%10)
	    break;
     else {
      k=k/10;t=t/10;}
     }
     if(t==0) printf("%d %d\n",i,i*i);
    }
    return 0;
}

14.水仙花数:一个三位数其各位数字立方和等于其本身。

int main(){
	int i,a,b,c;
	for(i=100;i<1000;i++)
	 {
	 	a=i/100;
	 	b=(i/10)%10;
	 	c=i%10;
		if((a*a*a+b*b*b+c*c*c)==i)
		printf("%d\n",i);
	 }
	 return 0;
} 

15构造数据,求2+22+222+…。不断把一个数扩大十倍后加上一个数的过程。

即:m=m10+a
如求:2+22+222+…
第一项:a=2,m=m
10+2,所以m的初值需要为0,
第二项:a=22,m=m*10+a=20+2=22

所以:s=s+m即可

int main()
{
	int s=0,m=0,a,n,i;
	a=2;
	n=4;
	for(i=1;i<=n;i++)
	{
		m=m*10+a;
		s=s+m;
	}
	printf("%d",s);
	return 0;
}

16.逆序输出与回文数 把一个数逆序输出

int main(){
	int s=0,n;
	scanf("%d",&n);
	while(n!=0)
	{
		s=s*10+n%10;
		n=n/10;
	}
	printf("%d",s);
	return 0;
}

回文数实际上和把一个数字逆序输出是一样的,过程一样
判断一个整数是否为回文数。
回文数:正数与倒数一样。如:12321就是一个回文数。
编程思路:
1.分解整数,构造逆序数。
2.如果逆序数与原数相同,则是回文数

#include <stdio.h>
int main(){
	int s=0,n,a;
	scanf("%d",&n);
	a=n;\\把n的值赋给a,因为后面的话n的值会发生改变。 
	while(n!=0)
	{
		s=s*10+n%10;
		n=n/10;
	}
	if(s==a)
	 printf("是回文数");
	else
	 printf("不是回文数") ;
	return 0;
}

16.编写一个简单的计算器程序,可根据输入的运算符,对两个整数进行加减乘除或求余运算,且保证除法和求余的分母为零。当运算符为+、-、*、/、%号时,输出相应的运算结果。若输入的是非法符号则输出ERROR。

int main(){
	int a,b;
	char c;
	scanf("%d%c%d",&a,&c,&b);
	switch(c){
		case '+':printf("%d",a+b);break;
		case '-':printf("%d",a-b);break;
		case '*':printf("%d",a*b);break;
		case '/':if(b!=0){
			printf("%d",a/b);
			break;
		}
		case '%':if(b!=0){
			printf("%d",a%b);
			break;
		}
		default:printf("ERROR");break;
		return 0;
	}
	
} 

17.判断是否是完全平方数。(若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数。)

方法一

#include <stdio.h>
#include <math.h>
int issquare(int n);
int main(){
	int n,p;
	scanf("%d",&n);
	if(p=issquare(n))
	   printf("%d是完全平方数",n);
	else
	   printf("%d不是完全平方数",n);
	return 0;
}
int issquare(int n){
	int m;
	m=(int)sqrt(n);
	if(m*m==n)
	  return n;
	else
	  return 0;
}

方法二

#include <stdio.h>

int main()
{
	int i,n,flag;
	scanf("%d",&n);
	flag=0;
	for(i=1;i<n/2;i++)
	{
		if(i*i==n)
		  flag=1;
	 } 
	 if(flag==1)
	   printf("%d是",n);
	 else
	   printf("不是"); 
	return 0;
}

18.由键盘输入全班30人的成绩,按成绩由高到低排序,并输出排序后的成绩。

1.在主函数中输入30人的成绩,输出排序后的成绩。
2.子函数中对30个程序排序。
冒泡排序

#include <stdio.h>
#define N 5
int main(){
	int s[N],i;
	void sort(int a[]);
	for(i=0;i<N;i++)
	  scanf("%d",&s[i]);
	sort(s);
	for(i=0;i<N;i++)
	  printf("%4d",s[i]);
	return 0;
} 
void sort(int a[])
{
	int i,j,t;
	for(i=0;i<N-1;i++)
	for(j=0;j<N-1-i;j++)
	  if(a[j]<a[j+1])
	  {
	  	t=a[j];
	  	a[j]=a[j+1];
	  	a[j+1]=t;
	  }
}

19.写程序验证哥德巴赫猜想。任何一个大于二的偶数总能表示为两个素数之和。

官方答案:

#include <stdio.h>
#include <math.h>
int prime(int p);
int main(){
	int n,p1,p2;
	scanf("%d",&n);
	for(p1=3;p1<=n/2;p1+=2)
	{
		p2=n-p1;
		if(prime(p1)&&prime(p2))
		{
			printf("%d=%d+%d",n,p1,p2);
			break;
		}
	}
	if(p1>n/2)
	    printf("不符合"); 
} 
int prime(int p)
{
	int e,i;
	e=sqrt(p);
	for (i=2;i<=e;i++)
	 if(p%i==0)break;
	if(i>e)  return 1;
	else return 0; 
 } 

自己好理解的答案:

#include <stdio.h>
#include <math.h>
int prime(int p);
int main(){
	int n,p1,p2;
	scanf("%d",&n);
	for(p1=3;p1<=n/2;p1+=2)
	{
		p2=n-p1;
		if(prime(p1)&&prime(p2))
		{
			printf("%d=%d+%d",n,p1,p2);
			break;
		}
	}
	if(p1>n/2)
	    printf("不符合"); 
} 
int prime(int p)
{
	int i,flag=1;
	for(i=2;i<p;i++)
	{
	 if(p%i==0)
	  flag=0;
    }
    return flag;
 } 


判断是否是素数
方法1

int prime(int p)
{
	int e,i;
	e=sqrt(p);
	for (i=2;i<=e;i++)
	 if(p%i==0)break;
	if(i>e)  return 1;
	else return 0; 
 } 
#include <stdio.h>
#include <math.h>
void main(){
    int m;  // 输入的整数 
    int i;  // 循环次数
    int k;  // m 的平方根 

    printf("输入一个整数:");
    scanf("%d",&m);

    // 求平方根,注意sqrt()的参数为 double 类型,这里要强制转换m的类型 
    k=(int)sqrt( (double)m );
    for(i=2;i<=k;i++)
        if(m%i==0)
            break;

    // 如果完成所有循环,那么m为素数
    // 注意最后一次循环,会执行i++,此时 i=k+1,所以有i>k 
    if(i>k)
        printf("%d是素数。\n",m);
    else
        printf("%d不是素数。\n",m);

    return 0;
}

方法2

#include <stdio.h>

int main(){
    int a=0;  // 素数的个数
    int num=0;  // 输入的整数

    printf("输入一个整数:");
    scanf("%d",&num);

    for(int i=2;i<num;i++){
        if(num%i==0){
            a++;  // 素数个数加1
        }
    }

    if(a==0){
        printf("%d是素数。\n", num);
    }else{
        printf("%d不是素数。\n", num);
    }

    return 0;
}

20.编写程序求两个给定正整数的最大公约数和最小公倍数

int main(){
	int a,b,num1,num2,temp;
	scanf("%d%d",&num1,&num2);
    if(num1<num2){
    	temp=num1;num1=num2;num2=temp;
	}	
	a=num1;b=num2;
	while(b!=0){
		temp=a%b;
		a=b;
		b=temp;
	}
	printf("最大公约数%d",a);
	printf("最小公倍数%d",num1*num2/a);
	return 0;
} 

这里运用了辗转相除法:以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数

int maxgy(int x,int y)
{
  int i,t;
  if(x<y){
   t=x;x=y;y=t;
}
for(i=y;i>=1;i--)
{  if(x%i==0&&y%i==0)
    break;
}
return i;
}

21把一个字符串逆序输出

#include <stdio.h>
#include <string.h>
int main(){
	int i,j,k,t;//i和j是,k是长度,t是中间变量;
	char a[20];
	scanf("%s",a);//也可以用get(a) 
	j=strlen(a)-1;
	k=strlen(a)/2;
	for(i=0;i<k;i++,j--)
	{
		t=a[i];a[i]=a[j];a[j]=t;
	}
	printf("%s",a);//可以用put(a) 
	return 0;
} 

22.计算字符串的长度,不能用strlen函数

1 普通方式。

int main(){
	char s[81];
	int i,p=0;
	gets(s);
	for(i=0;s[i]!='\0';i++)
	  p++;
	printf("%d",i);
} 

2 递归

int strlength(char *p)
{
	if(p==NULL || *p=='\0')
	  return 0;
	else 
	  return 1+strlength(p+1);
}

3 非递归

编写函数
int strlength(char *p)
{
	int k=0;
	while(*p!='\0')
	{
		k++;p++;
	}
	return k;
}
也可以这样
int fun(char *p){
	int i,k;
	for(i=0;p[i]!='\0';i++)
	  k++;
	return k;
}

23.连接两个字符串

void mystrcat(char a1[],char a2[]){
	int i=0,j=0;
	while(a1[i]!='\0') i++;
	while(a2[j]!='\0'){
		a1[i]=a2[j];
		i++;j++;
	} 
	a1[i]='\0';
}
int main(){
	char a[10],b[10];
	gets(a);
	gets(b);
	mystrcat(a,b);
	printf("%s",a);
	return 0;
}

int fun(char *p,char *q){
	while(*p!='\0')
	  p++;
	while(*q!='\0')
	  *p++=*q++;
	*p='\0';
	return *p;
} 
int main(){
	char a[81],b[81];
	gets(a);
	gets(b);
	fun(a,b);
	puts(a);
	return 0;
}

24.字符串复制

void MyStrcpy(char *dstStr,char *srcStr)
{
  while (*srcStr !='\0'){
    *dstStr=*srcStr;
    srcStr++;
    dstStr++;
  }
  *dstStr='\0';
}

25.求矩阵中最大元素的值,以及其所在的行号和列号

int main(){
	int i,j,max,hang,lie,t;
	int s[3][4]={{1,2,3,4},{4,5,6,7},{9,6,5,2}};
	max=s[0][0];hang=0;lie=0;
	for(i=0;i<3;i++)
	for(j=0;j<4;j++)
	if(s[i][j]>max){
		max=s[i][j];hang=i;lie=j;
	}
	printf("max=%d,hang=%d,lie=%d",max,hang,lie);
}

26.有三个字符串,找出其中最大的

int main(){
	char str[3][10];
	char max[10];
	int i;
	for(i=0;i<3;i++) gets(str[i]);
	strcpy(max,str[0]);
	for(i=1;i<3;i++)
	   if(strcmp(max,str[i])<0)
	   strcpy(max,str[i]);
	printf("%s",max);
}

27.选择法排序

n个数进行n-1轮比较,
a[i]和a[j]比较

int main(){
	int i,j;
	float a[10],t;
	printf("输入十个数:");
	for(i=0;i<10;i++)
	   scanf("%f",&a[i]);
	for(i=0;i<9;i++)
	  for(j=i+1;j<=9;j++)
	  if(a[i]<a[j])
	  {
	  	t=a[i];
	  	a[i]=a[j];
	  	a[j]=t;
	   } 
	   for(j=0;j<10;j++)
	     printf("%6.2f",a[j]);
	   return 0;
}

28冒泡排序

n个数进行n-1轮比较,第j轮进行n-i次两两比较

int main(){
	int i,j;
	float a[10],t;
	for(i=0;i<10;i++)
	  scanf("%f",&a[i]);
	for(i=0;i<9;i++)
	  for(j=0;j<9-i;j++)
	   if(a[j]<a[j+1])
	   {
	   	t=a[i];
	   	a[j]=a[j+1];
	   	a[j+1]=t;
		} 
	for(j=0;j<10;j++)
	  printf("%6.2f",a[j]);
	  return 0;
}

29.函数int Search(int a[N],int x,int y)的功能是查找并替换一维数组a中部分元素的值(把数组a中的所有x值换为y ) ,返回被替换的元素个数。

int search(int a[N],int x,int y)
{
int n=0,i;
for(i=0;i<N;i++)
if(a[i]==x)
{
a[i]=y;
n++;
}
return n;
}

30.二维数组行列互换。(行列转置)

b[j][i]=b[i][j]==

int main(){
	int a[2][3]={{1,2,3},{4,5,6}};
	int b[3][2],i,j;
	for(i=0;i<=1;i++)
	{
		for(j=0;j<=2;j++)
		{
			printf("%3d",a[i][j]);
			b[j][i]=a[i][j];
		}
		printf("\n");
	}
	for(i=0;i<=2;i++)
	{
	for(j=0;j<=1;j++)
	printf("%3d",b[i][j]);
	printf("\n");
}
}

31.输入一个字符,分别统计字母,数字,空格及其他字符出现的次数。

int main(){
	char ch;
	int i=0,j=0,k=0,l=0,p=0;
	while((ch=getchar())!='\n'){
		if(ch>='0'&&ch<='9')
		  i++;
		else if(ch>='a'&&ch<='z')
		  k++;
		else if(ch>='A'&&ch<='Z')
		  j++;
		else if(ch==' ')
		  l++;
		else
		  p++;
	}
	printf("数字%d,小写%d,大写%d,空格%d,其他%d",i,j,k,l,p);
	return 0;
} 

32.统计字符串中数字出现的个数

int main(){
	char s[80];
	int a[10]={0},i;
	gets(s);
	while(s[i])
	{
		if(s[i]>='0'&&s[i]<='9') a[s[i]-'0']++;//那个位置的数加一;
		i++;
	}
	for(i=0;i<10;i++)
	  printf("%d出现个数:%d\n",i,a[i]);
	return 0;
}

33一个球从100米的高度自由下落,每次落地后反跳回原来高度的一半,在落下,求它的第十次落地时,经过多少米,第十次反弹多高?

第一次落地经过100米,计作a1;

第二次落地经过(100/2)*2=100米,计作a2;

第三次落地经过(100/4)*2=50米,计作a3;

第四次落地经过(100/8)*2=25米,计作a4;

int main(){
	double sn=100,hn=sn/2;
	int n;
	for(n=2;n<=10;n++){
		sn=sn+2*hn;
		hn=hn/2;
	} 
	printf("共经过:%f",sn);
	printf("反弹:%f",hn);
	return 0; 
} 

34.四个字符串函数

strlen:计算字符的长度,遇到 ‘\0’结束。
sizeof:计算字符串占用内存大小。包括结尾的’\0’
strcpy: 字符串拷贝函数
strcat:字符串连接函数
strcmp:字符串比较函数

35.输出五个人成绩等级

int main()
{
  float str[5];
  int i,n;
  for(i=0;i<=4;i++)
    scanf("%f",&str[i]) ;
  for(i=0;i<=4;i++)
  {
  	n=str[i]/10; 
  	switch(n)
	  {
  		case 9:printf("A");break;
  		case 8:printf("B");break;
  		case 7:printf("C");break;
  		case 6:printf("D");break;
  		case 5: case 4: case 3: case 2: case 1:printf("E");break;
	  }
  }
  return 0;
} 

36.输入不超过80个字符,统计有几个单词。

思路:有一个空格就相当于有一个单词了

方法1


int main(){
	int i,num=0,word=0;
	char c;
	char ch[80];
	//scanf("%s",ch);此处不能用scanf输入,用scanf的话空格代表结束,所以输入一个字符串的时候最好用gets 
	//printf("%s",ch);
	gets(ch);
	for(i=0;(c=ch[i])!='\0';i++)
	 if(c==' ') word=0;
	 else if(word==0)
	 {
	 	word=1;
	 	num++;
	 }
	 printf("%d",num);
	 return 0;
} 

方法二:自己总结的。比较简单。

#include <stdio.h>
#include <string.h>
int main()
{
	char s[81];
	gets(s);
	int i,k=0;
	for(i=0;i<strlen(s);i++)
	{
		if(s[i]==' ') k++;
	}
	printf("%d",k+1);
	return 0;
} 

37.编写函数下半三角元素的值乘以n

void fun(int a[M][N],int n)
{
  int i,j;
  for(i=0;i<M;i++)
    for(j=0;j<=i;j++)
     a[i][j]=a[i][j]*n;
}

38.输出杨辉三角形的前10行

分三大板块:
1.因为第一列和每一行的最后一列都为1,所以先为他们赋值1。
2.然后每一行的中间部分进行赋值a[i][j]=a[i-1][j-1]+a[i-1][j]
3.最后进行输出操作即可


int main(){
	int a[10][10]={0},i,j;
	for(i=0;i<10;i++)
	{
		a[i][0]=1;
		a[i][i]=1;
	 } 
	 for(i=2;i<10;i++)
	   for(j=0;j<=i;j++)
	 {
	 	a[i][j]=a[i-1][j-1]+a[i-1][j];
	 }
	 for(i=0;i<10;i++){
	 	for(j=0;j<=i;j++)
	 	  printf("%5d",a[i][j]);
	    printf("\n");
	 }
	 return 0;
} 

39.编写函数,输入一个字符串,要求输入的这个字符串的每两个字符之间加入一个空格。

思路:用for循环先扩大数组为原来的两倍,再赋值,然后为小一个的赋值为 空格

int main(){
	char str[80];
	void ss(char str[]);
	scanf("%s",str);
	ss(str);
	printf("%s",str) ;
} 
void ss(char str[])
{
	int i;
	for(i=strlen(str);i>0;i--){
		str[i*2]=str[i];
		str[i*2-1]=' ';
	}
}

40.编写函数,输入一个字符串,要求输出的这个字符串每个字符,每两个字符之间隔开一个空格。如输入ABC,输出A B C。

int main(){
	int fun(char str[]);
	char a[81];
	printf("输入字符串:"); 
	gets(a);
	printf("输出原字符串:"); 
	puts(a);
	fun(a);
	printf("输出改变后字符串:"); 
	puts(a);
	return 0;
}
int fun(char str[])
{
	int i;
	for(i=strlen(str);i>0;i--)
	  {
	  	str[2*i]=str[i];
	  	str[2*i-1]=' '; 
	  }  
}

41.编写函数,将字符串的下标为奇数的字母转换为大写。

void fun(char *ss)
{
int i,n;
n=strlen(ss);
for(i=1;i<n;i+=2)
if(ss[i]>= 'a'&& ss[i]='z')
ss[i]=ss[i]-32;
}

42.编写函数fun功能是:求斐波那契数列大于t的最小的一个数,结果由函数返回。其中斐波那契为:F(0)=0,F(1)=1,F(2)=F(n-1)+F(n-2).

int fun(int n){
	int f0=0,f1=1,f2=1;
	while(f2<n){
		f0=f1;
		f1=f2;
		f2=f0+f1;
	}
	return f2;
}
int main(){
	int n;
	scanf("%d",&n);
	printf("%d",fun(n));
}
int fun(int n){
	int f3=0,f1=1,f2=1;
	while(f3<n){
		f3=f2+f1;
		f1=f2;
		f2=f3;
	}
	return f3;
}
int main(){
	int n;
	scanf("%d",&n);
	printf("%d",fun(n));
}

43.编写程序,输入年月日,计算该日期在本年中是第几天,需要考虑闰年。用结构体变量完成。

45.将十进制转换为二进制

void to_b(unsigned long n);
int main()
{
unsigned long num;
scanf("%ul",&num);
to_b(num);
putchar('\n');
return 0;
}
void to_b(unsigned long n)
{
unsigned long r;
r=n%2;
if(n>=2)
to_b(n/2);
putchar(r?'1':'0');//把数字转换为字符0或1
return ;
}
void main()
{
    int c[32],i=0,n;
    scanf("%d", &n) ; //输入待转换整数n
    do {
        c[i++]=n%2;
        n/=2;
    } while(n!=0) ;
 
    for(i--;i>=0;i--)
        printf("%d",c[i] );
    printf("\n");
}

46.输入一个数,要求按原来排序的规律插入数组中。

int main(){
	int a[11]={1,4,6,9,13,16,19,28,40,100};
	int i,j,temp1,temp2,end,num;
	for(i=0;i<=9;i++)
	  printf("%5d",a[i]);
	  printf("\n");
	scanf("%d",&num);
	end=a[9];
	if(num>end)
	  a[10]=num;
	else
	  {
	  	for(i=0;i<10;i++)
	    {
	    	if(a[i]>num){
	    		temp1=a[i];
	    	    a[i]=num;	
	    	for(j=i+1;j<=10;j++){
	    		temp2=a[j];
	    		a[j]=temp1;
	    		temp1=temp2;
			}
			 break;
			}
		}
	}	
	for(i=0;i<=10;i++)
	  printf("%5d",a[i]);
	  printf("\n");
    return 0;
} 

47.现有十个城市名及其春夏秋冬四个季节的平均温度值编写程序,定义合适的结构体,输入十个城市名和四季温度计,算各个城市的全年平均温度。并按照平均温度从低到高的顺序输出城市名,四季温度及全年平均温度。

struct aa
{
char city[10];
float spring;
float summer;
float autumn;
float winter;
float avgtem;
};
int main()
{
   struct aa x[10],t;
   int i,j;
   for(i=0;i<10;i++)
       scanf("%s%f%f%f%f",x[i].city,&x[i].spring,&x[i].summer,&x[i].autumn,&x[i].winter);
   for(i=0;i<10;i++)
       x[i].avgtem=(x[i].spring+x[i].summer+x[i].autumn+x[i].winter)/4;
   for(i=0;i<9;i++)
       for(j=0;j<9-i;j++){
         if(x[j].avgtem>x[j+1].avgtem)
         {t=x[j];x[j]=x[j+1];x[j+1]=t;}
   }
   for(i=0;i<10;i++)
       printf("%s,%f,%f,%f,%f,%f\n",x[i].city,x[i].spring,x[i].summer,x[i].autumn,x[i].winter,x[i].avgtem);
   return 0;
}


48.统计候选人得票数。假设有3名候选人,每次输入一个得票人的名字,输入“0”结束,要求最后输出每个人的得票总数。


struct person{
	char name[20];
	int count;
};
int main(){
	struct person leader[3]={
		"hu",0,"li",0,"ma",0
	};
	int i;
	char leader_name[20];
	do{
		scanf("%s",leader_name);
		if(strcmp(leader_name,"0")==0) break;
		else
		  for(i=0;i<3;i++){
		  	if(strcmp(leader_name,leader[i].name)==0) leader[i].count++;
		  }
	}while(1);
	for(i=0;i<3;i++)
	  printf("%10s:%10d\n",leader[i].name,leader[i].count);
	return 0;
}

49.递归实现斐波那契数列的第三十项

int main(){
	int fun( int n);
	printf("%d",fun(30));
	return 0;
}
int fun( int n){
	if(n==1||n==2)
	  return 1;
	else
	  return fun(n-1)+fun(n-2);
}

50.编写一个函数,实现两个字符串的比较。当字符串1等于字符串2时,返回0;当字符串1≠字符串二时,返回两者第一个不同字符的ASCII码的差值。

方法1.

int main()
{
 int strcmpq(char *p1,char *p2);
 int m;
 char str1[20],str2[20],*p1,*p2;
 printf("input two strings:\n");
 scanf("%s",str1);
 scanf("%s",str2);
 p1=str1;
 p2=str2;
 m=strcmpq(p1,p2);
 printf("result:%d\n",m);
 return 0;
}
int strcmpq(char *p1,char *p2) //两个字符串比较函数
{ 
  int i;
  i=0;
  while(*(p1+i)==*(p2+i))
  if (*(p1+i++)=='\0') return 0; //相等时返回结果 0
  return(*(p1+i)-*(p2+i)); //不等时返回结果为第一个不等字符 ASCII 码的差值
}

我感觉方法23比较好理解。
方法二.

int main(){
	char a[81],b[81];
	gets(a);
	gets(b);
	int i=0,resu;
	while((a[i]==b[i])&&(a[i]!='\0')) i++;
	if(a[i]=='\0'&&b[i]=='\0')
	  resu=0;
	else
	  resu=a[i]-b[i];
	printf("%d",resu);
	return 0;
} 

方法三.

int main(){
	char a[81],b[81];
	int resu;
	gets(a);
	gets(b);
	resu=fun(a,b);
	printf("%d",resu);
	return 0;
} 
int fun(char a[],char b[])
{
	int i=0;
	while((a[i]==b[i])&&(a[i]!='\0')) i++;
	if(a[i]=='\0'&&b[i]=='\0')
	  return 0;
	else
	  return a[i]-b[i];
}

51.编写程序,删除一维数组中重复出现的元素。

依次比较,将重复的放在最后。将前面的赋给另一个数组。输出。

int main()
{
int i,j,a[6],b[6],n,t;
int *pa=a,*pb=b;
for(i=0;i<6;i++)
    scanf("%d",pa+i);
n=0;
for(i=0;i<6-n;i++) // 将数组中的每个元素分别与其后面各元素比较
    for(j=1;j<6-i-n;j++) //扫描当前元素后的所有元素
        if(*(pa+i)==*(pa+i+j)) //如果当前元素与其后面的某个元素相等
        {
           t=*(pa+i+j); //将与当前元素相等的那个元素同最后一个元素交换
           *(pa+i+j)=*(pa+5-n);
		   *(pa+5-n)=t;
           n++; //删除元素数加 1
       }
for(i=0;i<6-n;i++) //将数组 a 中剩余元素复制到数组 b 中
    *(pb+i)=*(pa+i);
for(i=0;i<6-n;i++)
    printf("%d ",*(pb+i));
return 0;
}

52.两个乒乓球队进行比赛,各出三人。甲队为a,b,c,三人,乙对为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

int main()
{
char i,j,k;/*i 是 a 的对手,j 是 b 的对手,k 是 c 的对手*/
for(i='x';i<='z';i++)
    for(j='x';j<='z';j++)
    {
       if(i!=j)
          for(k='x';k<='z';k++)
          {
              if(i!=k && j!=k)
              { if(i!='x' && k!='x' && k!='z')
                    printf("order id a--%c\tb--%c\tc--%c\n",i,j,k);
              }
          }
   }   
  return 0;
}

53.将一个正整数分解质因数。例如:输入 90,打印出 90=233*5。

int main()
{
	int n,i;//i是那个数的因数
	scanf("%d",&n);
	printf("%d=",n);
	i=2;
	while(n!=i)//当n=i时退出,因为这时是n的最后一个因数了。
	{
		if(n%i==0)
		{
			printf("%d*",i);
			n=n/i;
			}
		else
		    i++;
		
	}
	printf("%d",n);//这里把最后一个因数输出。
	return 0;
} 
  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘风破浪PL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值