以下是C语言实现的代码:
Copy code
#include <stdioh>
#include <stdboolh>
//判断素数函数
bool is_prime(int num)
{
if (num <= 1) {
return false;
}
else if (num == 2) {
return true;
}
else {
for (int i=2; ii<=num; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
}
int main()
{
int n, p, q;
scanf("%d", &n);
if (n <= 1) {
//处理不合法输入
p = 2;
q = 4;
}
else {
p = n % 2 == 0 n + 1 : n + 2;//从n开始遍历奇数
q = p + 2;
while (!is_prime(p) || !is_prime(q)) {
p += 2;
q += 2;
}
}
printf("%d %d", p, q);
return 0;
}
这个程序首先从输入读取n,然后从n开始遍历奇数,找到大于n的最小的一对孪生素数p和q。在while循环中,每次将p和q各自增加2,直到找到两个都是素数的数为止。对于不合法输入,程序将输出2和4。
C语言程序设计复习:
1、理解以下术语的含义:数组、函数、地址 指针 指针变量 直接访问 间接访问、结构体
2、用起泡法对10个数由小到大排序(P134例题)
5、输入10个学生的成绩,分别用函数实现下列功能:
1)计算所有学生的平均分;
2) 计算学生成绩中最高分;
3) 计算学生成绩中最低分;
4) 统计及格学生人数;
5) 查找成绩为指定成绩(如90)记录,如果没有,请给出提示,如果有,请统计满足条件的记录数。
6、有一个已经排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。(P153习题74)
7、编写一个函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字字符间空一个空格。如输入1990,应输出“1 9 9 0”。(要求用函数)(P202习题88)
8、编写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。(要求用指针,不能使用strlen()函数) (P279习题106)
9、编写一个程序,打入月份号,输出该月的英文月名。例如,输入“3”则输出“March”(要求用指针数组)。(P279习题1018)
10、将一个数组中的值按逆序重新存放。例如,输入的数组顺序为8,6,5,4,1,要求改为1,4,5,6,8。(P153习题75)
11、编写一个函数用“起泡法”对输入的10个字符按由小到大顺序排序(要用函数)。(P202习题811)
12、将数组a中n个整数按相反顺序存放(要用函数)。(P237例题107)
13、输入一行文字,找出其中大写字母、小写字母、空格、数字及其他字符各有多少。(要求用指针实现)(P279习题108)
14、编写一个函数,将两个字符串连接(要用自定义函数,不能用strcat函数)。(P202习题86)
15、输入3个字符串,按照由小到大的顺序输出。(要求用指针) (P278习题102)
16、输入10整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数:1、输入10个数; 2、进行处理; 3、输出10个数(数据对换要求用指针实现)(P278习题103)
参考答案:
2、用起泡法对10个数由小到大排序
#include <stdioh>
void main()
{ int a[10]; int i,j,t;
printf("input 10 numbers :\n");
for (i=0;i<10;i++)
scanf("%d“,&a[i]);
printf(“\n");
for(j=0;j<9;j++)
for(i=0;i<10-j;i++)
if (a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("the sorted numbers :\n");
for(i=0;i<10;i++)
printf(“%d “,a[i]);
}
3、用递归方法求n阶勒让德多项式的值,递归公式为(要求用函数):(P202习题813)
pn(x)= 1 n=0
x n=1
((2n-1)x-pn-1(x)-(n-1)pn-2(x)/n n>1
3、#include <stdioh>
void main()
{
int x,n;
float p(int,int);
printf(“input n & x:”);
scanf(“%d,%d”,&n,&x);
printf(“n=%d,x=%d\n”,n,x);
printf(“P%d(%d)=%62f\n”,n,x,p(n,x));
}
float p(int n,int x)
{
if(n==0)
return 1;
else if(n==1)
return x;
else
return ((2n-1)xp((n-1),x)-(n-1)p((n-2),x))/n;
}
4、输入3个整数,按由小到大的顺序输出(要求用指针类型)(P228例题)
4、输入3个整数,按由小到大的顺序输出(要求用指针类型)
#include <stdioh>
void main()
{
void sort (inta, intb,intc);
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
sort(&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
void sort (int a, int b,int c)
{
int tmp;
if (a>b)
{
tmp=a;
a=b;
b=tmp;
}
if (a>c)
{
tmp=a;
a=c;
c=tmp;
}
if (b>c)
{
tmp=b;
b=c;
c=tmp;
}
}
5、输入10个学生的成绩,分别用函数实现下列功能:
1)计算所有学生的平均分;
6) 计算学生成绩中最高分;
7) 计算学生成绩中最低分;
8) 统计及格学生人数;
9) 查找成绩为指定成绩(如90)记录,如果没有,请给出提示,如果有,请统计满足条件的记录数。
#include <stdioh>
void main()
{
int average(int a[]);
int max(int a[]);
int min(int a[]);
int pass(int a[]);
int search(int a[],int g);
int i,j,g;
int score[10],aver,m1,m2,p,s;
printf("Please input 10 scores:\n");
for(i=0;i<10;i++)
scanf("%d",&score[i]);
printf("\n");
aver=average(score);
m1=max(score);
m2=min(score);
p=pass(score);
printf("平均分为: %d\n",aver);
printf("最高分为: %d\n",m1);
printf("最低分为: %d\n",m2);
printf("及格人数为: %d\n",p);
printf("需要查找吗?\n");
printf("输入1继续查找,输入0退出(1/0):");
scanf("%d",&j);
if(j==1)
{
printf("请输入要查找的分数: \n");
scanf("%d",&g);
s=search(score,g);
if(s==0)
printf("没有满足条件的记录");
else
printf("成绩为%d的学生共有%d名\n",g,s);
}
}
int average(int a[])
{
int i;
int aver,sum=a[0];
for(i=1;i<10;i++)
sum=sum+a[i];
aver=sum/10;
return aver;
}
int max(int a[])
{
int i;
int m=a[0];
for(i=1;i<10;i++)
if(m<a[i])
m=a[i];
return m;
}
int min(int a[])
{
int i;
int m=a[0];
for(i=1;i<10;i++)
if(m>a[i])
m=a[i];
return m;
}
int pass(int a[])
{
int i;
int s=0;
for(i=0;i<10;i++)
if(a[i]>=60)
s++;
return s;
}
int search(int a[],int g)
{
int i;
int s=0;
for(i=0;i<10;i++)
if(a[i]==g)
s++;
return s;
}
6、已有一个已排好次序的数组,要求输入一个数后,按原先排序的规律将它插入数组中。
Void main()
{int a[11]={1,4,6,9,13,16,19,28,40,100};
int temp1,temp2,number,end,i,j;
printf("初始数组如下:");
for (i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
printf("输入插入数据:");
scanf("%d",&number);
end=a[9];
if(number>end)
a[10]=number;
else
{for(i=0;i<10;i++)
{ if(a[i]>number)
{temp1=a[i];
a[i]=number;
for(j=i+1;j<1;j++)
{temp2=a[j];
a[j]=temp1;
temp1=temp2;
}
break;
}
}
}
for(i=0;i<11;i++)
printf("a%6d",a[i]);
}
7、编写一个函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字字符间空一个空格。如输入1990,应输出“1 9 9 0”。
#include <iostream>
void main()
{
void stradd(char str[]);
char str[80];
printf("输入一串数字\n\n");
gets(str);
stradd(str);
printf("\n\n加空格后的字符串\n\n");
puts(str);
}
void stradd(char str[])
{
char a[80];
int i=0,j;
for(j=0;str[j]!='\0';j++)
{
a[i]=str[j];
a[i+1]=' ';
i+=2;
}
a[i]='\0';
for(i=0;a[i]!='\0';i++)
{
str[i]=a[i];
}
str[i]='\0';
}
8、编写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。(要求用指针实现)
#include "stdioh"
int stringlength( char *str )
{int n;
n=0;
While(str!=0)
{n++;
str++;
}
Return(n);
}
int main()
{
char str〔100〕,
int len,
printf("Please input a string: "),
scanf("%s"str),
len = stringlength( str ),
printf("The string’s length is %d"len),
return 0;
}
9、编写一个程序,打入月份号,输出该月的英文月名 n。例如,输入“3”则输出“March”,要求用指针数组处理。
#include <stdioh>
main()
{ char month_name[13]={"illegal month","January","February","March","April",
"May","June","July","August","September","October","November","December"};
int n;
printf("Input month: ");
scanf("%d",&n);
if((n<=12)&&(n>=1))
printf("It is %s\n",(month_name+n));
else
printf("It is wrong\n");
}
10、将一个数组中的值按逆序重新存放。例如,输入的数组顺序为8,6,5,4,1,要求改为1,4,5,6,8。
#include <stdioh>
#define N 5;
void main()
{
int a[N],i,temp;
printf(“enter array a:\n”);
for(i=0;i<N;i++)
scanf(“%d”,&a[i]);
printf(“array a:\n”);
for(i=0;i<N;i++)
{temp=a[i];a[i]=a[N-i-1];a[N-i-1]=temp;}
printf(“\nNow, array a:\n”);
for(i=0;i<N;i++)
printf(“%4d”,a[i]);
printf(“\n”);
}
11、编写一个函数用“起泡法”对输入的10个字符按由小到大顺序排序(要用函数)。
#include <stdioh>
void main()
{ char str[80];
void sort(char str[]);
printf("输入一个字符串\n\n");
gets(str);
sort(str);
printf("\n\n字符由小到大排序为:\n\n");
puts(str);
}
void sort(char str[])
{ int i,j;
char temp;
for(i=0;i<strlen(str);i++)
{
for(j=0;j<strlen(str)-i-1;j++)
{
if(str[j]>str[j+1])
{
temp=str[j];
str[j]=str[j+1];
str[j+1]=temp;
}
}
}
}
12、将数组a中n个整数按相反顺序存放(要用函数)。
#include <stdioh>
void inv(int x[ ],int n)/形参x是数组名/
{
int temp,i,j,m=(n-1)/2;
for(i=0;i<=m;i++)
{j=n-1-i;
temp=x[i];x[i]=x[j];x[j]=temp;}
return;
}
void main()
{ int i,a[10]={3,7,9,11,0,6,7,5,4,2};
printf(“转换前的数组为:\n");
for(i=0;i<10;i++)
printf("%d,",a[i]);
printf("\n");
inv(a,10);
printf(“转换后的数组为:\n");
for(i=0;i<10;i++)
printf("%d,",a[i]);
printf("\n");
}
13、输入一行文字,找出期中大写字母、小写字母、空格、数字及其他字符各有多少?(要求用指针实现)
#include<stdioh>
#include<stringh>
int main()
{
char str[40];//创建字符串数组
int count[5]={0,0,0,0};//创建计数器数组并初始化
printf("Please input a string \n");
scanf("%s",str);
char p=str;//指针p指向字符串数组str
int n=strlen(str);//确定输入字符串的长度
for(int i=0;i<n;i++)
{
if((p+i)>='A'&&(p+i)<='Z')
{
count[0]++;//统计大写字母数目
}
else if((p+i)>='a'&&(p+i)<='z')
{
count[1]++;//统计小写字母数目
}
else if((p+i)>='0'&&(p+i)<='9')
{
count[2]++;//统计数字数目
}
else if((p+i)=='')
{
count[3]++;//统计空格数目
}
else
{
count[4]++;//统计其他字符数目
}
}
printf("大写字母 小写字母 数字 空格 其他字符:\n");
for(i=0;i<5;i++)
{
printf("%d\t ",count[i]);//打印各统计数目
}
printf("\n\n");
return 0;
}
14、编写一个函数,将两个字符串连接。
#include < stdioh >
#include<stringh>
void concatenate(char string1[],char string2[],char string[])
{
int i,j;
for(i=0;string1[i]!=’\0’;i++)
string[i]=string1[i];
for(j=0;string2[j]!=’\0’;j++)
string[i+j]=string2[j];
string[i+j]=’\0’;
}
void main()
{
char s1[100],s2[100],s[100];
printf(“input string1:”);
scanf(“%s”,s1);
printf(“input string2:”);
scanf(“%s”,s2);
concatenate(s1,s2,s)
printf(“the new string is %s”,s);
}
15、输入3个字符串,按照由小到大的顺序输出。 (要求用指针实现)
#include <stdioh>
void main()
{
void sort (inta, intb,intc);
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
sort(&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
void sort (int a, int b,int c)
{
int tmp;
if (a>b)
{
tmp=a;
a=b;
b=tmp;
}
if (a>c)
{
tmp=a;
a=c;
c=tmp;
}
if (b>c)
{
tmp=b;
b=c;
c=tmp;
}
}
16、输入10整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数:1、输入10个数; 2、进行处理; 3、输出10个数(数据对换要求用指针实现)
#include <stdioh>
void input(int number[])
{
Int I;
Printf(“input 10 numbers:”);
For(i=0;i<10;i++)
Scanf(“%d”,&number[i]);
}
void max_min_value(int number[])
{
int max,min,p,temp;
max=min=number;
For(p=number+1;p<number+10;p++)
if(p>max)
max=p;
else if(p<min)
min=p;
temp=number[0];number[0]=min;min=temp;
if(max=number) max=min;
temp=number[9];number[9]=max;max=temp;
}
void output(int number[])
{
int p;
printf(“Now, they are: “);
for(p=number;p<number+10;p++)
Printf(“%d”,p);
printf(“\n”);
}
void main()
{
int number[10];
input(number);
max_min_value(number);
output(number);
}
答案:
26功能:求a,b,c中的最大值。首先把a的值赋给m,当b大于c时,m(即a)与
与a比较,当m小于b是,把b的值赋给m,后面一样的道理。
27while(表达式1;表达式2;表达式3)表达式4;
其中表达式1,2,3,4都可以省略,但是分号不能够
省略;当表达式2的值为真的时候执行表达式4,若为假,则跳出while循环
执行后面的语句。
28(1)
int num[10];
num[10]={0,1,2,3,4,5,6,7,8,9};
(2)
int num[10],nptr;
num[10]={0,1,2,3,4,5,6,7,8,9};
nptr=num;
(3)
nptr+8是指num[7]的地址值;(nptr+8)是指元素num[7],即(nptr+8)==num[7]
(4)
nptr- =4指向元素num[1]的地址
29
printf("id=%d\tnum=%s\tarea=%f\n",p->id,p->name,p->area);
30
a
97,A,141
31
结果:abcdefghijklmnopqrstuvwxyz
功能:通过while语句输出a到z的小写字母
32
3次
结果:8
33
x=8,y=5
a=5,b=8
做了差不多有一个小时,好累
第一题
int main() {int a = 0, b = 1, c = 1, d, i;
printf("%d %d", b, c);
for (i = 3; i <= 20; i++){
d = c + 2 b + a;
printf(" %d", d);
a = b;
b = c;
c = d;
}
printf("\n");
return 0;
}
第二题
int main() {int i, j, sum;
for (i = 1; i <= 1000; i++){
sum = 0;
for (j = 1; j < i; j++){
if (i % j == 0) {
sum = sum + j;
}
}
if (sum == i) {
printf("%d:", i);
for (j = 1; j < i; j++) {
if (i%j == 0) {
printf(" %d", j);
}
}
printf("\n");
}
}
return 0;
}
第三题
int main() {int i, num = 0, j, prime;
for (i = 100; i < 1000; i++) {
prime = 1;
for (j = 2; j < i; j++) {
if (i%j == 0) {
prime = 0;
}
}
if (prime) {
num = num + 1;
printf("%d ", i);
}
}
printf("\nTotal: %d\n", num);
return 0;
}
#include<stdioh>
#include<conioh>
int main(void)//也就是a或者b有一项为2或者1时,有必胜方法
{
int i, T, a[50] = { 0 }, b[50] = { 0 }, c[50] = { 0 };
scanf("%d", &T);
for (i = 0; i < T; ++i)
{
scanf("%d", &a[i]);
scanf("%d", &b[i]);
if (a[i] == 1 || a[i] == 2 || b[i] == 1 || b[i] == 2)
c[i] = 1;
}
for (i = 0; i < T; ++i)
{
if (c[i] == 1)
printf("YES\n");
else
printf("NO\n");
}
getch();
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)