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);
}