C语言基础必会50题,C语言期末考试,OJ,考研复试

声明:内容整理和搜集于网上,旨在学习交流和分享,如果侵犯您的权益请及时联系删除。

1.输入一个半径值,分别计算圆周长、圆面积和球的体积。要求使用符号常量定义圆周率。

#include<stdio.h>
int main()
{
printf("计算圆周长 面积 求面积\n");
float r,c,s,v;
scanf("%f",&r);
#define PI 3.14159265
c=2*PI*r;
s=4*PI*r*r;
v=4/3*PI*r*r*r;
printf("周长是%.2f\n",c);
printf("表面积是%.2f\n",s);
printf("体积是%.2f\n",v);
return 0;
}

2.假设今天是星期三,编程求20天之后是星期几?

#include<stdio.h>
int main()
{
printf("今天是星期三,20天后是星期几?\n");
int i;
i=23%7;
printf("20天后是星期%d\n",i);
return 0;
}

3.从键盘输入一个字符,然后将其按字符和整数这两种形式输出。

#include<stdio.h>
int main()
{
printf("输入一个字符\n");
char i;
scanf("%c",&i);
printf("整数形式是%d\n",i);
printf("字母形式是%c\n",i);
return 0;
}

4.输入一个大写英文字母,将它转化为小写输出。

#include<stdio.h>
int main()
{
	printf("请输入一个大写英文字母\n");
	char ch;
	scanf("%c",&ch);
	printf("%c\n",ch+32);
return 0;	
}

5.求一元二次方程ax^2+bx+c=0方程的两个实根。a、b、c由键盘输入。(默认bb-4a*c>=0)

#include<stdio.h>
#include<math.h>
int main()
{
	printf("求两个实数根\n");
float x1,x2,a,b,c;
scanf("%f%f%f",&a,&b,&c);
x1=((-b)+sqrt(b*b-4*a*c))/2;
x2=((-b)-sqrt(b*b-4*a*c))/2;
	printf("%.2f\n",x1);
	printf("%.2f\n",x2);
return 0;	
}

6.输入长方形的长和宽,编程求该长方形的周长和面积

#include<stdio.h>
int main()
{
	printf("输入长和宽\n");
	int a,b,c,s;
scanf("%d%d",&a,&b);
c=2*(a+b);
s=a*b;
printf("周长是%d\n",c);
printf("面积是%d\n",s);
return 0;	
}

7.要将“China”译成密码,译码规律是:用原来字母后面的第5个字母代替原来的字母。
例如,字母“A”后面第5个字母是“F”,用“F”代替“A”。因此,“China”应译为“Hmnsf”。请编写程序,用赋初值的方法使c1、c2、c3、c4、c5 5个变量的值分别为‘C’、‘h’、‘i’、‘n’、‘a’,经过运算,使c1、c2、c3、c4、c5分别变为‘H’、‘m’、‘n’、‘s’、‘f’并输出。

#include<stdio.h>
int main()
{
printf("China到Hmnst\n");
char a[5]={'C','h','i','n','a'};
for(int i=0;i<=5;i++)
a[i]=a[i]+5;
for(int j=0;j<=5;j++)
printf("%c",a[j]);
printf("\n");
return 0;	
}

8.有人用温度计测量出用华氏法表示的温度,现输入华氏温度f,要求把它转换为以摄氏法表示的温度c并输出。(c=5/9(f-32))

#include<stdio.h>
int main()
{
printf("把华氏温度转换为摄氏温度\n");
printf("请输入华氏温度:\n");
float i,j;
scanf("%f",&i);
j=5*(i-32)/9;
printf("%.1f\n",j);
return 0;
}

9.编写程序,输入两个实数,按代数值由大到小的顺序输出这两个实数。

#include<stdio.h>
int main()
{
printf("将两个实数从大到小排列\n");
float i,j;
scanf("%f%f",&i,&j);
if(i>j)
printf("输出%f %f\n",i,j);
else
printf("输出%f %f\n",j,i);
return 0;
}

10.编写程序,从键盘输入两个整数,输出其中较小的数。

#include<stdio.h>
int main()
{
printf("输出较小的数\n");
int i,j;
scanf("%d%d",&i,&j);
if(i<j)
printf("%d\n",i);
else
printf("%d\n",j);
return 0;
}

11.编写程序,输入一个不多于5位的正整数,输出该正整数是几位数。

 #include<stdio.h>
