前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浙大版《C语言程序设计(第3版)》题目集 81~90

浙大版《C语言程序设计(第3版)》题目集 81~90

作者头像
C you again
发布2022-08-22 14:47:49
9710
发布2022-08-22 14:47:49
举报
文章被收录于专栏:IT技术圈IT技术圈

@目录

  • 81、习题7-7 字符串替换
  • 82、习题8-10 输出学生成绩
  • 83、习题8-2 在数组中查找指定元素
  • 84、习题8-3 数组循环右移
  • 85、题8-9 分类统计各类字符个数
  • 86、习题9-2 计算两个复数之积
  • 87、习题9-6 按等级统计学生成绩
  • 88、习题11-1 输出月份英文名
  • 89、习题11-2 查找星期
  • 90、练习10-1 使用递归函数计算1到n之和

81、习题7-7 字符串替换

本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换:

原字母

对应字母

A

Z

B

Y

C

X

D

W

...

...

X

C

Y

B

Z

A

输入格式:

输入在一行中给出一个不超过80个字符、并以回车结束的字符串。

输出格式:

输出在一行中给出替换完成后的字符串。

输入样例:

Only the 11 CAPItaL LeTtERS are replaced.

输出样例:

Lnly the 11 XZKRtaO OeGtVIH are replaced.

注: 编程重点

A+Z=155 B+Y=155 C+X=155 D+W=155 … … X+C=155 Y+B=155 Z+A=155

代码:

代码语言:javascript
复制
#include<stdio.h>

// A+Z=155
// B+Y=155
// ......
int main()
{
    char str[81];
    gets(str);
    int i;
    for(i=0;i<strlen(str);i++)
    {
        if(str[i]>='A'&&str[i]<='Z')
        {
            str[i]=155-str[i];
        }
    }
    puts(str);
}

82、习题8-10 输出学生成绩

本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。

输入格式:

输入第一行首先给出一个正整数N,表示学生的个数。接下来一行给出N个学生的成绩,数字间以空格分隔。

输出格式:

按照以下格式输出:

average = 平均成绩 max = 最高成绩 min = 最低成绩

结果均保留两位小数。

输入样例:

3 85 90 95

输出样例:

average = 90.00 max = 95.00 min = 85.00

代码:

代码语言:javascript
复制
#include<stdio.h>

double fun(int *arr,int n,int l)
{
    int i;
    int index=0;
    for(i=1;i<n;i++)
    {
        if(l==1)
        {
            if(arr[i]>=arr[index]) index=i;
        }
        else
        {
            if(arr[i]<=arr[index]) index=i;
        }
    }
    return arr[index]/1.0;
}
int main()
{
    int N;
    int arr[10000];
    scanf("%d",&N);
    int i;
    int sum=0;
    for(i=0;i<N;i++)
    {
        scanf("%d",&arr[i]);
        sum+=arr[i];
    }
    printf("average = %.2lf\n",sum/(double)N);
    printf("max = %.2lf\n",fun(&arr,N,1));
    printf("min = %.2lf\n",fun(&arr,N,2));
    return 0;

}

83、习题8-2 在数组中查找指定元素

本题要求实现一个在数组中查找指定元素的简单函数。

函数接口定义:

int search( int list[], int n, int x );

其中list[]是用户传入的数组;n(≥0)是list[]中元素的个数;x是待查找的元素。如果找到

则函数search返回相应元素的最小下标(下标从0开始),否则返回−1。

裁判测试程序样例:

代码语言:javascript
复制
#include <stdio.h>
#define MAXN 10
    
int search( int list[], int n, int x );
    
int main()
{
    int i, index, n, x;
    int a[MAXN];
    
    scanf("%d", &n);
    for( i = 0; i < n; i++ )
        scanf("%d", &a[i]);
    scanf("%d", &x);
    index = search( a, n, x );
    if( index != -1 )
        printf("index = %d\n", index);
    else
        printf("Not found\n");
    
    return 0;
}
    
/* 你的代码将被嵌在这里 */

输入样例1:

5 1 2 2 5 4 2

输出样例1:

index = 1

输入样例2:

5 1 2 2 5 4 0

输出样例2:

Not found

代码:

代码语言:javascript
复制
int search( int list[], int n, int x )
{
  int i;
  int l=-1;
  for(i=0;i<n;i++)
  {
    if(list[i]==x){l=1;break;}
  }
  if(l==1) return i;
  else return l;
}

84、习题8-3 数组循环右移

本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由

{(a_0a_1⋯a_{n−1})}

变换为

{( a_{n−m}⋯a_{n−1}a_0a_1⋯a_{n−m−1} )}

(最后m个数循环移最前面的m个位置)。

函数接口定义:

int ArrayShift( int a[], int n, int m );

其中 a[] 是用户传入的数组;n是数组的大小;m是右移的位数。函数 ArrayShift 须将循环右移后的数组仍然存在a[]中。

裁判测试程序样例:

代码语言:javascript
复制
#include <stdio.h>
#define MAXN 10
    
