1. 程序设计基础 C语言习题答案
1、
10,12,a
i=2
E
2、
#include<stdio.h>
main()
{
intn,sum=0;
scanf("%d",&n);
while(n!=0){
sum=sum+n%10;
n=n/10;
}
printf("sum=%d",sum);
}
3、
#include<stdio.h>
intmain()
{
intup=0,low=0;
chararray[100]={0};
gets(array);
for(inti=0;i<100;i++){
if(array[i]>='a'&&array[i]<='z'){
up++;
}elseif(array[i]>='A'&&array[i]<='Z'){
low++;
}
}
printf("大写字母个数:%d,小写字母个数:%d",up,low);
return0;
}
4、
#include<stdio.h>
intmain()
{
floatscore[10]={0};
floatsum=0;
intpass=0;
floatave=0;
for(inti=0;i<10;i++){
scanf("%g",&score[i]);
sum+=score[i];
if(score[i]>=60){
pass++;
}
}
ave=sum/10.0;
printf("平均分%g ",sum/10.0);
printf("及格人数%d ",pass);
printf("高于平均分的分数: ");
for(inti=0;i<10;i++){
if(score[i]>=ave){
printf("%g ",score[i]);
}
}
return0;
}
2. 帮忙设计一个C语言程序
#include<stdio.h>
void addeven(int num)
{
float sum = 0.0f;
int i = 0;
for(i = 2; i <= num; i += 2)
sum += (float)1/i;
if( num <= 10)
{
for(i = 2; i < num; i += 2)
printf("1/%d + ", i);
printf("1/%d = %.3f\n", i, sum);
}
else
{
for(i = 2; i <= 10; i += 2)
printf("1/%d + ", i);
printf("… + 1/%d = %.3f\n", num, sum);
}
}
void addodd(int num)
{
float sum = 0.0f;
int i = 0;
for(i = 1; i <= num; i += 2)
sum += (float)1/i;
if( num <= 10)
{
for(i = 1; i < num; i += 2)
printf("1/%d + ", i);
printf("1/%d = %.3f\n", i, sum);
}
else
{
for(i = 1; i <= 9; i += 2)
printf("1/%d + ", i);
printf("… + 1/%d = %.3f\n", num, sum);
}
}
int main()
{
int num = 0;
char ch;
do
{
printf("请输入一个正整数:");
scanf("%d",&num);
getchar();
if(0 == num%2)
addeven(num);
else
addodd(num);
printf("是否继续输入(y/n)?\n");
ch = getchar();
}while(ch == 'y' || ch == 'Y');
return 0;
}
3. C语言编程题目
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode {
int data;
LNode *next;
}LNode, *LinkList;
typedef struct {
int *Num;
int top;
int stackment; // 停车场最大的停车辆
}SqStack;
typedef LinkList QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
}LinkQueue;
void InitStack(SqStack &S);
void InitQueue(LinkQueue &Q);
void PutIn(SqStack &S, LinkQueue &Q);
void GetOut(SqStack &S, LinkQueue &Q);
void StackTraverse(SqStack S);
void QueueTraverse(LinkQueue Q);
int main()
{
char ch, c;
SqStack S; LinkQueue Q;
InitStack(S); InitQueue(Q);
while(1)
{
fflush(stdin);
printf("*** 进入停车场: 'A' ***\n");
printf("*** 退出停车场: 'D' ***\n");
printf("*** 退出操作: '0' ***\n");
printf("\n请输入命令: ");
ch = getchar();
c = getchar();
switch(ch)
{
case 'A': PutIn(S, Q); break;
case 'D': GetOut(S, Q); break;
case '0': exit(-1);
default: printf("输入有误!\b");
exit(-1);
}
StackTraverse(S);
QueueTraverse(Q);
}
return 0;
}
void PutIn(SqStack &S, LinkQueue &Q)
{
int i, n, tag = 0; LNode *p, *q;
q = (LNode *)malloc(sizeof(LNode));
if(q == NULL)
{
printf("内存分配失败!\n");
exit(-1);
}
while(!tag)
{
printf("请输入车号: ");
scanf("%d", &n);
for(i = 0; i <= S.top; i++) // 若车号在堆栈已存在
if(n == S.Num[i])
{
printf("车号已存在! 请重新输入!\n");
break;
}
if(i > S.top)
tag = 1;
q = Q.front->next; // 若车号在队列中存在
while(q != NULL && Q.front != Q.rear)
{
if(q->data == n)
{
printf("车号已存在! 请重新输入!\n");
tag = 0;
break;
}
else q = q->next;
}
}
if(S.top != 4) // 若栈不满
S.Num[++S.top] = n;
else // 若栈满,则进入队列
{
p = (LNode *)malloc(sizeof(LNode));
if(p == NULL)
{
printf("内存分配失败!\n");
exit(-1);
}
p->data = n;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
}
}
void GetOut(SqStack &S, LinkQueue &Q)
{
int i, n, tag = 0;
LNode *p; SqStack S1;
InitStack(S1);
if(S.top < 0) // 停车场空
{
printf("停车场已空!情况如下!\n\n");
return;
}
while(!tag)
{
printf("请输入车号: ");
scanf("%d", &n);
for(i = 0; i <= S.top; i++)
if(n == S.Num[i]) // 若车号存在
tag = 1;
if(tag == 0) // 若车号不存在
printf("车号不存在! 请重新输入!\n");
}
for(i = S.top; S.Num[i] != n; i--) // 挡路的车进临时栈
S1.Num[++S1.top] = S.Num[S.top--];
S.top--;
for(i = S1.top; i >= 0; i--) // 临时栈的车重新入栈
S.Num[++S.top] = S1.Num[S1.top--];
if(Q.front != Q.rear) // 若便道有待进栈的车
{
p = (LNode *)malloc(sizeof(LNode));
if(p == NULL)
{
printf("内存分配失败!\n");
exit(-1);
}
p = Q.front->next;
S.Num[++S.top] = p->data;
Q.front ->next = p->next ;
free(p);
}
}
void InitStack(SqStack &S)
{
S.stackment = 5;
S.Num = (int *)malloc((S.stackment-1) * sizeof(int));
if(S.Num == NULL)
{
printf("内存分配失败!\n");
exit(-1);
}
S.top = -1;
}
void InitQueue(LinkQueue &Q)
{
LNode *head;
head = (LNode *)malloc(sizeof(LNode));
if(head == NULL)
{
printf("内存分配失败!\n");
exit(-1);
}
Q.front = head;
Q.rear = head;
Q.front->next = NULL;
}
void StackTraverse(SqStack S)
{
int i;
printf("停车场的情况:\n");
printf("┏━━━━━━━━\n");
printf("┃");
for(i = 0; i <= S.top; i++)
printf(" %d", S.Num[i]);
printf("\n┗━━━━━━━━\n");
}
void QueueTraverse(LinkQueue Q)
{
LNode *p;
p = (LNode *)malloc(sizeof(LNode));
if(p == NULL)
{
printf("内存分配失败!\n");
exit(-1);
}
printf("便道的情况:\n");
printf(" ━━━━━━━━\n");
p = Q.front->next;
while(p != NULL && Q.front != Q.rear)
{
printf(" %d", p->data);
p = p->next;
}
printf("\n ━━━━━━━━\n");
}
题目有点出入,这是我以前写的,自己适当的加一点代码吧。
附我的编程题目:设停车场内只有一个可停放几辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,由于停车场是狭长的通道,在它之后开入停车场的车辆必须先退出车场为它让路,待该辆车开出大门外后,为它让路的车辆再按原次序进入车场。在这里假设汽车不能从便道上开走。试设计一个停车管理程序。
1、接受命令(A:入,D:出)和车号,若是汽车要进停车场,先判断停车场栈是否满,若不满,则汽车入栈,否则汽车入便道队列等候。
2、若是汽车要离开停车场,为该汽车让路,将停车场栈上若干辆汽车入临时栈,等这辆汽车出停车场后,临时栈中的汽车出栈,再回到停车场栈,然后看便道队列是否为空,若不空,则说明有汽车等候,从队头取出汽车号,让该车入停车场栈。
3、重复1、2直到为退出命令(车号为0或负数)。