int main()
{
printf("输入一个不多于5位数的正整数\n");
int i;
scanf("%d",&i);
if(i>0&&i<10)
printf("%d是一位数\n",i);
if(i>=10&&i<100)
printf("%d是二位数\n",i);
if(i>=100&&i<1000)
printf("%d是三位数\n",i);
if(i>=1000&&i<10000)
printf("%d是四位数\n",i);
return 0;
}

12.编写程序,不使用系统提供的数学函数,编写程序求一个实数的绝对值。

#include<stdio.h>
int main()
{
printf("求一个实数的绝对值\n");
int i;
scanf("%d",&i);
if(i>=0)
printf("绝对值是%d\n",i);
if(i<0)
printf("绝对值是%d\n",-i);
return 0;
}

13.编写程序,编写程序实现如下分段函数。当x<-5时,f(x)=|x|+5;当-5≤x≤5时,f(x)=x*x;当x>5时,f(x)=6x-10。(x定义成实型数据)

#include<stdio.h>
int main()
{
int i;
scanf("%d",&i);
if(i<-5)
printf("%d\n",-i+5);
if(-5<=i&&i<=5)
printf("%d\n",i*i);
else
printf("%d\n",6*i-10);
return 0;
}

14.编写程序,输入2015年的一个月份,输出该月有多少天。(使用switch语句实现)

#include<stdio.h>
int main()
{
printf("输入月份\n");
int month,day;
scanf("%d",&month);
switch(month)
{
case 2: day=28; printf("%d\n",day);break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: day=31; printf("%d\n",day);break;
case 4:
case 6:
case 9:
case 11: day=30; printf("%d\n",day);break;
}
return 0;
}

15.编写程序,判断某一年是否是闰年。

#include<stdio.h>
int main()
{
printf("判断某一年是否为闰年\n");
int i;
scanf("%d",&i);
if(i%4==0)
printf("%d是闰年\n",i);
if(i%4!=0)
printf("%d是平年\n",i);
return 0;
}

16.编写程序,编写程序,根据输入的学生成绩输出相应的等级。90分以上(包括90分)为A等,80~89分为B等,70~79分为C等,60~69分为D等,60分以下为E等。

#include<stdio.h>
int main()
{
printf("求学生成绩相应的等级\n");
int i;
scanf("%d",&i);
if(i>=90)
printf("%d是A\n",i);
else if(i<90&&i>=80)
printf("%d是B\n",i);
else if(i<80&&i>=70)
printf("%d是C\n",i);
else if(i<70&&i>=60)
printf("%d是D\n",i);
else
printf("%d是E\n",i);
return 0;
}

17编写程序,输入一个百分制成绩,若大于等于60,则输出“恭喜!您的成绩通过了!”,若小于60,则输出“抱歉!您的成绩未通过!”
(要求成绩只能是整数)

#include<stdio.h>
int main()
{
	printf("请输入您的成绩\n");
int i;
scanf("%d",&i);
if(i>=60)
printf("您通过了\n");
else
printf("您没通过\n");
return 0;
}

18.编写程序,输入3个整数x、y、z,输出其中最小值。

#include<stdio.h>
int main()
{
	printf("输出最小值\n");
int x,y,z,min1,min;
scanf("%d%d%d",&x,&y,&z);
min1=x<y?x:y;
min=min1<z?min1:z;
printf("最小值是%d\n",min);
return 0;
}

19.编写程序,输入三角形的3条边a、b、c,判断它们能否构成三角形。若能构成三角形,求出三角形面积。
(s=(a+b+c)/2,三角形面积area=sqrt(s(s-a)(s-b)(s-c)))

#include<stdio.h>
#include<math.h>
int main()
{
	printf("判断能否构成三角形 若能 求面积\n");
	float a,b,c,d,s;
	scanf("%f%f%f",&a,&b,&c);
	d=(a+b+c)/2;
if(a>=c+b||b>=a+c||c>=a+b)
printf("不能构成三角形\n");
else
{
s=sqrt(d*(d-a)*(d-b)*(d-c));
printf("面积是%.2f\n",s);
}
return 0;
}

20.编写程序,试编程判断输入的正整数是否既是5又是7的整倍数。若是,则输出yes,否则输出no。

#include<stdio.h>
int main()
{
	printf("判断一个正整数是否既是5又是7的倍数\n");
	int i;
	scanf("%d",&i);
	if(i%35==0)
		printf("yes\n");
	else
		printf("no\n");
return 0;
}

