C程序算法题一

1.输入一整数n,判断是否为素数

#include<stdio.h>

int main(){
    
    
    int i,n;
    scanf("%d", &n);
    for(i=2;i<n;i++){
    
    
        if(n%i==0){
    
    
            break;
        }
    }
    if(i>=n){
    
    
        printf("%d is a prime\n", n);
    }else{
    
    
        printf("%d is not a prime\n", n);
    }
    return 0;
}

2.字符串逆序

方法一:

#include<stdio.h>
#include<string.h>

int main(){
    
    
    char *p1,*p2,c,s[50];
    scanf("%s", s);//也可写成 gets(s);
    p1=s;
    p2=s+strlen(s)-1;
    for(;p1<p2;p1++,p2--){
    
    
        c=*p1;
        *p1=*p2;
        *p2=c;
    }
    printf("The new string is %s\n", s);
    return 0;
}

方法二:

#include <stdio.h>
#include <string.h>
void main()
{
    
    
	char  s[80],t;
	int i,j;
	gets(s);
	j= strlen(s)-1;
	for(i=0; i<j; i++, j--){
    
     
		t=s[i];s[i]=s[j];s[j]=t;  
	}
	printf("The new string is %s\n", s);
}

方法三:

#include <stdio.h>
#include <string.h>
void main()
{
    
    
	char  s[80],t;
	int i,j;
	gets(s);
	j= strlen(s);
	for(i=0; i<j/2; i++){
    
     
		t=s[i];s[i]=s[j-1-i];s[j-1-i]=t;  
	}
	printf("The new string is %s\n", s);
}

3.判断字符串是否是回文

方法一:

#include<stdio.h>
#include<string.h>

int main(){
    
    
    char *p1,*p2,c,s[50];
    gets(s);
    p1=s;
    p2=s+strlen(s)-1;
    for(;p1<p2;p1++,p2--){
    
    
        if(*p1!=*p2){
    
    
            break;
        }
    }
    if(p1<p2){
    
    
        printf("%s 不是回文\n", s);
    }else{
    
    
        printf("%s 是回文\n", s);
    }
    return 0;
}

方法二:

#include <stdio.h>
#include <string.h>
void main()
{
    
    
	char  s[80];
	int i,j;
	gets(s);
	j= strlen(s)-1;
	for(i=0; i<j; i++, j--){
    
    
		if( s[i]!=s[j] ){
    
    
			break;
		} 
	} 
	if( i<j )	printf("该字符串不回文");
	else	printf("该字符串回文");
}

方法三:

#include <stdio.h>
#include <string.h>
void main()
{
    
    
	char  s[80];
	int i,j;
	gets(s);
	j= strlen(s);
	for(i=0; i<j/2; i++){
    
    
		if( s[i]!=s[j-1-i] ){
    
    
			break;
		}
	}
	if( i<j/2 )	printf("该字符串不回文");
	else	printf("该字符串回文");
}

4.求任意两整数的最大公约数

#include <stdio.h>

int main(){
    
    
    int a,b,t;
	scanf("%d%d", &a, &b);
	while(b!=0){
    
    
		t=a%b;
		a=b;
		b=t;
	}
	printf("最大公约数为%d\n", a);
    return 0;
}

tips:辗转相除法:

  1. 如果b等于0,计算结束,a就是那个最大公约数
  2. 否则,计算a除以b的余数,让a等于b,而b等于那个余数
  3. 回到第一步

5."起泡法"对输入的字符串降序排列

#include <stdio.h>
#include <string.h>

void sort(char *s);

int main( )
{
    
    
	char str[20];
	printf("请输入字符串:\n");
	scanf("%s", str);
	sort(str);
	printf("排序结果:\n");
	puts(str );
	return 0;
}

void sort(char *s)
{
    
    	int i, j, n;
	char c;
	n=strlen(s);
	for(i=0; i<n-1; i++)
		for(j=i; j<n-i-1; j++)
			if(s[j]<s[j+1])	c=s[j], s[j]=s[j+1], s[j+1]=c;
}


6.统计给定数据中0到9数字个数

#include<stdio.h>

int main()
{
    
    
	int i,data[20]={
    
    0,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,3} ;
	int count[10]={
    
    0} ;
	for(i=0; i<20; i++){
    
    
		count[data[i]]+=1;
	} 
	for(i=0; i<10; i++){
    
    
		printf("数字%d的个数:%d\n",i,count[i]);
	}
	return 0;
}

7.在十个数中删除指定数据

#include<stdio.h>

int main(){
    
    
	int a[10],x,*p,*q;
		printf("请输入十个整数:\n");
		for(p=a;p<a+10;++p){
    
    
			scanf("%d",p);
		}
		printf("请输入待删数据:");
		scanf("%d",&x); 
		for(p=q=a;p<a+10;p++){
    
    
			if(x!=*p){
    
    
				*q++=*p;
			}
		}	
		if(q==p){
    
    
			printf("查无此数!\n");
		}
		else
		{
    
    
			for(p=a;p<q;){
    
    
				printf("%5d",*p++);
			}
			printf("\n");
		}
	return 0;
}

