C语言实习(一)

文章介绍了C语言编程中的四个练习题,涉及数据顺序调整、单链表中节点阶乘和的计算、任务调度以及判断年月天数和正负数的数字和问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言实习题四——4.数据顺序调整

内存限制:128 MB时间限制:1.000 S

评测方式:文本比较命题人:外部导入

题目描述

由键盘任意输入10个数,将最大数调到最前面,最小数调到最后面。

输入

任意10个数

输出

数据调整后的10个数。

样例输入 复制
0 1 2 3 4 5 6 7 8 9
样例输出 复制
9 1 2 3 4 5 6 7 8 0
#include<stdio.h>
int main(){ 
   int i,m,n;
   int d1,d2,x1,x2;
   int a[10];
   for(i=0;i<10;i++){
   	  scanf("%d",&a[i]);
   }
   d1=a[0];
   d2=0;
   for(i=1;i<10;i++){
   	   if(a[i]>d1){
   	   	   d1=a[i];
   	   	   d2=i;
		} 
   }
   m=a[0];
   a[0]=d1;      
   a[d2]=m;    
        
    x1=a[0];
    x2=0;
    for(i=1;i<10;i++){
		if(a[i]<x1){
			x1=a[i];
			x2=i;
		}
   }
    n=a[9];
    a[9]=x1;
    a[x2]=n;

   for(i=0;i<9;i++){
   	   printf("%d ",a[i]);
   } 
   printf("%d\n",a[9]);
   return 0;
} 

C语言实习题八——单链表结点的阶乘和

内存限制:128 MB时间限制:1.000 S

评测方式:文本比较命题人:外部导入

题目描述

要求实现一个函数,求单向链表L中所有结点的Data域的阶乘和。默认所有结点的值非负,且题目保证结果在int范围内。
函数接口定义:int FactorialSum( List L );
其中单链表List的定义如下:
typedef struct Node *PtrToNode;
struct Node {
    int Data; /* 存储结点数据 */
    PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
函数功能:汇总链表所有结点Data域对应的整数的阶乘之和。

转载自:C语言:求单链表结点的阶乘和_本题要求实现一个函数,求单链表l结点的阶乘和。这里默认所有结点的值非负,且题目-优快云博客

#include <stdio.h>
#include <stdlib.h>

typedef struct Node *PtrToNode;
struct Node {
    int Data; /* 存储结点数据 */
    PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */

int FactorialSum( List L );

int main()
{
    int N, i;
    List L, p;

    scanf("%d", &N);
    L = NULL;
    for ( i=0; i<N; i++ ) {
        p = (List)malloc(sizeof(struct Node));
        scanf("%d", &p->Data);
        p->Next = L;  L = p;
    }
    printf("%d\n", FactorialSum(L));

    return 0;
}
//单链表遍历方法1,用指针
int FactorialSum( List L ){
	int sum = 0;
	PtrToNode p = L;
	while(p != NULL){
		int val = p->Data, i, fac = 1;
		//对val求阶乘
		for(i = val;i > 1;i--){
			fac *= i;
		}
		sum += fac;
		p = p->Next;
	}
	return sum;
}