21.编写程序,编程实现以下功能:读入两个运算数(data1和data2)及一个运算符(op),计算表达式data1 op data2的值,其中op可为+,?,*,/(执行除法运算时假设data2不为0,用switch语句实现)。

#include<stdio.h>
int main()
{
char op;
float data1,data2;
printf("请输入两个数字\n");
scanf("%f%c%f",&data1,&op,&data2);
switch(op)
{
case'+':printf("%f+%f=%.2f\n",data1,data2,data1+data2);break;
case'-':printf("%f-%f=%.2f\n",data1,data2,data1-data2);break;
case'*':printf("%f*%f=%.2f\n",data1,data2,data1*data2);break;
case'/':printf("%f/%f=%.2f\n",data1,data2,data1/data2);break;
}
return 0;
}

22.编写程序,编写程序,输入任意一个1~7之间的整数,将他们转换成对应的表示星期几的英文单词。例如:1转换成Monday,7转换成Sunday。(使用switch语句实现)

#include<stdio.h>
int main()
{
printf("请输入1至7之间任意整数\n");
int i;
scanf("%d",&i);
switch(i)
{
case 1:printf("Monday\n");break;
case 2:printf("Tuesday\n");break;
case 3:printf("Wednesday\n");break;
case 4:printf("Thursday\n");break;
case 5:printf("Friday\n");break;
case 6:printf("Saturday\n");break;
case 7:printf("Sunday\n");break;
}
return 0;
}

23.输出小写字母的ascii码对照表。

#include<stdio.h>
int main()
{
printf("输出小写字母的ascii码\n");
char ch;
ch='a';
for(int i=0;i<=25;i++)
printf("%c:%d\t",ch+i,ch+i);
printf("\n");
return 0;
}

24.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

#include<stdio.h>
main()
{
int a=0,b=0,c=0,d=0,i=0;
char s[10];
printf("请输入一行不超过十个字的字符串:\n");
gets(s);
while(i<10)
{
     if(s[i]>='0'&&s[i]<='9')
{
        a++;
}
     else if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z'))
{
        b++;
}
     else if(s[i]==' ')
{
        c++;
}
		else
{
d++;
}
i++;
}
printf("数字的个数是%d\n",a);
printf("字母的个数是%d\n",b);
printf("空格的个数是%d\n",c);
printf("其他符号的个数是%d\n",d);
return 0;
}

25.输出图形

 $
$$$

$$$ $$$$$

 #include<stdio.h>
#include<math.h>
int main()
{
for(int i=0;i<=3;i++)
{
for(int j=1;j<=7;j++)
{
if(j>=fabs(4-i)&&j<=fabs(4+i))
printf("$");
else
printf(" ");
}
printf("\n");
}
return 0;
}
  1. 求s=1+(1+2)+(1+2+3)+… +(1+2+3+…+n),要求n从键盘输入。
#include<stdio.h>
main()
{	
int sum=0,n,i,a=1;
printf("计算1+(1+2)+(1+2+3)+……(1+2+3+n)=?\n");
scanf("%d",&n);
while(a<=n)
{
i=(1+a)*a/2;
sum=sum+i;
a++;
}
printf("输出sum=%d\n",sum);
return 0;
}

27.计算10!

#include<stdio.h>
int main()
{
int i=1,a=1;
for(i=1;i<=10;i++)
a=a*i;
printf("%d\n",a);
return 0;
}

28.输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一个水仙花数,因为153=13+53+3^3。

#include<stdio.h>
int main()
{
printf("输出所有的水下花数\n");
for(int i=1;i<=9;i++)
{
for(int j=0;j<=9;j++)
{
for(int k=0;k<=9;k++)
{
if(100*i+10*j+k==i*i*i+j*j*j+k*k*k)
printf("%d%d%d ",i,j,k);
}
}
}
printf("\n");
return 0;
}

29.鸡兔同笼,上数共有35个头,下有94只脚,鸡、兔各有几只?

#include<stdio.h>
int main()
{
for(int x=0;x<=35;x++)
{
for(int y=0;y<=35;y++)
{
if((x+y==35)&&(2*x+4*y==94))
printf("鸡有%d只,兔子有%d只\n",x,y);
}
}
return 0;
}

30.编程找10个数中的最大数以及该数在数组中的位置。

