C语言编程题目及答案分享——持续更新

1.输入一个球的半径,计算这个球的表面积和体积,输出计算结果

#include<stdio.h>
const float PI=3.1415926;
float mianji(float r){
	float s;
	s = 4*PI*r*r;
	return s;
}
float tiji(float r){
	float s;
	s = 4*PI*r*r*r/3;
	return s;
}

int main(){
	float r,mianji_result,tiji_result;
	printf("请输入球的半径\n");
	scanf("%f",&r);
	mianji_result= mianji(r);
	tiji_result= tiji(r);
	printf("球的面积为:%f\n",mianji_result);
	printf("球的体积为:%f\n",tiji_result);
}

2.输入一个三角形的三条边长,判断这三条边能否构成直角三角形,输出计算结果

#include<stdio.h>
int main(){
	printf("请输入三角形三条边长:");
	int a,b,c;
	scanf("%d,%d,%d",&a,&b,&c);
	if((a+b>c) && (a+c>b) && (b+c)>a){
		if((a*a == b*b + c*c) || (b*b == a*a +c*c) || (c*c == a*a + b*b)) {
			printf("可以构成直角三角形");
		}else{
			printf("不能构成直角三角形");
		}
	}
	else {
		printf("不能构成三角形");
	}
	return 0;
}

3.根据公式pi/4 = 1-1/3+1/5-1/7+1/9-1/11+…,计算pi的近似值,当最后一项的绝对值小于0.000001为止

注意别丢精度

#include<stdio.h>
#include<math.h>
int main(){
	int m=1;
	float f = 1.0f;
	double sum=0;
	while((f/m)>0.000001 || (f/m)<-0.000001){
		sum = sum +f*1.0/m;
		m = m+2;
		f = -f;
	}
	printf("pi的近似值为:%f",sum*4);
}

4.键盘输入20个学生的姓名和总分,按总分从大到小的顺序输出这20个学生的姓名和总分

#include<stdio.h>
#include<stdlib.h>
#define n 3
//const int  n=3;
struct student{
	char name[10];
	int score;
};

int main()
{
	struct student a[n];
	struct student buf;
	int i,j;
	for(i=0;i<n;i++)
	{
		scanf("%s%d",&a[i].name,&a[i].score);
	}
	for(i=0;i<n;i++){
		for(j=0;j<n-1-i;j++){
			if(a[j].score<a[j+1].score){
				buf = a[j];
				a[j] = a[j+1];
				a[j+1] = buf;
			}
		}
	}
	for(i=0;i<n;i++){
		printf("%s\t%d\n",a[i].name,a[i].score);
	}
	return 0;
}

5.一个数只能被1和它本身整除的数叫素数。设计一个函数可以判断一个数是否是素数,并用此函数输出2到100以内的所有素数

#include<stdio.h>
int judge(int num){
	int f=1;
	for(int i=2;i<num;i++){
		if(num%i==0){
			f=0;
			break;
		}
	}
	return f;
}

int main(){
	int i;
	printf("输出2-1000之内的素数\n");
	for(i=2;i<=1000;i++){
		if(judge(i)==1){
			printf("%d\n",i);
		}
	}
//	return 0;
}

6.输入一个圆的半径r,输出这个圆的直径、周长、面积计算结果

#include<stdio.h>
#define pi 3.1415926

float diameter(float r) //直径 
{
	float diameter ;
	diameter= 2*r;
	return diameter;
}

float perimeter(float r) //周长
{
	float perimeter;
	perimeter = 2*pi*r;
	return perimeter;
}

float area(float r) //面积
{
	float area;
	area = pi*r*r;
	return area;
}

int main(){
	printf("请输入一个圆的半径:");
	float r,diameter_result,perimeter_result,area_result;
	scanf("%f",&r);
	diameter_result = diameter(r);
	 perimeter_result = perimeter(r);
	 area_result = area(r);
	printf("直径为:%f",diameter_result);
	printf("周长为:%f",perimeter_result);
	printf("面积为:%f",area_result);
	return 0;
}

7.判断输入的正整数是否既是5又是7的整倍数。如果是,输出“yes”;如果不是输出“no”