 C语言实习题八——任务调度问题

内存限制:128 MB时间限制:1.000 S

题目描述

操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。当中,系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。函数scheduler实现例如以下功能,将task[] 中的任务依照系统任务、用户任务依次存放到 system_task[] 数组和 user_task[] 数组中(数组中元素的值是任务在task[] 数组中的下标),而且优先级高的任务排在前面,优先级同样的任务依照入队顺序排列(即先入队的任务排在前面),数组元素为-1表示结束。
      比如:task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99}   则 system_task[] = {0, 3, 1, 7, -1}    user_task[] = {4, 8, 2, 6, -1}
       函数接口规定:  void scheduler(int task[], int n, int system_task[], int user_task[])

#include<stdio.h>
#define N 100
void scheduler(int task[],int n,int system_task[],int user_task[]){
	int i,j;
    int s,u;
	s=u=0;
	for(i=0;i<n;i++){
		if(task[i]<50){
			system_task[s]=i;
			s++;
		}else if(task[i]>=50 && task[i]<=255){
			user_task[u]=i;
			u++;
		}
	}
	
	//到目前为止s和u表示两个数组的长度 
	printf("未排序前:");
	for(i=0;i<s;i++){
		printf("%d ",system_task[i]);
	}
	printf("\n");
		for(i=0;i<u;i++){
		printf("%d ",user_task[i]);
	}
	printf("\n");

	

	int t,temp,q;
	for(i=0;i<s-1;i++){
		for(j=i+1;j<s;j++){
			t=system_task[i];
			q=system_task[j];
			if(task[t]>task[q]){
				temp = system_task[i];
				system_task[i] = system_task[j];
				system_task[j] =temp;
			}
		}
	}	
	system_task[s]=-1; //此时数组长度为s+1 
	
	for(i=0;i<u-1;i++){      //选择排序 
		for(j=i+1;j<u;j++){
			t=user_task[i];
			q=user_task[j];
			if(task[t]>task[q]){
				temp = user_task[i];
				user_task[i] = user_task[j];
				user_task[j] =temp;
			}
		}
	}
	user_task[u]=-1;	//此时数组长度为u+1 
	//排序后 
	for(i=0;i<s+1;i++){
		printf("%d ",system_task[i]);
	}
	printf("\n");
		for(i=0;i<u+1;i++){
		printf("%d ",user_task[i]);
	}
	printf("\n"); 
	
}

int main(){
	int task[]={0, 30, 155, 1, 80, 300, 170, 40, 99};
	int n;
	n=9;
	int user_task[N]={0};
	int system_task[N]={0};

	scheduler(task, n, system_task, user_task);
}

问题 AX: 计算某年某月对应天数

内存限制:128 MB时间限制:1.000 S

评测方式:文本比较命题人:外部导入

题目描述

输入年份和月份信息,编程判断年份月份的合法性,并在输入不合法时提示错误并退出程序,合法时输出该月对应天数(要求:1000<年份<3000、0<月份<13)

输入

年份和月份信息

输出

当年份不合法时,输出“invalid year!”并退出,当月份不合法时,输出“invalid month!”并退出,合法时输出该月对应天数

样例输入 复制
2000 2
样例输出 复制
29
提示

1)1,3,5,7,8,10,12月份是大月,4,6,9,11月份是小月,其天数只跟月份有关,2月份的天数跟平年闰年有关; 2)建议用函数days(int year, int month)计算year和month对应的天数,以在主函数中调用该函数实现计算天数; 3)所有提示信息中的符号均为英文状态下.

#include<stdio.h>
void days(year,month);
int main(){
	int year,month;
    scanf("%d %d",&year,&month);
    days(year,month);
    return 0;
}
void days(year,month){
	if(year<=1000 || year>=3000){
		printf("invalid year!\n");
	}else {
	switch(month){
		case 1: case 3: case 5: case 7: case 8: case 10: case 12:
			printf("31\n");
			break;
		case 4: case 6: case 9: case 11:
			printf("30\n");
			break;
		case 2:
			if((year%4==0 && year%100 !=0) || (year%400==0) ){
				printf("29\n");
				break;
			}else{
				printf("28\n");
				break;
			}
		default:
			printf("invalid month!\n");
			break;
	}	
    }
}

问题 AY: 正负号与数字和

内存限制:128 MB时间限制:1.000 S

评测方式:文本比较命题人:外部导入

题目描述

输入一个整数,判断其正负号并计算各位数字之和。 

输入

一个不超过7位的整数

输出

"P"或"N",及各位数字之和。正数输出"P",负数输出"N",与数字和之间用一个逗号隔开

样例输入 复制
456
样例输出 复制
P,15
提示

参考教材P73,程序numdigit.c

代码

#include<stdio.h>
int main(){
	int sum,m,t;
	sum=0;
	scanf("%d",&m);
	if(m>0){
		printf("P,");
	}
	else if(m<0){
		printf("N,");
		m=-m;
	}
	while(m!=0){
		t=m%10;
		sum +=t;
		m=m/10;
	}
	printf("%d",sum);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值