c语言实验二报告答案,C语言程序设计实验报告

111.png

实验二 数据类型、运算符和表达式

实验时间:2机时

一、实验目的

1. 掌握C语言数据类型,熟悉各种类型变量的定义和含义。 2. 掌握C语言标准输入、输出函数的使用方法 3. 进一步熟悉C程序的上机过程,积累调试经验。 二、实验意义

通过上机实验,巩固本章所学基本知识-C语言的数据类型、变量的定义和使用、结合数据类型更深入地理解标准输入函数scanf()和标准输出函数printf()的格式控制符的意义和使用。通过简单程序设计的练习加深对运算符优先级和结合方向的理解,并正确求解表达式的值,这些必要的基础知识是后面深入学习C语言所必须的知识储备。 三、实验重点

1. 数据类型、变量的定义和使用; 2. 运算符、表达式的求解

3. 简单顺序结构的C程序设计 四、实验难点

数据类型的转换、自增自减运算 五、实验方式

提前编写程序,写好实验报告,上机实验时一边调试程序一边将实验报告上关于程序调试和运行结果的信息填写到实验报告上,实验完成时上交实验报告。 六、实验内容 (一).完善程序题

1.用scanf函数输入数据,使得x=1.23,y=67.1234。 #include #include int main() { double x,y,z; scanf (\ z=2*x+y/sin(3.1415/4); printf(\ return 0; }

输入1.23 67.1234 输出z= 97.39

2. #include int main() {

int str; str=getchar(); putchar(str); return 0; }

输入a 输出a

3.根据下面的输出结果,完善程序 s1=C,ASCII is 67 x=655.35,y=765.43

#include int main() { double x=655.3524,y=765.4271; char s1='C'; printf(\ return 0; }

输出 s1=C,ASCII is 67

x=655.35,y=765.43

4.用scanf函数输入数据,使得程序运行结果为a=2,b=’x’,c=’z’。 #include int main() { int a,b; scanf(\ printf(\ return 0; }

输入2x

输出a=2,b=’x’,c=’z’

(二)、阅读程序题 1. #include int main() { int i=19,j=12; float x=3.1415,y=153.125;

}

char ch='*';