#include<stdio.h>
int main(){
	int num;
	printf("请输入一个正整数");
	scanf("%d",&num);
	while(num<=0){
		printf("输入错误,重新输入一个正整数:\n");
		scanf("%d",&num);
	}
	if(num%5==0 && num%7==0){
		printf("yes");
	}else{
		printf("no");
	}
	return 0;
}

8.键盘输入一个正整数,计算1+1/(1+2)+1/(1+2+3)+…+1/(1+2+3+…+n)的值

#include<stdio.h>
int main(){
	printf("请输入一个正整数:");
	int num;
	int i;
	int j=1;
	float  sum=1;
	scanf("%d",&num);
	for(i=0;i<=num;i++){
		j = j+i;
		sum = sum+1.0/j;
	}
	printf("%f",sum);
	return 0;
}

9.键盘输入一个4行3列的矩阵,输出这个矩阵以及它的转置矩阵

//4*3矩阵的输出,并且输出转置矩阵
#include<stdio.h>
int const m = 4;
int const n = 3;
int main()
{
	int a[m][n];
	int a1[n][m];
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++){
			scanf("%d",&a[i][j]);
		}
	}
	printf("\n");
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++)
		{
			printf("%d\t",a[i][j]);
		}
		printf("\n");
	}
	printf("\n");
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			a1[i][j] = a[j][i];
		}
	}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			printf("%d\t",a1[i][j]);
		}
		printf("\n");
	}
	return 0;
} 

10.设计一个判别素数的函数,在主函数中输入两个正整数,判断这两数之和是否是素数

//设计一个判别素数的函数,在主函数中输入两个正整数,判断两数之和是否是素数
#include<stdio.h>
int panduan(int num){
	int f=1;
	for(int i=2;i<num;i++){
		if(num%i==0){
			f=0;
			break;
		}
	}
	return f;
}


int main(){
	printf("输入两个素数:\n");
	int m,n,num;
	scanf("%d%d",&m,&n);
	if((m>0 && m%1==0) && (n>0 && n%1==0)){
		num = m+n;
		if(panduan(num)==1){
			printf("%d是素数",num);
		}else if(panduan(num) ==0){
			printf("%d不是素数",num);
		}
	}else{
		printf("输入不合理");
	}
	return 0;
} 

11.输入梯形的上底、下底和高,计算梯形的面积,输出计算结果

//输入梯形的上底、下底和高,计算梯形的面积,输出计算结果
#include<stdio.h>
int main(){
	int a,b,c;
	printf("梯形面积公式:(上底+下底)*高/2\n");
	printf("输入上底:\n");
	scanf("%d",&a);
	printf("输入下底:\n");
	scanf("%d",&b);
	printf("输入高:\n");
	scanf("%d",&c);
	
	float f;
	f=(a+b)*c/2.0;
	printf("梯形的面积为:\n");
	printf("%.2f",f);
}

12.首先输入一个点A的平面坐标,再输入一个矩阵的左上角和右下角平面坐标,判断这个点A在矩阵的内部、外部还是边上,输出计算结果

//首先输入一个点A的平面坐标,再输入一个矩阵的左上角和右下角平面坐标,判断这个点A在矩阵的内部、外部还是边上,输出计算结果
#include<stdio.h>

int judge(int a,int b,int c,int d,int e,int f){
	int result;
	if(a<e&&a>c&&b>f&&b<d){
		result = 1;
	}else if ( ((a==c||a==e)&&b>=f&&b<=d) ||  ((b==d||b==f)&&a>=c&&a<=e) ){
		result = 2;
	}else {
		result = 3;
	}
	return result;
}

int main(){
	printf("输入点坐标与矩阵左上角、右下角坐标,判断点的位置\n");
	printf("\n");
	int a,b;
	printf("输入点A的坐标位置:\n");
	scanf("%d%d",&a,&b);
	printf("\n");
	int c,d;
	printf("输入矩阵左上角位置:\n");
	scanf("%d%d",&c,&d);
	printf("\n");
	int e,f; 
	printf("输入矩阵右下角位置:\n");
	scanf("%d%d",&e,&f);
	printf("\n");
	int result;
	result = judge(a,b,c,d,e,f);
	if(result == 1){
		printf("在矩阵内部\n");
	}else if (result == 2){
		printf("在矩阵边上\n");
	}else if (result == 3){
		printf("在矩阵外部\n");
	}
}

13.输入1980年1月1日至2099年12月31日之间的任一年月日,求该日期为该年的第几天