8.字符串拼接

#include <string.h>
#include <stdio.h>

void main( )
{
    
    	
	char  str1[80]="good",str2[]="morning";
	int  i, j;
	for(i=strlen(str1),j=0;str2[j]!='\0'; i++, j++){
    
    
		str1[i]=str2[j];
	}
	str1[i]='\0';
	printf("string1=%s",str1);
}

运行结果:str1=goodmorning

9.从键盘输入10个数存到数组a中,求10个数的最大值及其位置

#include <stdio.h>

void main( )
{
    
    	
	int i,j,position;
	float max,a[10];
	for(i=0;i<10;i++){
    
    
		scanf("%f", &a[i]);
	}
	max=a[0];
	for(j=0;j<10;j++){
    
    
		if(a[j]>max){
    
    
			max=a[j];
			position=j;
		} 
	}
	printf("max=%f,position=%d", max, position);
}

10.将数组中的数据从小到大排序

#include <stdio.h>

void main( )
{
    
    	
	int a[10]={
    
    3,54,1,53,21,5,95,65,4,6};
	int i,j,t;
	int len=sizeof(a)/sizeof(a[0]);
	for(i=0;i<len;i++){
    
    
		for(j=i+1;j<len+1;j++){
    
    
			if(a[i]>a[j]){
    
    
				t=a[i];
				a[i]=a[j];
				a[j]=t;
			}
		}
	}
	for(i=0;i<len;i++){
    
    
		printf("%3d", a[i]);
	}
}

11.计算字符串长度

#include <stdio.h>

void main(){
    
    
	int fun(char *p);
	char str[80];
	gets(str);
	printf("LEN=%d\n", fun(str));
}

int fun(char *p){
    
    
	int n=0;
	while(*p++){
    
    
		n++;
	}
	return(n);
}

12.编程计算1!+2!+3!+…+20!

#include <stdio.h>

void main(){
    
    
	float sum=0,mut=1;
	int n;
	for(n=1;n<=20;n++){
    
    
		mut*=n;
		sum+=mut;
	}
	printf("1!+2!+3!+...+20!=%e\n", sum);
}

13.统计由键盘输入的任一字符串中字母、数字和空格的个数

#include <stdio.h>

int main(){
    
    
	char ch;
	int letters=0,digit=0,space=0;
	while((ch=getchar())!='\n'){
    
    
		if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){
    
    
			letters++;
		}else if(ch>'0'&&ch<'9'){
    
    
			digit++;
		}else if(ch==' '){
    
    
			space++;
		}
	}
	printf("letters=%d,digit=%d,space=%d", letters, digit, space);
	return 0;
}

14.找出1—100之间的素数,并统计素数的个数

#include <stdio.h>
#include <math.h>

int main(){
    
    
	int m,k,i,count=0;
	for(m=1;m<=100;m+=2){
    
    //剔除所有的偶数(但是2也是素数) 
		k=sqrt(m);
		for(i=2;i<=k;i++){
    
    //判断一个数是不是素数,用这个数分别从除2到开平方这个数,不能被整除则是素数 
			if(m%i==0){
    
    
				break;
			} 
		}
		if(i>=k+1){
    
    
			printf("%3d", m);
			count+=1;
		}
		if(count%10==0) printf("\n");
	}
	printf("\ntotal number is %d", count);
	return 0;
}

15.从键盘输入10个数,找出最大值与最小值,并计算它们的平均值

#include <stdio.h>
#include <math.h>

int main(){
    
    
	float a[10],max,min,sum,avg;
	int i;
	int len=sizeof(a)/sizeof(a[0]);
	for(i=0;i<len;i++){
    
    
		scanf("%f", &a[i]);
	}
	max=min=sum=a[0];
	for(i=1;i<len;i++){
    
    
		if(a[i]>max){
    
    
			max=a[i];
		}
		if(a[i]<min){
    
    
			min=a[i];
		}
		sum+=a[i];
	}
	avg=sum/len;
	printf("max=%f,min=%f,avg=%f\n", max, min, avg);
	return 0;
}

16.找出所有三位数中的水仙花数(各位数字的立方和恰好是本数)

#include <stdio.h>
void main()
{
    
    
	int x,y,z,m;
	for(m=100;m<1000;m++){
    
    
		x=m/100;
		y=m/10-x*10;
		z=m%10;
		if(m==x*x*x+y*y*y+z*z*z){
    
    
			printf("%4d", m);
		}
	}
}

17.求Fibonacci数列的前20项,每行输出10个数

#include <stdio.h>

int f(int n);

int main(){
    
    
	int i;
	for(i=1;i<=20;i++){
    
    
		printf("%6d", f(i));
		if(i%10==0){
    
    
			printf("\n");
		}
	}
	return 0;
}

int f(int n){
    
    
	int t;
	if(n==1||n==2){
    
    
		t=1;
	}else{
    
    
		t=f(n-1)+f(n-2);
	}
	return t;
} 

