c语言编程题

871 阅读5分钟

1.求1000以内的完数
它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。

#include <stdio.h>

int main() {
    printf("求1000以内的完数\n");
    int i, j, sum, yin;
    for(i=2; i<1000; i++) {
        sum = 0;
        yin = i;
        for (j=1; j<i; j++) {
            if(yin%j==0){
                sum = sum + j;
            }
        }
        if (sum == yin) {
            printf("%d\n", yin);
        }
    }
    return 0;
}

2.求圆的周长和面积

#include <stdio.h>
#define PI 3.1415

float s(float r) {
	float s;
	s = PI*r*r;
	return s;
}
float c(float r) {
	float c;
	c = 2*PI*r;
	return c;
}

int main() {
   	float x;
	scanf("%f", &x);
	printf("面积是%f\n", s(x));
	printf("周长是%f\n", c(x));
	return 0;
}

3.输出9*9口诀。共9行9列,i控制行,j控制列

#include <stdio.h>

int main() {
	int i,j,result;
	for(i=1;i<10;i++){
		for(j=1;j<=i;j++){
			result=i*1;
			printf("%d*%d=%-3d",i,j,result);
		}
		printf("\n");
	}
	return 0;
}

4.生兔子问题
1 1 2 3 5 8 13 21 34 55...

// 递归
#include <stdio.h>
int Feibonacci(int n) {
	if (n==1 || n==2) {
		return 1;
	} else {
		return Feibonacci(n-1) + Feibonacci(n-2);
	}
}

int main() {
	int n=10; // 需要计算的月份
	printf("请输入计算的月数:");
	scanf("%d",&n);
	printf("%d个月的兔子总数为%d", n, Feibonacci(n));
	return 0;
}

5.判断是否为素数。
质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。

#include <stdio.h>

int main() {
	int i,k,n=7;
	for(i=2; i < sqrt(n); i++) {
		if(n%i == 0) break;
	}
	if(i>sqrt(n)) {
		printf("%d是素数", n);
	} else {
		printf("%d不是素数", n);
	}
	
	return 0;
}

6.求出100~200之间的素数

#include <stdio.h>

int main() {
	int i;
	for(int n=100; n<200; n++) {
		for(i=2; i<sqrt(n); i++) {
			if(n%i==0)break;
		}
		if(i>sqrt(n)){
			printf("%d是素数\n", n);
		} 
	}
	return 0;
}

7.有1,2,3,4这四个数字,能够组成互不相同的三位数。

#include <stdio.h>

int main() {
	int i,j,k,count=0;
	for(i=1; i<5; i++) 
		for(j=1; j<5; j++)
			for(k=1; k<5; k++) 
				if(i!=j&&i!=k&&j!=k) {
					if(count%5==0){
						printf("\n");
					}
					count++;
					printf("%d,%d,%-4d",i,j,k);
				}
	printf("一共有%d", count);
	return 0;
}

8.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

#include <stdio.h>

int main() {
	long int i,x,y,z;
	for(i=1; i< 100000; i++){
		x = sqrt(i+100);
		y = sqrt(i+268);
		if (x*x==i+100 && y*y==i+268) {
			printf("%d\n", i);
		}
	}
	return 0;
}

9.输入某年某月某日,判断这一天是一年的第几天

// 判断闰年,能够整除4,不能整除100,或者能够整除400
#include <stdio.h>

int days(int year, int month, int day) {
	int i,sumDays = 0,arr[]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	if ((year%4==0&&year%100!=0||year%400==0)&&month>2){
		sumDays=1;
	}
	for(i=0; i<month-1; i++) {
		sumDays = sumDays + arr[i];
	}
	if (day>0) {
		sumDays += day;
	}
	return sumDays;
}

int main() {
	printf("%d", days(2018, 2, 20));
	return 0;
}

10.输入三个整数x,y,z,请把这三个数由小到大输出。

#include <stdio.h>

int main() {
	int x=10,y=2, z=5, t;
	// printf("请输入x,y,z三个数");
	// scanf("%d,%d,%d",&x, &y, &z);
	if (x>y){
		t=x;x=y;y=t;
	}
	if (x>z){
		t=x; x=z; z=t;
	}
	if (y>z){
		t=y; y=z; z=t;
	}
	printf("从小到大排序为:%d,%d,%d", x, y, z);
	return 0;
}

11.打印杨辉三角

#include <stdio.h>

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

12.实现字符串反序输出

#include <stdio.h>

int main() {
	int i,j,k;
	char a[100]="abcdefgllllsss",c;
	k = strlen(a);
	for(i=0,j=k-1;i<k/2;i++,j--){
		c=a[i];
		a[i]=a[j];
		a[j]=c;
	}
	printf("%s",a);
	return 0;
}

13.从字符数组a中删除存放子c中的字符

#include <stdio.h>

int main() {
	int i,k;
	char a[100]="12jsanndjkammjsll",c='j';
	for(i=k=0;a[i]!='\0';i++){
		if(a[i]!=c) {
			a[k++]=a[i];
		}	
	} 
	a[k]='\0';
	printf("%s",a);
	return 0;
}

14.编写一个void sort(int *x,int n)实现将x数组中的n个数据从大到小排序

#include <stdio.h>

void sort(int *x, int n){
	int i,j,k,t;
	for(i=0; i<n;i++){
		k=i;
		for(j=i+1;j<n;j++){
			if(x[j]>x[k])k=j;
		}
		if(k!=i){
			t=x[i];
			x[i]=x[k];
			x[k]=t;
		}
	}
}

int main() {
	int a[]={9,10,8,3,4,7,8,7,0,99},i,k;
	k=sizeof(a)/sizeof(int);
	sort(a,k);
	for(i=0;i<k;i++){
		printf("%d,",a[i]);
	}
	return 0;
}

15.已知数组a中元素已经从小到大排序,实现插入x值后,数组仍然按从小到大进行排序

#include <stdio.h>

int main() {
	int a[]= {0, 2, 3, 5, 6, 9, 10};
	int x=4,i,j;
	i=j=sizeof(a)/sizeof(int);
	while(a[i-1]>x){
		a[i+1]=a[i];
		i--;
	}
	a[++i]=x;
	j++;
	for(i=0;i<j;i++){
		printf("%4d",a[i]);
	}
	return 0;
}

16.找出3位数里的水仙花
三位自幂数:水仙花数

#include <stdio.h>

int main() {
	int i,j,g,s,b,sum;
	for(i=100;i<=999;i++){
		b=i/100;
		s=(i%100)/10;
		g=i%10;
		sum=g*g*g+s*s*s+b*b*b;
		if(sum==i){
			printf("%d\n",i);
		}
	}
	return 0;
}