#include<stdio.h>
int main()
{
	printf("找10个数中最大数极其所在位置\n");
int a[10],max;
for(int i=0;i<=9;i++)
scanf("%d",&a[i]);
max=a[0];
for(int j=1,int k=0;j<=9;j++)
{
if(max<a[j])
{
max=a[j];
k=j+1;
}
}
printf("第%d位\n",k);
printf("最小是%d\n",max);
return 0;
}

31.编程找10个数中的最小数以及该数在数组中的位置。


```c
#include<stdio.h>
int main()
{
	printf("找10个数中最小数极其所在位置\n");
int a[10],min;
for(int i=0;i<=9;i++)
scanf("%d",&a[i]);
min=a[0];
for(int j=1,int k=0;j<=9;j++)
{
if(min>a[j])
{
min=a[j];
k=j+1;
}
}
printf("第%d位\n",k);
printf("最小是%d\n",min);
return 0;
}

32.编程将一个数组中的元素按逆序存放。

```c
#include<stdio.h>
int main()
{
	printf("一个数组按照逆序存放\n");
int a[10],b[10];
for(int i=0;i<=9;i++)
scanf("%d",&a[i]);
for(int j=0;j<=9;j++)
{
b[j]=a[9-j];
printf("%d ",b[j]);
}
printf("\n");
return 0;
}

33.编程计算Fibonacci数列的前50项,并把结果存放在一个数组中。
(Fibonacci数列前两项的值是1。从第3项开始,其值为前两项之和。)

#include<stdio.h>
int  main()
{
int a[50]={0,1};
for(int i=2;i<50;i++)
{
a[i]=a[i-1]+a[i-2];
}
for(i=0;i<50;i++)
{
printf("%f\t",a[i]);
}
printf("\n");
return 0;
}

34.编写程序,将两个字符串连接起来(不使用strcat函数)。

#include<stdio.h>
int main()
{
	int i=0,j=0;
printf("将两个字符串连接起来\n");
char ch1[100],ch2[100];
printf("输入第一个字符串:");
gets(ch1);
printf("输入第二个字符串:");
gets(ch2);
while(ch1[i]!='\0')
i++;
while(ch1[j]!='\0')
j++;
for(int k=i;k<=i+j-1;k++)
{
ch1[k]=ch2[k-i];
}
printf("连接后为:");
for(int l=0;l<=i+j-1;l++)
printf("%c",ch1[l]);
printf("\n");
return 0;
}

35.有一个2行3列的矩阵,编程找出值最小的元素的值以及它所在的行列号。

#include<stdio.h>
int main()
{
	printf("找到最小元素的值极其位置\n");
int a[2][3],min,x,y;
for(int i=0;i<=1;i++)
{
for(int j=0;j<=2;j++)
scanf("%d",&a[i][j]);
}
min=a[0][0];
for(int m=0;m<=1;m++)
{
for(int l=0;l<=2;l++)
{
if(min>a[m][l])
{
min=a[m][l];
x=m+1;
y=l+1;
}
}
}
printf("%d\n",min);
printf("第%d行,第%d列\n",x,y);
return 0;
}

36.一个学习小组有3个人,每人有4门课的成绩。计算每个人的平均成绩。

#include<stdio.h>
int main()
{
	printf("分别计算每个人的平均数\n");
float a[3][4],v[3],s=0;
for(int m=0;m<=2;m++)
{
for(int l=0;l<=3;l++)
{
	scanf("%f",&a[m][l]);
    s=s+a[m][l];
}
v[m]=s/4;
s=0;
}
printf("第一个人平均分是%.2f\n第二个人平均分是%.2f\n第三个人平均分是%.2f\n",v[0],v[1],v[2]);
return 0;
}

37.编程输出杨辉三角中的前10行。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

 #include<stdio.h>
int main()
{
printf("\n");
int a[10][10]={{1},{1,1}},i,j;
for(i=0;i<10;i++)
a[i][0]=1;
for(i=2;i<10;i++)
{
for(j=1;j<10;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("%d\t",a[i][j]);
	}
	printf("\n");
}
printf("\n");
	return 0;
}

38.编写一个函数,输入立方体的长、宽、高,输出立方体的体积。

#include<stdio.h>
int V(int i,int j,int k);
int main()
{
int a,b,c;
printf("输入长方体的长宽高\n");
scanf("%d%d%d",&a,&b,&c);
printf("体积是%d\n",V(a,b,c));
return 0;
}
int V(int i,int j,int k)
{
int v=i*j*k;
return v;
}