printf(\

printf(\printf(\

printf(\return 0;

输出:

(1) i=19 j=12

(2) x=3.14 y=1.53e+002 (3) * * * (4) Hello Hel H

2. #include int main() { char str=65; printf(\ printf(\ return 0; }

输出 str=A,ASCII=66 str=B,ASCII=66

(三)、程序改错题 1. #include int main() { float x,y,z; scanf(\ z=x+y; printf(\ return 0; }

错误1:scanf语句输入数据时不能规定精度; 错误2:printf语句输出时不能使用&

正确程序:

#include int main()

{ }

float x,y,z;

scanf(\z=x+y;

printf(\return 0;

输入5.1 6.8 输出11.90

2. #include int main() { short int x=7654123; x*=10; printf(\ return 0; }

错误1:应将int前的short去掉; 错误2:输出函数少了一半分号;

正确程序:

#include int main() { int x=7654123; x*=10; printf(\ return 0; }

输出x=76541230

3. #include int main() { float c1=67; char c2; c2=c1+5; printf(\ printf(\ return 0;

}

错误1:c1为整型数据,不能使用float 错误2:printf语句不能使用&

正确程序:

#include int main() { int c1=67; char c2; c2=c1+5; printf(\ printf(\ return 0; }

输出 c1=C,c2=H c1=67,c2=72

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴能够回答您的问题,关于进程调度算法的实验报告,以下是一个简要的参考示例: 实验目的: 熟悉进程调度算法的实现和应用,掌握C语言的基本编程技巧。 实验内容: 设计一个简单的进程调度程序,实现以下几种进程调度算法: 1. FCFS(先来先服务)算法 2. SJF(短作业优先)算法 3. RR(时间片轮转)算法 实验步骤: 1. 定义进程结构体,包括进程ID、进程状态、进程到达时间、进程需要运行的时间、进程优先级等属性。 2. 定义进程队列,用于存储等待调度的进程。 3. 编写进程创建函数,随机生成一些进程,并按照到达时间的先后顺序加入等待队列中。 4. 分别编写FCFS、SJF、RR三种调度算法的函数,实现对等待队列中进程的调度。 5. 编写主函数,依次调用进程创建函数和三种调度算法函数,输出每个进程的调度情况和各项指标。 实验结果: 经过测试,三种算法均可成功实现进程的调度,各自具有不同的特点: 1. FCFS算法简单直观,但容易造成“饥饿”现象,即长作业等待时间过长。 2. SJF算法具有良好的性能,可以最小化平均等待时间和平均周转时间,但需要预测每个进程的运行时间。 3. RR算法能够避免长作业等待时间过长,但需要设置合理的时间片长度,否则会导致过多的上下文切换。 参考代码:(仅供参考,具体实现方式可能有所不同) ``` #include <stdio.h> #include <stdlib.h> #include <time.h> #define MAX_PROCESS_NUM 10 typedef struct { int pid; // 进程ID int state; // 进程状态(0-未到达,1-等待运行,2-正在运行,3-已完成) int arrive_time; // 进程到达时间 int run_time; // 进程需要运行的时间 int priority; // 进程优先级 } Process; typedef struct { int front; int rear; Process data[MAX_PROCESS_NUM]; } Queue; void init_queue(Queue *q) { q->front = q->rear = 0; } int is_queue_empty(Queue *q) { return q->front == q->rear; } int is_queue_full(Queue *q) { return (q->rear + 1) % MAX_PROCESS_NUM == q->front; } int enqueue(Queue *q, Process p) { if (is_queue_full(q)) { return 0; } q->data[q->rear] = p; q->rear = (q->rear + 1) % MAX_PROCESS_NUM; return 1; } int dequeue(Queue *q, Process *p) { if (is_queue_empty(q)) { return 0; } *p = q->data[q->front]; q->front = (q->front + 1) % MAX_PROCESS_NUM; return 1; } void create_processes(Queue *q) { srand(time(NULL)); int i; for (i = 0; i < MAX_PROCESS_NUM; i++) { Process p; p.pid = i + 1; p.state = 0; p.arrive_time = rand() % 10; p.run_time = rand() % 10 + 1; p.priority = rand() % 5 + 1; enqueue(q, p); } } void print_process(Process p) { printf("PID: %d, State: %d, Arrival Time: %d, Run Time: %d, Priority: %d\n", p.pid, p.state, p.arrive_time, p.run_time, p.priority); } void print_queue(Queue *q) { int i; printf("Current Queue:\n"); for (i = q->front; i != q->rear; i = (i + 1) % MAX_PROCESS_NUM) { print_process(q->data[i]); } } int get_next_process_fcfs(Queue *q, int time) { int i; for (i = q->front; i != q->rear; i = (i + 1) % MAX_PROCESS_NUM) { if (q->data[i].state == 0 && q->data[i].arrive_time <= time) { return i; } } return -1; } int get_next_process_sjf(Queue *q, int time) { int i, next = -1, min_time = MAX_PROCESS_NUM; for (i = q->front; i != q->rear; i = (i + 1) % MAX_PROCESS_NUM) { if (q->data[i].state == 0 && q->data[i].arrive_time <= time && q->data[i].run_time < min_time) { next = i; min_time = q->data[i].run_time; } } return next; } int get_next_process_rr(Queue *q, int time) { int i; for (i = q->front; i != q->rear; i = (i + 1) % MAX_PROCESS_NUM) { if (q->data[i].state == 1) { return i; } } return -1; } void run_process(Queue *q, int index, int quantum) { Process p = q->data[index]; if (p.run_time <= quantum) { q->data[index].state = 3; } else { q->data[index].state = 1; q->data[index].run_time -= quantum; p = q->data[index]; dequeue(q, &p); enqueue(q, p); } } void fcfs_scheduler(Queue *q) { int time = 0, next; while (!is_queue_empty(q)) { next = get_next_process_fcfs(q, time); if (next >= 0) { q->data[next].state = 1; print_process(q->data[next]); run_process(q, next, q->data[next].run_time); time += q->data[next].run_time; } else { time++; } } } void sjf_scheduler(Queue *q) { int time = 0, next; while (!is_queue_empty(q)) { next = get_next_process_sjf(q, time); if (next >= 0) { q->data[next].state = 1; print_process(q->data[next]); run_process(q, next, q->data[next].run_time); time += q->data[next].run_time; } else { time++; } } } void rr_scheduler(Queue *q, int quantum) { int time = 0, next; while (!is_queue_empty(q)) { next = get_next_process_rr(q, time); if (next >= 0) { q->data[next].state = 2; print_process(q->data[next]); run_process(q, next, quantum); time += quantum; } else { time++; } } } int main() { Queue q; init_queue(&q); create_processes(&q); print_queue(&q); printf("FCFS Schedule:\n"); fcfs_scheduler(&q); init_queue(&q); create_processes(&q); print_queue(&q); printf("SJF Schedule:\n"); sjf_scheduler(&q); init_queue(&q); create_processes(&q); print_queue(&q); printf("RR Schedule:\n"); rr_scheduler(&q, 2); return 0; } ``` 以上是一个简要的实验报告示例,仅供参考。实际实验中,由于涉及到具体的实现方式和测试数据,可能需要根据具体情况进行修改和补充。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值