int ArrayShift( int a[], int n, int m );
    
int main()
{
    int a[MAXN], n, m;
    int i;
    
    scanf("%d %d", &n, &m);
    for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);
    
    ArrayShift(a, n, m);
    
    for ( i = 0; i < n; i++ ) {
        if (i != 0) printf(" ");
        printf("%d", a[i]);
    }
    printf("\n");
    
    return 0;
}
    
/* 你的代码将被嵌在这里 */

输入样例:

6 2 1 2 3 4 5 6

输出样例:

5 6 1 2 3 4

代码:

代码语言:javascript
复制
int ArrayShift( int a[], int n, int m )
{
  int i;
  int k;
  for(k=1;k<=m;k++)
  {
    int temp=a[n-1];
    for(i=n-1;i>0;i--)
     {
        a[i]=a[i-1];
     }
     a[0]=temp;
  }
}

85、题8-9 分类统计各类字符个数

本题要求实现一个函数,统计给定字符串中的大写字母、小写字母、空格、数字以及其它字符各有多少。

函数接口定义:

void StringCount( char *s );

其中 char *s 是用户传入的字符串。函数 StringCount 须在一行内按照

大写字母个数 小写字母个数 空格个数 数字个数 其它字符个数

的格式输出。

裁判测试程序样例:

代码语言:javascript
复制
#include <stdio.h>
#define MAXS 15
    
void StringCount( char *s );
void ReadString( char *s ); /* 由裁判实现,略去不表 */
    
int main()
{
    char s[MAXS];
    
    ReadString(s);
    StringCount(s);
    
    return 0;
}
    
/* Your function will be put here */

输入样例:

aZ&*? 093 Az

输出样例:

2 2 1 3 4

代码:

代码语言:javascript
复制
void StringCount( char *s )
{
    int suma=0;   //小写字母个数
    int sumA=0;   //大写字母个数
    int sum_=0;   //空格个数
    int sum1=0;   //数字个数
   // int sumO=0;
    int i;
    int len=strlen(s);
    for(i=0;i<len;i++)
    {
       
        if(s[i]>='A'&&s[i]<='Z') sumA++;
        if(s[i]>='a'&&s[i]<='z') suma++;
        if(s[i]==' ') sum_++;
        if(s[i]>='0'&&s[i]<='9') sum1++;
    
    }
    printf("%d %d %d %d %d\n",sumA,suma,sum_,sum1,len-(suma+sumA+sum_+sum1));
}

86、习题9-2 计算两个复数之积

本题要求实现一个计算复数之积的简单函数。

函数接口定义:

struct complex multiply(struct complex x, struct complex y);

其中 struct complex 是复数结构体,其定义如下:

代码语言:javascript
复制
struct complex{
    int real;
    int imag; 
};

裁判测试程序样例:

代码语言:javascript
复制
#include <stdio.h>
    
struct complex{
    int real;
    int imag;
};
    
struct complex multiply(struct complex x, struct complex y);
    
int main()
{
    struct complex product, x, y;
    
    scanf("%d%d%d%d", &x.real, &x.imag, &y.real, &y.imag);
    product = multiply(x, y);
    printf("(%d+%di) * (%d+%di) = %d + %di\n", x.real, x.imag, y.real, y.imag, product.real, product.imag);
    
    return 0;
}
    
/* 你的代码将被嵌在这里 */

输入样例:

3 4 5 6

输出样例:

(3+4i) * (5+6i) = -9 + 38i

代码:

代码语言:javascript
复制
struct complex multiply(struct complex x, struct complex y)
{
    struct complex t;
    t.real=x.real*y.real-x.imag*y.imag;
    t.imag=x.real*y.imag+y.real*x.imag;
    return t;
};

87、习题9-6 按等级统计学生成绩

本题要求实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数。

函数接口定义:

int set_grade( struct student *p, int n );

其中 p 是指向学生信息的结构体数组的指针,该结构体的定义为:

代码语言:javascript
复制
struct student{
   int num;
   char name[20];
   int score;
   char grade; 
};

n 是数组元素个数。学号 num 、姓名 name 和成绩 score 均是已经存储好的。set_grade 函数需要根据学生的成绩 score 设置其等级 grade 。等级设置:85-100为A,70-84为B,60-69为C,0-59为D。同时, set_grade 还需要返回不及格的人数。

裁判测试程序样例:

代码语言:javascript
复制
#include <stdio.h>
#define MAXN 10
    
struct student{
    int num;
    char name[20];
    int score;
    char grade;
};
    
int set_grade( struct student *p, int n );
    
int main()
{   
    struct student stu[MAXN], *ptr;
    int n, i, count;
    
    ptr = stu;
    scanf("%d\n", &n);
    for(i = 0; i < n; i++){
        scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);
    } 
    count = set_grade(ptr, n);
    printf("The count for failed (<60): %d\n", count);
    printf("The grades:\n"); 
    for(i = 0; i < n; i++)printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade);
    return 0;
}
    