39.输入两个整数,要求输出其中值较大者。用函数实现找大数。

#include<stdio.h>
int MAX(int i,int j);
int main()
{
int a,b;
printf("输入两个整数\n");
scanf("%d%d",&a,&b);
printf("最大数是%d\n",MAX(a,b));
return 0;
}
int MAX(int i,int j)
{
	int v=i>j?i:j;
return v;
}

40.编写一个函数,用递归方法求n!,调用该函数求m!/(n!*(m-n)!)的值并输出。

#include<stdio.h>
float X(int n);
int main()
{
	int m,n;
	scanf("%d%d",&m,&n);
printf("result is %.3f\n",X(m)/X(n)/X(m-n));
return 0;
}
float X(int n)
{
int i=1,a=1;
for(i=1;i<=n;i++)
a=a*i;
return a;
}

41.编写一个函数,实现用选择法对数组中10个整数按由小到大排序。

#include <stdio.h>  
  
void selectionSort(int arr[], int n) {  
    int i, j, min_idx;  
    for (i = 0; i < n-1; i++) {  
        min_idx = i;  
        for (j = i+1; j < n; j++)  
            if (arr[j] < arr[min_idx])  
                min_idx = j;  
        int temp = arr[min_idx];  
        arr[min_idx] = arr[i];  
        arr[i] = temp;  
    }  
}  
  
void printArray(int arr[], int size) {  
    int i;  
    for (i=0; i < size; i++)  
        printf("%d ", arr[i]);  
    printf("\n");  
}  
  
int main() {  
    int arr[10] = {64, 25, 12, 22, 11};  
    int n = sizeof(arr)/sizeof(arr[0]);  
    selectionSort(arr, n);  
    printf("Sorted array: \n");  
    printArray(arr, n);  
    return 0;  
}

42.编写一个函数,求一个3×4的矩阵所有元素之和。

#include <stdio.h>  
  
// 函数声明  
int sum_of_matrix(int matrix[3][4]);  
  
int main() {  
    int matrix[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};  
    int sum = sum_of_matrix(matrix);  
    printf("矩阵所有元素之和为:%d\n", sum);  
    return 0;  
}  
  
// 函数定义  
int sum_of_matrix(int matrix[3][4]) {  
    int i, j, sum = 0;  
    for (i = 0; i < 3; i++) {  
        for (j = 0; j < 4; j++) {  
            sum += matrix[i][j];  
        }  
    }  
    return sum;  
}

43.编写求圆的面积的函数,并调用该函数求出圆的面积。

#include<stdio.h>
float S(int r);
int main()
{
printf("计算圆的面积\n");
int i;
scanf("%d",&i);
printf("面积是%.2f\n",S(i));
return 0;
}
float S(int r)
{
	float s;
#define PI 3.14159265
s=r*r*PI;
return s;
}

44.编写一个函数,该函数的功能是判断一个整数是不是素数(所谓素数是指除了1和它本身以外,不能被任何整数整除的数),在main函数中输入一个整数,调用该函数,判断该数是不是素数,若是则输出“yes”,否则输出“no”。

#include<stdio.h>
int j();
int main()
{
printf("请输入一个数:\n");
j();
return 0;
}
int j()
{
int n;
scanf("%d",&n);
if(n==1&&n==2)
printf("%d是素数\n",n);
for(int i=2;i<=n;i++)
{
if(n%i==0)
break;
}
if(i<n)
printf("%d是合数\n",n);
else
printf("%d是素数\n",n);
return 0;
}

45.编写判定闰年的函数,并调用此函数求出公元2000年到公元2100年之间的所有闰年。

#include<stdio.h>
int RUN(int i);
int main()
{
printf("输出2000至2100之间的闰年:\n");
for(int a=2000;a<=2100;a++)
{
RUN(a);
}
printf("\n");
return 0;
}
int RUN(int i)
{
int j;
if(i%4==0)
printf("%d ",i);
return 0;
}

46.编写两函数分别求两个个整数的最大公约数和最小公倍数,用主函数调用两个函数并输出结果,两个整数由键盘输入。