//输入1980年1月1日至2099年12月31日之间的任一年月日,求该日期为该年的第几天
//能被4整除而不能被100整除的、能被400整除的年份都是闰年
#include<stdio.h>
int main(){
	printf("请输入1980年1月1日至2099年12月31日之间的任一年月日,来判断是该年的第几天\n");
	int year,month,day,sum,result;
	scanf("%d%d%d",&year,&month,&day);
	if(year<1980 || year>2099){
		printf("输入不合规,请输入1980年1月1日至2099年12月31日之间的任一年月日");
	}else if(year>=1980 || year<=2099){
		int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
		//判断闰年
		if((year%4==0&&year%100!=0) || (year%400)==0){
			days[1]=29;
		}
		for(int i=0;i<month-1;i++){
			sum=sum+days[i];
		}
		result = sum+day;
	}
	
	printf("\n");
	
	printf("你输入的天数为这一年中的第%d天",result);
	
	return 0;
	
}

14.键盘输入两个3行3列的矩阵,输出这两个矩阵的和矩阵

//键盘输入两个3行3列的矩阵,输出这两个矩阵的和矩阵
#include<stdio.h>

int main(){
	int a[3][3];
	int a1[3][3];
	int he[3][3];
	
	//输入第一个矩阵
	printf("输入第一个3*3的矩阵:\n");
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			scanf("%d",&a[i][j]);
		}
	} 
	
	printf("\n");
	
	//输入第二个矩阵
	printf("输入第二个3*3的矩阵:\n");
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			scanf("%d",&a1[i][j]);
		}
	} 
	
	printf("\n");
	
	//输入和矩阵
	printf("和矩阵为:\n");
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			he[i][j] = a[i][j] + a1[i][j];
			printf("%d ",he[i][j]);
		}
		printf("\n");
	} 
	
	return 0;
}

15.求a的平方根的迭代公式为下图,设计一自定义求平方根函数,并用此函数输出1到100的平方根

(题目中有一处条件未给,该判断应误差在1e-5或1e-6这个范围)(这里要注意判断abs和fabs函数的区别,abs返回整数,fabs返回浮点型)
在这里插入图片描述

//求1-100以内的数字的平方根

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

double determine(int a)
{
	double x=1,x1;
	do
	{
		x1=x;
		x=(x1+a/x1)/2.0;
	}while(fabs(x-x1)>1E-6);
//	printf("%.3f",x);
	return x;
}

int main()
{
	double num;
	printf("输出1-100以内的数字的平方根\n");
	for (int i=1;i<=100;i++){
		num = determine(i);
		printf("%.3f ",num);
	}
	return 0;
} 

16. 1千克=2.2046226磅,输入一物体的质量(以千克为单位),计算该物体有多少磅,输出计算结果

//1千克=2.2046226磅,输入一物体的质量(以千克为单位),计算该物体有多少磅,输出计算结果
#include<stdio.h>
int main()
{
	printf("1千克=2.2046226磅,根据这个换算条件,输入物体的质量(以千克为单位),计算物体有多少磅\n");
	int num;
	float result;
	printf("\n");
	printf("请输入物体质量:\n");
	scanf("%d",&num);
	result = num * 2.2046226;
	printf("\n");
	printf("该物体有%f磅\n",result);
	return 0;
}

17.输入一个日期,计算该日期是该年度第几天,输出计算结果

//输入一个日期,计算该日期是该年度第几天,输出计算结果
#include<stdio.h>
int main()
{
	printf("输入一个日期,判断该日期是该年度的第几天\n");
	printf("\n");
	int year,month,day;
	int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
	scanf("%d%d%d",&year,&month,&day);
	if( (year%4==0 && year%100!=0) || (year%400==0)){
		days[1]=29;
		printf("闰年\n");
	}
	int sum = 0;
	
	for(int i=0;i<month-1;i++){
		sum = sum+days[i];
	}
	
	int result;
	
	result = sum + day;
	
	printf("\n");
	
	printf("该日期是该年度的第%d天",result);
	
	return 0;
	
}

18. 标准差公式如下图,公式中N 为样本个数,xi为样本值,μ为样本均值。输入20个数,计算这20个数的标准差。输出计算结果

在这里插入图片描述

