欢迎光临
我们一直在努力

sse哈工大C语言编程练习14

2026年1月24日

收获:

1.两个数字之间用空格隔开,则最后一个数字输出后没有空格。 2.只有第一个数就输入-1时,才输出over!其他情况下不输出,需要具体判断。 3.递归方法是在一个函数中调自己本身,体现了分治的思想,每一步处理一个数字位,直到处理完所有位数,注意递归停止的条件。 4.密码处理时要以’a’或’A’作为起始值,‘a’+25就是’z’。 5.计算注意加括号,计算时间要从起始小时数加上经过的小时再加分钟的进位,对24取余得到。

题目:

1、Q6497.(语言: C)给定一个[10,100]闭区间范围内的正整数N,编写函数void func(int N, int prime[], int *prime_count, int composite[], int *composite_count);,实现将大于等于2小于等于N的整数按是否为素数分成两类。

要求: (1)输入:N为整数,若输入数据不在题目要求范围内,输出错误提示"Input error! Please input an integer N, 10<=N<=100.\\n",并重新输入。 (2)素数存放在指针prime指向的数组中,指针prime_count指向的位置存放素数个数,合数存放在指针composit指向的数组中,指针composite_count指向的位置存放合数的个数。 (3)输出:共输出四行。第一行输出素数的个数;第二行输出所有的素数,两个数字之间用空格隔开;第三行输出合数的个数;第四行输出所有的合数,两个数字之间用空格隔开。

程序示例1: 10↙ 4 2 3 5 7 5 4 6 8 9 10

程序示例2: 120↙ Input error! Please input an integer N, 10<=N<=100.

#include <stdio.h>
#include <math.h>
void func(int N,int prime[],int *prime_count,int composite[],int *composite_count);
int isPrime(int n);
int main()
{
int n,flag=1,prime[100],prime_count=0,composite[100],composite_count=0;
while(flag){
scanf("%d",&n);
if(n<10 || n>100){
printf("Input error! Please input an integer N, 10<=N<=100.\\n");
}else{
flag=0;
}
}
func(n,prime,&prime_count,composite,&composite_count);
printf("%d\\n",prime_count);
for(int i=0;i<prime_count;i++){
printf("%d",prime[i]);
if(i<prime_count1){
printf(" ");
}
}
printf("\\n%d\\n",composite_count);
for(int i=0;i<composite_count;i++){
printf("%d",composite[i]);
if(i<composite_count1){
printf(" ");
}
}
return 0;
}
void func(int N,int prime[],int *prime_count,int composite[],int *composite_count){
int m=2;
while(m<=N){
if(isPrime(m)){
prime[*prime_count]=m;
*prime_count=*prime_count+1;
}else{
composite[*composite_count]=m;
*composite_count=*composite_count+1;
}
m++;
}
}
int isPrime(int n){
if(n==2||n==3) return 1;
if(n%2==0||n%3==0) return 0;
for(int i=5;i<=sqrt(n);i+=6){
if(n%i==0||n%(i+2)==0) return 0;
}
return 1;
}

2、Q3072.(语言: C)检测输入数据中奇数和偶数的个数

从键盘输入一系列正整数,输入-1表示输入结束(-1本身不是输入的数据)。编写程序判断输入数据中奇数和偶数的个数。如果用户输入的第一个数据就是-1,则程序输出"over!"。否则。用户每输入一个数据,输出该数据是奇数还是偶数,直到用户输入-1为止,分别统计用户输入数据中奇数和偶数的个数。

程序运行结果示例1: Please enter the number: 1↙ 1:odd 5↙ 5:odd 8↙ 8:even 9↙ 9:odd 12↙ 12:even 17↙ 17:odd -1↙ The total number of odd is 4 The total number of even is 2

程序运行结果示例2: Please enter the number: -1↙ over! The total number of odd is 0 The total number of even is 0

输入格式: “%d”

输出格式: 输入提示信息:“Please enter the number:\\n” 用户输入的第一个数据就是-1,输出格式:“over!\\n” 奇数的输出格式:“%d:odd\\n” 偶数的输出格式:“%d:even\\n” 输入数据中奇数的个数统计:“The total number of odd is %d\\n” 输入数据中偶数的个数统计:“The total number of even is %d\\n”

#include <stdio.h>
int main()
{
int n,odd=0,even=0;
printf("Please enter the number:\\n");
while(1){
scanf("%d",&n);
if(n==1){
if(odd==0&&even==0){
printf("over!\\n");
}
break;
}else if(n%2==0){
printf("%d:even\\n",n);
even++;
}else{
printf("%d:odd\\n",n);
odd++;
}
}
printf("The total number of odd is %d\\n",odd);
printf("The total number of even is %d\\n",even);
return 0;
}

3、Q377.(语言: C)输入一个正整数,要求以相反的顺序输出该数。用递归方法实现。

**输入格式要求:“%d” 提示信息:“Enter number:” **输出格式要求:“%d\\n” 程序运行示例如下: Enter number:35567899 99876553 迭代方法:

#include <stdio.h>
int main()
{
int n,result;
printf("Enter number:");
scanf("%d",&n);
result=n%10;
while(n/10!=0){
n/=10;
result*=10;
result+=n%10;
}
printf("%d\\n",result);
return 0;
}

递归方法:

#include <stdio.h>
void reverse(int n);
int main()
{
int n;
printf("Enter number:");
scanf("%d",&n);
if(n==0){//处理为0的情况
printf("0");
}else if(n<0){//处理负数
printf("-");
n=n;
}
reverse(n);
printf("\\n");
return 0;
}
void reverse(int n){
if(n==0){//递归返回条件
return;
}
printf("%d",n%10);//输出当前最后一位
reverse(n/10);//递归处理下一位
}

4、Q1315.(语言: C)有一电文,已按下面规律译成密码。

A->Z a->z
B->Y b->y
C->X c->x
… …

即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求编程将密码译回原文,并打印出密码和原文。 输入信息和格式: “请输入字符:” 用gets输入字符串 输出信息和格式: “\\n密码是:%s” “\\n原文是:” putchar或"%c"

程序的运行示例如下: 请输入字符:hello,world! 密码是:hello,world! 原文是:svool,dliow!

#include <stdio.h>
#include <string.h>
int main()
{
char text[200];
gets(text);
printf("请输入字符:");
printf("\\n密码是:%s",text);
printf("\\n原文是:");
for(int i=0;i<strlen(text);i++){
if(text[i]=='a' || text[i]=='A'){
text[i]+=25;
}else if(text[i]<='z'&&text[i]>'a'){
text[i]='a'+25text[i]+'a';
}else if(text[i]<='Z'&&text[i]>'A'){
text[i]='A'+25text[i]+'A';
}
printf("%c",text[i]);
}
return 0;
}

5、Q6467.(语言: C)已知火车从A站出发时间是23:45,经过h小时m分,到达B站,请输入h和m并计算火车到达B站的时间,并输出。

注意!!!先考虑分钟的进位,再考虑小时的进位。

程序运行结果示例: 请输入h:m 2:55 时间为:2:40

程序运行结果示例: 请输入h:m 0:25 时间为:0:10

输入提示:“请输入h:m\\n” 输入格式:“%d:%d” 输出格式:“时间为:%d:%d”

#include <stdio.h>
int main()
{
int hour=23,min=45,h,m;
printf("请输入h:m\\n");
scanf("%d:%d",&h,&m);
printf("时间为:%d:%d",((min+m)/60+hour+h)%24,(min+m)%60);
return 0;
}

赞(0)
未经允许不得转载:171主机测评 » sse哈工大C语言编程练习14
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址