18.写一个函数求两个整数的最小公倍数,函数原型为:int gb(int m, int n),在主函数中从键盘输入两个整数,然后调用gb()函数,并输出结果

#include <stdio.h>

int gb(int m,int n);

int main(){
    
    
    int m,n;
    scanf("%d%d", &m, &n);
    printf("%d", gb(m,n));
    return 0;
}

int gb(int m,int n){
    
    
	int i;
	for(i=n; ;i++){
    
    
		if(i%n==0&&i%m==0){
    
    
			break;
		}
	}
	return i;
}

19.打印杨辉三角形前10行,使用二维数组和循环语句实现

tips:杨辉三角形的一条重要规律:三角形的两条斜边都是数字1,而其余的数都等于它肩上的两个数字相加,因此:

  • 某项的值=前一行、前一列的值 + 前一行、同一列的值

  • 第零列、行列相等(也就是两条斜边)值为1

  • 列必须小于等于行 ,否则换行


#include <stdio.h>
#define N 10//宏指令,可根据要求更改 
void main()
{
    
    
	int a[N][N],i,j;
	for(i=0;i<N;i++){
    
    
		for(j=0;j<=i;j++){
    
    //列必须小于等于行 ,否则换行 
		 	//第零列、行列相等(也就是两条斜边)值为1 
	 		if(i==j||j==0){
    
    
	 			a[i][j]=1;
			}else{
    
    
			 	a[i][j]=a[i-1][j-1]+a[i-1][j];//前一行、前一列 + 前一行、同一列 
			}
			printf("%6d", a[i][j]);
		}
		printf("\n"); 
	}
}

20.将二维数组行列元素互换,存在另一个数组中,并输出

#include<stdio.h> 

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

21.用冒泡法对10个数排序(从大到小)

#include <stdio.h>

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

22.输入任意三个实数,按从大到小的顺序输出。要求用指针变量作函数参数

#include<stdio.h>

void exchange(int *q1, int *q2, int *q3);
void swap(int *pt1,int *pt2);

int main()
{
    
    
	int a,b,c,*p1,*p2,*p3;
	scanf("%d,%d,%d",&a,&b,&c);
	p1=&a;p2=&b;p3=&c;
	exchange(p1,p2,p3);
	printf("\n%d,%d,%d\n",a,b,c);
}

void exchange(int *q1, int *q2, int *q3)
{
    
    
	if(*q1<*q2) swap(q1,q2);
	if(*q1<*q3) swap(q1,q3);
	if(*q2<*q3) swap(q2,q3);
}

void swap(int *pt1,int *pt2)
{
    
    
	int temp;
	temp=*pt1; *pt1=*pt2; *pt2=temp;
}

23.设有一个已按从大到小的顺序排好的数列存放在一维数组中,现输入一个数,仍按原来的排序规律将其插入到数组中插入排序

#include<stdio.h>

int main()
{
    
    
	int i,j,num;
	int count=0,array[11]={
    
    1,4,6,9,19,23,54,56,57,190};
	printf("原数组:"); 
	for(i=0;i<10;i++)
	{
    
    
		printf("%d ",array[i]);
	}
	printf("\n请输入要插入的数据:"); 
	scanf("%d",&num);
	for(i=0;i<10;i++)
	{
    
    
		//如果插入数小于数组中的这个数,令这个数及其后面的所有数全部后移一位 
		if(num<array[i])   
		{
    
    
			count = i;
			for(j=0;j<10-count;j++)
			{
    
    
				array[10-j]=array[9-j];
			}
			break;
		}		
	} 
	//如果count与初始值一样,即插入数比数组所有数都要大,则放在数组的末尾
	if(count == 0)
	{
    
    
		array[10]=num;
	}
	//否则将插入数代替比它的数的位置 
	else
	{
    
    
		array[count]=num;	
	}
	//数组遍历输出
	printf("插入后:"); 
	for(i=0;i<11;i++)
	{
    
    
		printf("%d ",array[i]);
	}
	return 0;
}

24.设计函数实现将一个字符串中小写字母转化为大写字母

#include<stdio.h>
#include<ctype.h>

void Convert(char *str){
    
    
	while(*str!='\0'){
    
    
		if(islower(*str)){
    
    
			*str=toupper(*str);
		}
		str++;
	}
} 

int main(){
    
    
	char str[]="124asdfAJLJAsdj4Nr";
	Convert(str);
	printf("%s\n", str);
	return 0;
}

25.计算
在这里插入图片描述

的值并输出(设n=20)递归思想

#include<stdio.h>

long factorial(int n){
    
    
	if(n==1){
    
    
		return n;
	}else{
    
    
		return n*factorial(n-1);
	}
}

int main(){
    
    
	double sum=1.0;
	int i;
	for(i=1;i<=20;i++){
    
    
		sum+=1/(double)factorial(i);
	}
	printf("%lf\n", sum);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44337241/article/details/114701935