2021-12-06 自动化专业C语言上机作业参考答案11
2021-12-06 自动化专业C语言上机作业参考答案11
·
上机练习11
p137.c
/*
编写一程序P137.C实现以下功能
通过键盘输入两个姓名(约定均为汉字且最多4个汉字),判断并输出二者是否同姓。
编程可用素材:
printf("请输入姓名1: ");
printf("请输入姓名2: ");
printf("\n“…”与“…”同姓。\n"…);
printf("\n“…”与“…”不同姓。\n"…);
*/
#include <stdio.h>
#define N 9
int main(void)
{
char name1[N];
char name2[N];
printf("请输入姓名1: ");
scanf("%s", name1);
printf("请输入姓名2: ");
scanf("%s", name2);
// 一个汉字占两个字节,即两个char装一个汉字
if (name1[0] == name2[0] && name1[1] == name2[1])
//if (name1[0] == name2[0])
{
printf("\n“%s”与“%s”同姓。\n", name1, name2);
}
else
{
printf("\n“%s”与“%s”不同姓。\n", name1, name2);
}
return 0;
}
p140.c
/*
编写一程序P140.C实现以下功能
从键盘输入5个字符,输出ASCII值最大的一个字符及其ASCII值。
编程可用素材:printf("请输入5个字符: ")、printf("\n最大的字符是 …-…\n"…。
*/
#include <stdio.h>
#define N 5
int main(void)
{
char ch[N];
char max;
int i;
printf("请输入5个字符: ");
for (i = 0; i < N; i++)
{
scanf("%c", &ch[i]);
}
max = ch[0];
for (i = 1; i < N; i++)
{
if (max < ch[i])
{
max = ch[i];
}
}
printf("\n最大的字符是 %c-%d\n", max, max);
return 0;
}
p219.c
/*
编写一程序P219.C实现以下功能
从键盘读入一行字符(约定:字符数≤127字节),将其中的数字字符以及这些数字字符的数量在屏幕上显示,注意:要求先显示这些数字字符的数量。
编程可用素材:
printf("Please input string: ");
printf("\nshu zi ge shu wei: …;
printf("\nshu zi wei: …;
*/
#include <stdio.h>
#include <string.h>
#define N 128
int main(void)
{
char str[N], data[N];
int i, len;
int count = 0;
printf("Please input string: ");
gets(str);
len = strlen(str);
for (i = 0; i < len; i++)
{
if (str[i] >= '0' && str[i] <= '9')
{
data[count++] = str[i];
}
}
data[count] = '\0';
printf("\nshu zi ge shu wei: %d", count);
printf("\nshu zi wei: %s", data);
return 0;
}
p220.c
/*
编写一程序P220.C实现以下功能
从键盘读入一行字符(约定:字符数≤127字节),统计及输出其中的字母、数字、空格和其他符号的个数。
编程可用素材:printf("Please input string: ")、printf("\nzimu=…,shuzi=…,kongge=…,qita=…\n"…。
*/
#include <stdio.h>
#include <string.h>
#define N 128
int main(void)
{
char str[N];
int ch, num, blank, other;
int i;
printf("Please input string: ");
gets(str);
ch = num = blank = other = 0;
for (i = 0; i < strlen(str); i++)
{
if (str[i] >= 'a' && str[i] <= 'z' || str[i] >= 'A' && str[i] <= 'Z')
{
ch++;
}
else if (str[i] >= '0' && str[i] <= '9')
{
num++;
}
else if (str[i] == ' ')
{
blank++;
}
else
{
other++;
}
}
printf("\nzimu=%d,shuzi=%d,kongge=%d,qita=%d\n", ch, num, blank, other);
return 0;
}
p221.c
/*
编写一程序P221.C实现以下功能
从键盘读入一个字符串(约定:字符数≤127字节),检查该字符串是否是回文。所谓回文即正向与反向的拼写都一样,例如:adgda。
编程可用素材:printf("Please input string: ")、printf("\n… shi hui wen."…、printf("\n… bu shi hui wen."…。
*/
#include <stdio.h>
#include <string.h>
#define N 128
int main(void)
{
char str[N];
int i, n;
int flag = 1;
printf("Please input string: ");
gets(str);
n = strlen(str);
for (i = 0; i < n / 2; i++)
{
if (str[i] != str[n - 1 - i])
{
flag = 0;
break;
}
}
if (flag)
{
printf("\n%s shi hui wen.", str);
}
else
{
printf("\n%s bu shi hui wen.", str);
}
return 0;
}
p747.c
/*
编写一程序P747.C实现以下功能
先从键盘上读入15个数放在一个数组a[15]中,然后再输入一个数,要求找出该数是数组中第几个(从0开始计数,若有相同的数,
则计首次出现的数)元素a[i]的值。如果该数不在数组中,则输出相应的提示信息。
编程可用素材:
printf("please input 15 integer numbers:\n");
printf("please input the integer you want to find: ");
printf("\n%d has been found,it is a[%d]\n"…;
printf("\n%d has not been found\n"…;
*/
#include <stdio.h>
#define N 15
int main(void)
{
int a[N];
int n;
int i;
printf("please input 15 integer numbers:\n");
for (i = 0; i < N; i++)
{
scanf("%d", &a[i]);
}
printf("please input the integer you want to find: ");
scanf("%d", &n);
for (i = 0; i < N; i++)
{
if (n == a[i])
{
break;
}
}
if (i == N)
{
printf("\n%d has not been found\n", n);
}
else
{
printf("\n%d has been found,it is a[%d]\n", n, i);
}
return 0;
}
p751.c
/*
编写一程序P751.C实现以下功能
输入整数m,将所有大于1小于整数m的素数存入所指定的数组中(数组最多只存放100个素数,超过则提示“overflow”),
输出素数的个数n及各素数——素数的输出格式为每个素数5列宽、右对齐、每行显示15个。若输入的m≤0,则提示“error”,程序终止。
注:素数(Prime Number),亦称质数,指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。
编程可用素材:
printf("input a number: ")...;
printf("error")...;
printf("overflow")...;
printf("n=...\n"...;
*/
#include <stdio.h>
#define N 100
int main(void)
{
int m;
int data[N];
int i, j;
int count = 0;
printf("input a number: ");
scanf("%d", &m);
if (m <= 0)
{
printf("error");
return 0;
}
for (i = 2; i < m; i++)
{
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
break;
}
}
if (j == i)
{
if (count == 100)
{
printf("overflow");
return 0;
}
data[count++] = i;
}
}
printf("n=%d\n", count);
for (i = 0; i < count; i++)
{
printf("%5d", data[i]);
if ((i + 1) % 15 == 0)
{
printf("\n");
}
}
return 0;
}
p769.c
/*
编写一程序P769.C实现以下功能
输出m和n之间的回文素数,m和n从键盘读入(假定满足5<=m<=n<=100000),回文是指正向与反向的字符都一样,例如1、11、101、131等。
编程可用素材:
printf("please input m, n(5<=m<=n<=100000): ");
printf("Result(%d-%d):\n");
printf("%d ");
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int isPrime(int data);
int isHuiwen(int data);
int main(void)
{
int m, n;
int i;
printf("please input m, n(5<=m<=n<=100000): ");
scanf("%d,%d", &m, &n);
if (m < 5 || n > 1000000)
{
printf("input error!");
exit(0);
}
printf("Result(%d-%d):\n", m, n);
for (i = m; i <= n; i++)
{
if (isPrime(i) && isHuiwen(i))
{
printf("%d ", i);
}
}
return 0;
}
int isPrime(int data)
{
int i;
int maxDiv;
maxDiv = (int)sqrt(data);
for (i = 2; i <= maxDiv; i++)
{
if (data % i == 0)
{
break;
}
}
// 一定要让循环跑完,再做判断
if (i > maxDiv)
{
return 1;
}
else
{
return 0;
}
}
int isHuiwen(int data)
{
int ge, shi, bai, qian, wan;
if (data < 10)
{
return 1;
}
else if (data < 100)
{
ge = data % 10;
shi = data / 10;
if (ge == shi)
{
return 1;
}
}
else if (data < 1000)
{
ge = data % 10;
bai = data / 100;
if (ge == bai)
{
return 1;
}
}
else if (data < 10000)
{
ge = data % 10;
shi = data / 10 % 10;
bai = data / 100 % 10;
qian = data / 1000;
if (ge == qian && shi == bai)
{
return 1;
}
}
else if (data < 100000)
{
ge = data % 10;
shi = data / 10 % 10;
qian = data / 1000 % 10;
wan = data / 10000;
if (ge == wan && shi == qian)
{
return 1;
}
}
return 0;
}
p776.c
/*
编写一程序P776.C实现以下功能
n(3<n<200,从键盘读入)个学生围成一圈报数(本身从1到n顺序编学号),从第一个人开始顺序报1,2,3,1,2,3,...,凡报到3的人退出圈子,
要求根据输入n的值,输出每次退出的学生的学号,并且找出最后一个留在圈子中的学生的学号。
编程可用素材:
printf("Please input n: ");
printf("\nResult is:\n");
printf("delete %d student: %d.\n";
printf("The remained student is %d.\n";
*/
#include <stdio.h>
#include <malloc.h>
#define LEN sizeof(struct student)
#define M 3
// 学生结构: 学号,next指针
struct student
{
long num;
struct student *next;
};
int main(void)
{
int n;
struct student *head, *p1, *p2;
int i, j;
printf("Please input n: ");
scanf("%d", &n);
printf("\nResult is:\n");
// 构造节点
p1 = p2 = (struct student *)malloc(LEN);
head = p1; // 头指针
p1->num = 1; // 第一位学生,学号为1
for (i = 1; i < n;) // 剩下的n-1名学生,2到n的学号
{
p1 = (struct student *)malloc(LEN); // 开新节点内存
p2->next = p1; // 入链
p1->num = ++i; // 填值,即写学号
p2 = p1; // p2随p1往后移,记录最后一个节点
}
p2->next = head; // 做成一个循环链表
// 开始数数,并删除节点,但未归还内存
// p1 当前节点
// p2 前一节点
p1 = p2 = head;
for (i = 1; i < n - 1; i++)
{
p1 = p1->next;
// 每次数到M时,删除该节点
for (j = 1; j < M - 1; j++)
{
p2 = p1; // 记录
p1 = p1->next; // 后移
}
printf("delete %d student: %ld.\n", i, p1->num);
p2->next = p1->next;
free(p1); // 从链中删除后,归还内存
// 重新开始数数
p1 = p2 = p2->next;
}
printf("delete %d student: %ld.\n", i, p1->num);
printf("The remained student is %d.\n", p1->next->num);
return 0;
}
p831.c
/*
编写一程序P831.C实现以下功能
某班有40位同学参加考试,成绩(整数)从键盘输入,求全班最高分、最低分以及平均分,并统计该班同学的考试及格率。
编程可用素材:printf("请输入40位同学的成绩:")、printf("\n最高分:…最低分:…平均分:…及格率:…。
*/
#include <stdio.h>
#define SIZE 40
int main(void)
{
int scores[SIZE];
int i;
int max, min, total = 0, count;
double aver, rate;
// input
printf("请输入40位同学的成绩:");
for (i = 0; i < SIZE; i++)
{
scanf("%d", &scores[i]);
}
// get max,min,total
max = min = scores[0];
count = 0;
for (i = 0; i < SIZE; i++)
{
if (scores[i] > max)
{
max = scores[i];
}
if (scores[i] < min)
{
min = scores[i];
}
total += scores[i];
if (scores[i] >= 60)
{
count++;
}
}
aver = (double)total / SIZE;
rate = (double)count / SIZE;
printf("\n最高分:%d\n最低分:%d\n平均分:%.1lf\n及格率:%.0lf%%", max, min, aver, 100 * rate);
return 0;
}
更多推荐
所有评论(0)