/* 你的代码将被嵌在这里 */

输入样例:

10 31001 annie 85 31002 bonny 75 31003 carol 70 31004 dan 84 31005 susan 90 31006 paul 69 31007 pam 60 31008 apple 50 31009 nancy 100 31010 bob 78

输出样例:

The count for failed (<60): 1 The grades: 31001 annie A 31002 bonny B 31003 carol B 31004 dan B 31005 susan A 31006 paul C 31007 pam C 31008 apple D 31009 nancy A 31010 bob B

代码:

代码语言:javascript
复制
int set_grade( struct student *p, int n )
{
    int i;
    int temp=0;
    for(i=0;i<n;i++)
    {
        if(p[i].score>=85&&p[i].score<=100) p[i].grade='A';
        if(p[i].score>=70&&p[i].score<=84) p[i].grade='B';
        if(p[i].score>=60&&p[i].score<=69) p[i].grade='C';
        if(p[i].score>=0&&p[i].score<=59) {p[i].grade='D';temp++;}
    }
    return temp;
}

88、习题11-1 输出月份英文名

本题要求实现函数,可以返回一个给定月份的英文名称。

函数接口定义:

char *getmonth( int n );

函数 getmonth 应返回存储了 n 对应的月份英文名称的字符串头指针。如果传入的参数 n 不是一个代表月份的数字,则返回空指针NULL。

裁判测试程序样例:

代码语言:javascript
复制
#include <stdio.h>
    
char *getmonth( int n );
    
int main()
{
    int n;
    char *s;
    
    scanf("%d", &n);
    s = getmonth(n);
    if ( s==NULL ) printf("wrong input!\n");
    else printf("%s\n", s);
    
    return 0;
}
    
/* 你的代码将被嵌在这里 */

输入样例1:

5

输出样例1:

May

输入样例2:

15

输出样例2:

wrong input!

代码:

代码语言:javascript
复制
char *getmonth( int n )
{

    if(n>12||n<=0) return NULL;
    else
    {
       if(n==1) return "January";
       if(n==2) return "February";
       if(n==3) return "March";
       if(n==4) return "April";
       if(n==5) return "May";
       if(n==6) return "June";
       if(n==7) return "July";
       if(n==8) return "August";
       if(n==9) return "September";
       if(n==10) return "October";
       if(n==11) return "November";
       if(n==12) return "December";

    }
}

89、习题11-2 查找星期

本题要求实现函数,可以根据下表查找到星期,返回对应的序号。

序号

星期

0

Sunday

1

Monday

2

Tuesday

3

Wednesday

4

Thursday

5

Friday

6

Saturday

函数接口定义:

int getindex( char *s );

函数 getindex 应返回字符串 s 序号。如果传入的参数 s 不是一个代表星期的字符串,则返回-1。

裁判测试程序样例:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
    
#define MAXS 80
    
int getindex( char *s );
    
int main()
{
    int n;
    char s[MAXS];
    
    scanf("%s", s);
    n = getindex(s);
    if ( n==-1 ) printf("wrong input!\n");
    else printf("%d\n", n);
    
    return 0;
}
    
/* 你的代码将被嵌在这里 */

输入样例1:

Tuesday

输出样例1:

2

输入样例2:

today

输出样例2:

wrong input!

代码:

代码语言:javascript
复制
int getindex( char *s )
{
    char str[8][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
    int i,j;
    int len=strlen(s);
    int l=-1;
    for(i=0;i<7;i++)
    {
        if(strcmp(s,str[i])==0)
        {
            l=1;break;
        }
    }
    if(l==1) return i;
    else return -1;
}

90、练习10-1 使用递归函数计算1到n之和

本题要求实现一个用递归计算1+2+3+…+n的和的简单函数。

函数接口定义:

int sum( int n );

该函数对于传入的正整数n返回1+2+3+…+n的和;若n不是正整数则返回0。题目保证输入输出在长整型范围内。建议尝试写成递归函数。

裁判测试程序样例:

代码语言:javascript
复制
#include <stdio.h>
    
int sum( int n );
    
int main()
{
    int n;
    
    scanf("%d", &n);
    printf ("%d\n", sum(n));
    
    return 0;
}
    
/* 你的代码将被嵌在这里 */

输入样例1:

10

输出样例1:

55

输入样例2:

0

输出样例2:

0

代码:

代码语言:javascript
复制
int sum( int n )
{
   if(n>0)
   {
     if(n==1) return 1;
     else return n+sum(n-1);
   }
   else return 0;
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 81、习题7-7 字符串替换
  • 82、习题8-10 输出学生成绩
  • 83、习题8-2 在数组中查找指定元素
  • 84、习题8-3 数组循环右移
  • 85、题8-9 分类统计各类字符个数
  • 86、习题9-2 计算两个复数之积
  • 87、习题9-6 按等级统计学生成绩
  • 88、习题11-1 输出月份英文名
  • 89、习题11-2 查找星期
  • 90、练习10-1 使用递归函数计算1到n之和
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档