//计算标准差
#include<stdio.h>
#include<math.h>
int const N = 10;
int main(){
	printf("输入%d个数:\n",N);
	int i,x,a[N];
	int sum = 0;
	for(int i=0;i<N;i++){
		scanf("%d",&a[i]);
		sum = sum + a[i];
	}
	printf("数据总和为:%d\n",sum);
	float avg;
	avg = 1.0*sum/N;
	float sum1 = 0;
	printf("数据平均值为:%f\n",avg);
	for(int i=0;i<N;i++){
		sum1 = sum1 + (a[i]-avg)*(a[i]-avg);
		printf("sum1=%f\n",sum1);
	}
	printf("sum1=%f\n:",sum1);
	float result;
	result = sqrt(sum1/N);
	printf("标准差为:%f",result);
	return 0;
}  

19. 今重复输入一个正数,按照升序规律把这个数插入到数组中,输出这个数组的所有数,直到输入一个负数停止

#include <stdio.h>

int main() {
    int arr[100]; // 声明一个长度为100的数组
    int num,j;
    int i=0;

    // 循环输入正数并插入数组中
    for (i = 0; ; i++) {
        scanf("%d", &num);
        if (num < 0) {
            break; // 输入负数停止循环
        }
        // 从后往前遍历数组,找到第一个比当前输入数小的位置
        for (j = i; j > 0 && arr[j-1] > num; j--) {
            arr[j] = arr[j-1];
        }
        arr[j] = num; // 插入当前输入数
    }

    // 输出数组中的所有数
    for (i = 0; i < j; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

20. 设计一个函数可以将一个10进制的数转换为2进制字符串,并利用此函数计算从键盘输入的3个10进制正数,输出对应2进制数

//设计一个函数可以将一个10进制的数转换成2进制的字符串,并利用此函数计算从
//键盘输入的3个10进制的正数,输出对应2进制数 
#include<stdio.h>
#include<string.h>
#define N 20
void Convert(char *buf,int n,int data){
	int temp = data;
	int i,j,mid;
	char ctemp;
	for(i=0;i<n;i++){
		if(temp%2){
			buf[i] = '1';
		}else{
			buf[i] = '0';
		}
		temp = temp/2;
		if(!temp){
			break;
		}
	}
	//将字符串逆序
	mid = N/2;
	i = n;
	for(j=0;j<mid;j++,i--){
		ctemp = buf[j];
		buf[j] = buf[i];
		buf[i] = ctemp;
	} 
}

int main(){
	int i,data;
	char buf[N+1];
	buf[N+1] = '\0';
	for(i=0;i<3;i++){
		printf("请输入要转换的正整数:\n");
		scanf("%d",&data);
		while(data<=0){
			printf("请输入要转换的正确的正整数:\n");
			scanf("%d",&data);
		}
		memset(buf,'0',N+1);//每次运行对buf进行初始化
		printf("%s\n",buf);
		Convert(buf,N,data);
		printf("正整数%d转换成二进制的字符串为:%s\n",data,buf); 
	}
	return 0;
}

21.从键盘输入四个数,求四个数的总和以及平均数

//从键盘输入四个数,求四个数的总和以及平均数
#include<stdio.h>
int main(){
	int a[4];
	int num = 0;
	printf("输入四个数:\n");
	for(int i=0;i<4;i++){
		scanf("%d",&a[i]);
	}
	for(int i=0;i<4;i++){
		num = num + a[i];
	}
	int avg_num;
	avg_num = num/4;
	printf("四个数的总和为%d\n",num);
	printf("四个数的平均数为%d\n",avg_num);
	
	return 0;
} 

22. 判断方程有几个根

//判断方程有几个根
#include<stdio.h>
#include<math.h>
int main(){
	float a,b,c,x1,x2,m,p,q;
	printf("输入三个值:\n");
	scanf("%f,%f,%f",&a,&b,&c);
	if(a==0&&b==0&&c==0){
		printf("x为任意值\n");
	}else if(a==0&&b!=0){
		x1 = x2 = -c/b;
		printf("x1=x2=%f\n",x1);
		printf("方程有一个根\n");
	}else{
		m = b*b-4*a*c;
		if(m>=0){
			x1 = (-b+sqrt(m))/(2*a);
			x2 = (-b-sqrt(m))/(2*a);
			printf("x1:%f;x2:%f\n",x1,x2);
			printf("方程有两个根");
		}else{
		p = -b/(2*a);
		q = sqrt(-m)/(2*a);
		printf("x1=%f+%fi\n",p,q);
		printf("x2=%f-%fi\n",p,q);
		printf("方程没有实根,有两个虚根");
		}
	}
} 

23.根据公式求pai的近似值

在这里插入图片描述

//根据公式求PI的近似值
#include<stdio.h>

double countPI(double esp){
	double num =1;
	double s = 0;
	double m = 1;
	do{
		s = s + num;
		num = num*m/(2*m+1);
		m++;
	}while(num>esp);
	return (2*s);
}

int main(){
	printf("请输入一个误差值:\n");
	double esp,num;
	scanf("%f",&esp);
	num = countPI(esp);
	printf("PI的近似值为:%f\n",num);
	return 0;
} 

24.求3*3矩阵每行最大最小值

//求3*3矩阵每行的最大值最小值
#include<stdio.h>
int const m=3;
int const n=3;

int sort_bubble(int a1[],int length,int i){
	int temp;
	for(int m=0;m<length;m++){
		for(int n=0;n<length -m-1;n++){
			if(a1[n]<a1[n-1]){
				temp = a1[n-1];
				a1[n-1] = a1[n];
				a1[n] = temp;
			}
		}
	}
	printf("第%d行最小值为%d;最大值为%d\n",i+1,a1[0],a1[length-1]);
}

int main(){
	int a[n][m];
	int a1[n];
	printf("输入一个%d*%d的矩阵:\n",m,n);
	for(int i=0;i<m;i++){
		for(int j=0;j<n;j++){
			scanf("%d",&a[i][j]);
		}
	}
	
	for(int i=0;i<m;i++){
		for(int j=0;j<n;j++){
			a1[j] = a[i][j];
		}
		sort_bubble(a1,m,i);
	}
	
}

 

25.求1-1000之间的完数

//求1-1000之间的完数
//例如6=1+2+3,6就是一个完数
#include<stdio.h>
int main(){
	printf("输出1-1000之间的完数:\n");
	for(int i=1;i<=1000;i++){
		int num=0;
		for(int j=1;j<i;j++){
			if(i%j==0){
				num += j;
			}
		}
		if(num == i){
			printf("%d是完数\n",num);
		}
	}
	return 0; 
}

26.按照题目要求从键盘输入乘车的起步价以及行车公里数,输出车费

某市有三种不同起步价的出租车,它们的起步价和计费分别为:
起步价4元,3km以外,1.2元/km
起步价5元,3km以外,1.5元/km
起步价6元,3km以外,1.8元/km

27.N为样本个数,输入20个数,计算这20个数的标准差,输出计算结果(重复)

28.输入20个不同的正整数,计算奇数偶数个数,依次将偶数、奇数按照升序输出

#include<stdio.h>
void PX(int a[], int sz) {	
	for (int i = 0;i < sz - 1;i++) {
		for (int j = 0;j < sz - 1 - i;j++) {
			if (a[j] > a[j + 1]) {
				int t = a[j];
				a[j] = a[j + 1];
				a[j + 1] = t;
			}
		}
	}
}
int main() {
	int a[10];
	int sz = sizeof(a) / sizeof(a[0]);  
	int j = 0, o = 0;
	printf("请输入10个整数:");
	for (int i = 0;i < sz;i++) {
		scanf("%d", &a[i]);
	}
	PX(a, sz);
	for (int i = 0;i < sz;i++) { //判断奇偶数个数
		if (a[i] % 2 == 0)
			o++;
		else j++;
	}
	for (int i = 0;i < sz;i++) {
		if (a[i] % 2 != 0)
			printf("%d是奇数\n", a[i]);
	}
	printf("\n");
	for (int i = 0;i < sz;i++) {
		if (a[i] % 2 == 0)
			printf("%d是偶数\n", a[i]);
	}
	printf("奇数个数为:%d ", j);
	printf("偶数个数为:%d\n", o);
	return 0;
}

29.键盘输入20个学生的姓名、学号、成绩,按成绩从大到小的顺序输出这20个学生的姓名、学号、成绩(使用结构体)

//键盘输入20个学生的姓名、学号、成绩,按照成绩从大到小的顺序输出这20个学生的姓名、学号、成绩
#include<stdio.h>
int const n = 10;
struct student {
	char name[10];
	int number;
	int score;
};
int main(){
	struct student a[n];
	struct student stu;
	printf("输入20个学生的姓名、学号、成绩,按照成绩从大到小输出学生信息\n");
	for(int i=0;i<n;i++){
		scanf("%s%d%d",&a[i].name,&a[i].number,&a[i].score);
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<n-1-i;j++){
			if(a[j].score<a[j+1].score){
				stu = a[j];
				a[j] = a[j+1];
				a[j+1] = stu;
			}
		}
	}
	for(int i=0;i<n;i++){
		printf("%s%d%d\n",a[i].name,a[i].number,a[i].score);
	}
	return 0;
}

30.种树问题,某条街道化为n条路段,这n条路段依次编号为1…n,每个路段最多可以种一棵树。现在居民们给出了h组建议,每组建议包含三个整数b,e,t代表居民希望在路段b到e之间至少要种t棵树。这些建议所给路段的区间可以交叉。请问:如果要满足所有居民的建议,至少要种多少棵树。

#include<bits/stdc++.h>
using namespace std;
struct note
{ //种树区间的结构体 
	int str;
	int end;
	int num;
}que[5100];
int book[31000];

int cmp(struct note a,struct note b)
{
	return a.end<b.end;
}

int main()
{
	int n,m;
	int sum=0;
	
	scanf("%d %d",&n,&m);
	for(int i=0;i<m;i++)
		scanf("%d %d %d",&que[i].str,&que[i].end,&que[i].num);
	sort(que,que+m,cmp);   //按种树区间结束end升序排序 
	
	//遍历每个建议,查看区间种了多少树 
	for(int i=0;i<m;i++)
	{    //从后往前遍历区间 
		for(int k=que[i].end;k>=que[i].str;k--)
		{   //如果这个建议区间需种树为0,则结束 
			if(que[i].num==0)
				break;   
			//如果这个点已种树,将需要种树的数减1 
			if(book[k]==1)
				que[i].num--;
		}
		
		//遍历每个建议,查看区间需要种多少树 
		for(int j=que[i].end;j>=que[i].str;j--)
		{
			if(que[i].num==0)
				break;
			//如果这个点未种树,则种上树 
			if(book[j]==0)
			{
				book[j]=1;
				que[i].num--;
			}
		}
	}
    
	//查看种了多少树 
	for(int i=1;i<=n;i++)
	{
		if(book[i]==1)
			sum++;
	}
    
	printf("%d",sum);
	return 0;
}

31.S=a+aa+aaa+aaaa+…,其中a是一个正整数,例3+33+333+3333,此时a=3,n=4,n表示a的位数,a和n由键盘输入,求S的值

#include<stdio.h>
#include<math.h>
int main()
{
	int a = 0;
	int n = 0;
	int sum = 0;
	int result = 0;
	int m = 1;
	scanf("%d %d", &a, &n);
	int i = 0;
	for (i = 1; i <= n; i++)
	{
		sum = sum + a * m;
		result = result + sum;
		printf("%d\n",sum);
		m = pow(10,i);
	}
	printf("求和为:%d",result);
	return 0;
}

32.输入n个用户姓名、性别、地址、电话,按用户姓名的英语词典顺序排序输出用户信息:姓名、性别、地址、电话。用户首先在第一行输入一个正整数,表示待排序的用户数目,每行的输入格式为姓名、性别、地址、电话,回车结束。输出格式用户信息:姓名、性别、地址、电话,要求n<50,大于需要提示用户重新输入

#include <stdlib.h>
#include<stdio.h>
#include<string.h>
 
//typedef struct user
struct user
{
 char name[15];
 char tele[15];
 
}t,user[30];
 
int main()
{
    int n;
    int i;
    int l;
    scanf("%d",&n);
 
    for(i = 0; i < n; i++)
    {
        scanf("%s",user[i].name);
        scanf("%s",user[i].tele);
    }
 
    int j = 0;
 
    for(i = 0; i<n-1;i++)
    {
        for(j = 0; j<n-i-1;j++)
        {
            if(strcmp(user[j+1].name,user[j].name)<0)
            {
                char temp[10];
                char t[10];
    strcpy(temp,user[j].name);
    strcpy(t,user[j].tele);
 
    strcpy(user[j].name,user[j+1].name);
    strcpy(user[j].tele,user[j+1].tele);
 
    strcpy(user[j+1].name,temp);
    strcpy(user[j+1].tele,t);
            }
        }
    }
 
    for(i = 0; i < n; i++)
    {
        l = strlen(user[i].name);
        if(l>=10)
        {
            l = 10;
        }
        user[i].name[l] = '\0';
 
        l = strlen(user[i].tele);
        if(l>=10)
        {
            l = 10;
        }
        user[i].tele[l] = '\0';
 
        printf("%12s%12s\n",user[i].name,user[i].tele);
 
    }
    return 0;
}

33.对于一个长度为n的字符串S,首先根据它构造几个字符串,其中第i个字符串将S的前i-1个字符置于末尾,得到(例如,China,长度为5,可以构成china,hinaC,inaCh,aChin,naChi),按照首字符从小到大排序,如果相同,则按照它们在S中位置从小到大排序,排序后的尾字符组成一个新的字符S1,它的长度也是n,并且包含了S中的每一个字符,最后输出S1以及S的首字符在S1中的位置P

输入格式:
输入文件file.txt包含两行,第一行是一个正数n(1<=n<=10000),代表S的长度,第2行是字符串S
输出格式:
输出文件file.out.txt 第一行字符串S1,第二个整数P

34.判断2~100的数是否为素数,不是素数分解成素数

输出部分样式为:
2 is a prime
3 is a prime
4 is not a prime
4 = 2 * 2
5 is a prime
6 is not a prime
6 = 2 * 3

#include<stdio.h>
#include<stdbool.h>
bool is_prime(int n){
	if(n<2){
		return false;
	}else{
		for(int i=2;i*i<=n;i++){
			if(n%i==0){
				return false;
			}		
		}
		return true;
	}
}

void decompose(int n){
	int p=2;
	printf("%d=",n);
	while(n>1){
		if(is_prime(p)&&n%p==0){
			printf("%d",p);
			n/=p;
			if(n>1){
				printf("*");
			}
		}
		else{
			p++;
		}
	}
	printf("\n");
}

int main(){
	for(int i=2;i<=100;i++){
		if(is_prime(i)){
			printf("%d is as prime\n",i);
		}else{
			printf("%d is not a prime\n",i);
			decompose(i);
		}
	}
	return 0;
}

35.养猪场老板想随时知道自己猪场里有多少头猪,猪场学徒提出这样的问题:假设有16头猪,建3个猪圈,就剩下1头猪没有地方安家,建5个猪圈,就剩下1头猪没有地方安家,建7个猪圈,就剩2头猪没有地方安家,计算养猪场有多少头猪

输入
第一行 n 建猪圈次数
第n行 每行两个整数ai,bi…:a1~an互质
输出包含一个正整数,至少养猪的数目

#include<stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int a[n][2];
	int i,j,k=0;
	for(i=0;i<n;i++){
		for(j=0;j<2;j++){
			scanf("%d",&a[i][j]);
		}
	}
	for(i=3;;i++){
		for(j=0;j<n;j++){
			if((i-a[j][1])%a[j][0]==0){
				k++;
			}
		}
		if(k==n){
			printf("%d",i);
			break;
		} 
		else{
			k=0;
		}
	}
	return 0;
}

36.水仙花数

//导入头文件
#include<stdio.h>
#include<stdlib.h>
//主函数
int main(){
	int i,j,k,n,sumi,sumj,sumk;//定义7个整型数据
 
	printf("\n100-1000 包含的“水仙花”数分别有: \n\n"); 
 
	for(n=100;n<1000;n++){     
 
		//循环求数字个位、十位、百位上的数字
		i=n/100;//求百位       
        j=n/10%10; //求十位       
        k=n%10; //求个位
 
		//求i、j、k的立方和
		sumi=i*i*i;//求个位立方和  
        sumj=j*j*j;//求十位立方和  
        sumk=k*k*k;//求百位立方和
 
		 //判断是否为 水仙花数
		if(n==sumi+sumj+sumk){      			
			printf("%-5d",n);//输出 水仙花数 
		} 
	}
 
	printf("\n");//换行 	
	return 0;
}
  • 13
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 28
    评论
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

啊帅和和。

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

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

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

打赏作者

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

抵扣说明:

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

余额充值