#include<stdio.h>
int MAX(int a,int b);
int MIN(int a,int b);
int main()
{
	printf("请输入两个数 求最大公约数和最小公倍数\n");
int x,y;
scanf("%d%d",&x,&y);
printf("最大公约数是%d,最小公倍数是%d\n",MAX(x,y),MIN(x,y));
return 0;
}
int MAX(int a,int b)
{
	for(int i=(a<b?a:b);i>=1;i--)
{
		if(a%i==0&&b%i==0)
		break;
}
return i;
}
int MIN(int a,int b)
{
for(int j=(a>b?a:b);j<=a*b;j++)
{
	if(j%a==0&&j%b==0)
		break;
}
return j;
}

47.编写判断回文的函数,并调用此函数判定一个字符串是否为回文。
(回文字符串是指该字符串从左到右读和从右到左读完全一样。)

#include<stdio.h>
#include<string.h>
int PANDUAN(char b[10]);
int main()
{
char a[10];
gets(a);
PANDUAN(a);
return 0;
}
int PANDUAN(char b[])
{
int j=strlen(b),i=0;
while(b[i]==b[j-1-i])
{
i++;
}
if(i==j)
printf("是回文字符串\n");
else
printf("不是回文字符串\n");
return 0;
}

48.编写一个函数,在一个有序的数列中插入一个数。插入后,数列仍然维持有序。如果有相同的数,要插入在相同的数的后面。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int CHARU(int b[100],int n);
int main()
{
int a[]={1,2,3,4,5,6};
int x;
printf("请输入插入数字\n");
scanf("%d",&x);
CHARU(a,x);
return 0;
}
int CHARU(int b[100],int n)
{
int j=sizeof(b)/sizeof(int),i;
printf("%d\n",j);
for(i=0;i<=j;i++)
{
if(n>=b[i]&&n<=b[i+1])
{
for(int k=j+1;k>=i+2;k--)
b[k]=b[k-1];
b[i+1]=n;
}
else if(n>=b[j])
b[j+1]=n;
}
for(i=0;i<=j+1;i++)
printf("%d ",b[i]);
printf("\n");
return 0;
}

49.编写一个函数,使给定的一个3×3的二维整型数组转置,即行列互换。

#include<stdio.h>
int ZHIHUAN(int b[3][3]);
int main()
{
printf("请输入一个3*3方阵\n");
	int a[3][3];
for(int i=0;i<=2;i++)
{
	for(int j=0;j<=2;j++)
		scanf("%d",&a[i][j]);
}
ZHIHUAN(a);
return 0;
}
int ZHIHUAN(int b[3][3])
{
	int c[3][3],m,n;
	printf("转置方阵为:\n");
for(m=0;m<=2;m++)
{
for(n=0;n<=2;n++)
c[n][m]=b[m][n];
}
for(n=0;n<=2;n++)
{
for(m=0;m<=2;m++)
printf("%d ",c[n][m]);
printf("\n");
} 
return 0;
}
  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
孪生素数是指两个相邻的素数,其差为2,例如(3, 5)、(5, 7)、(11, 13)等。下面是一道关于C语言中孪生素数的OJ目: 目描述: 输入一个正整数n,求出n以内的所有孪生素数(若存在)。输出格式为每个孪生素数对占一行,数字之间用一个空格隔开。如果不存在孪生素数,则输出"NO"。 输入格式: 输入一个正整数n(n<=1000000)。 输出格式: 按照格式输出符合条件的孪生素数对。 样例输入: 20 样例输出: 3 5 5 7 11 13 思路分析: 我们可以使用筛法来解决这道目。先用筛法求出质数,然后遍历质数数组,如果当前质数与前一个质数相差为2,则说明是一对孪生素数。 参考代码: ```c #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define MAX_N 1000000 bool is_prime[MAX_N + 1]; // 标记是否为质数 int prime[MAX_N + 1]; // 存储质数 int prime_cnt = 0; // 记录质数的数量 void sieve(int n) { for (int i = 2; i <= n; i++) { if (!is_prime[i]) { prime[prime_cnt++] = i; } for (int j = 0; j < prime_cnt && i * prime[j] <= n; j++) { is_prime[i * prime[j]] = true; if (i % prime[j] == 0) { break; } } } } int main() { int n; scanf("%d", &n); sieve(n); int prev_prime = -1; // 上一个质数 for (int i = 0; i < prime_cnt; i++) { if (prev_prime != -1 && prime[i] - prev_prime == 2) { printf("%d %d\n", prev_prime, prime[i]); } prev_prime = prime[i]; } if (prev_prime == -1) { printf("NO\n"); } return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

稚肩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值