sse哈工大C语言编程练习20

2026年2月3日

收获:

1.数组指针重新分配内存以匹配实际需要的大小newarr=(int*)realloc(newarr,(*newSize)*sizeof(int))。

题目:

1、Q2636.(语言: C)计算 1!+3!+5!+...+(2n-1)!的值

**输入提示信息格式: "Input n:\n"

**输入数据格式要求: "%d"

**输出数据格式要求: "%ld"

c 复制代码
#include <stdio.h>
int main()
{
    int n;
    long int sum=0;
    printf("Input n:\n");
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        int k=1,now=1;
        while(k<=i*2-1){
            now*=k;
            k++;
        }
        sum+=now;
    }
    printf("%ld",sum);
    return 0;
}

2、Q6609.(语言: C)设计一个函数int* getOddNumbers(int* arr, int size, int* newSize),接受一个包含整数的数组作为参数,并返回一个包含该数组中所有奇数的新数组。如果数组中没有奇数,函数应返回一个空数组。

程序运行结果示例:

示例一

请输入10个整数

请输入第 1个整数:1

请输入第 2个整数:2

请输入第 3个整数:3

请输入第 4个整数:4

请输入第 5个整数:5

请输入第 6个整数:6

请输入第 7个整数:7

请输入第 8个整数:8

请输入第 9个整数:9

请输入第10个整数:10

奇数数组是:1 3 5 7 9

示例二

请输入10个整数

请输入第 1个整数:5

请输入第 2个整数:4

请输入第 3个整数:8

请输入第 4个整数:6

请输入第 5个整数:2

请输入第 6个整数:6

请输入第 7个整数:5

请输入第 8个整数:1

请输入第 9个整数:2

请输入第10个整数:3

奇数数组是:5 5 1 3

输入提示和格式:"请输入10个整数\n"

输入提示和格式:"请输入第%2d个整数:"

输出提示和格式:"奇数数组是:","%d"

c 复制代码
#include <stdio.h>
#include <stdlib.h>
int* getOddNumbers(int* arr,int size,int* newSize);
int main()
{
    int arr[10],size=10,newSize=0;
    int *newarr;
    printf("请输入10个整数\n");
    for(int i=0;i<10;i++){
        printf("请输入第%2d个整数:",i+1);
        scanf("%d",&arr[i]);
    }
    newarr=getOddNumbers(arr,size,&newSize);
    printf("奇数数组是:");
    for(int i=0;i<newSize;i++){
        printf("%d ",newarr[i]);
    }
    return 0;
}
int* getOddNumbers(int* arr, int size, int* newSize){
    int *newarr=(int*)malloc(size*sizeof(int));
    for(int i=0;i<size;i++){
        if(arr[i]%2==1){
            newarr[*newSize]=arr[i];
            (*newSize)++;
        }
    }
    newarr=(int*)realloc(newarr,(*newSize)*sizeof(int));
    return newarr;
}

3、Q4036.(语言: C)从键盘输入一个字符串(最长不超过20个字符),将该字符串的小写英文字符全部改成大写,然后输出这个字符串,并输出原字符串中小写英文字符的个数。不考虑字符串中包含非英文字符的情况。

要求用字符数组作函数参数,按如下函数原型编写程序:

int UpperCase(char str[]);//函数将数组s中的字符串全部改为大写字符,并返回原字符串中小写英文字符的个数

输入格式:

输入字符串的提示信息: "Input a word:\n"

输入字符串用 gets()函数

输出格式:

输出字符串用 "%s\n" 或puts()

输出小写字符个数用:"%d\n"

程序运行结果示例1:

Input a word:

Hello China↙

HELLO CHINA

8

程序运行结果示例2:

Input a word:

123 456↙

0

程序运行结果示例3:

Input a word:

ABjd345Q 649A↙

2

注意:不能使用指针、结构体和goto语句编程。

c 复制代码
#include <stdio.h>
#include <string.h>
int UpperCase(char str[]);
int main()
{
    char str[20];
    int count;
    printf("Input a word:\n");
    gets(str);
    count=UpperCase(str);
    puts(str);
    printf("%d\n",count);
    return 0;
}
int UpperCase(char str[]){
    int count=0;
    for(int i=0;i<strlen(str);i++){
        if(str[i]>='a'&&str[i]<='z'){
            count++;
            str[i]=str[i]-32;
        }
    }
    return count;
}

4、Q2231.(语言: C)下列给定程序中,函数fun的功能是:求S的值。设

S=(22/(1 3))(4 4/(35)) (66/(5 7))... (2k)(2k)/((2 k-1)(2 k+1))

例如,当k=10时,函数的值应该是1.533852

请改正程序中的错误,使它能得出正确的结果

注意:

请将修改正确后的完整源程序拷贝粘贴到答题区内。

不得增行或删行,也不得更改程序的结构。

对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。

当且仅当错误全部改正,且程序运行结果调试正确,才给加5分。

经教师手工核对后,如果未用指针做函数参数编程,那么即使做对也不给分。

c 复制代码
#include <stdio.h>
#include <math.h>
fun(int k);  		//返回值应为float类型

main()
{
    int n;
    scanf("%d",n);
    printf("%f\n",fun(n)); 
}

fun(int k);		 //返回值应为float类型,多了个分号
{
    int n;
    int s,w,p,q; 
    n=0;  //初值应为1
    s=1.0;
    while(n<k);  //应为<=
    {
        w=2*n;
        p=w-1;
        q=w+1;
        s=s*w*w/p*q;   //要加括号
        k++;  //应为n++
    }
    return s;
}

改后运行成功代码:

c 复制代码
#include <stdio.h>
#include <math.h>
float fun(int k);
main()
{
    int n;
    scanf("%d",&n);
    printf("%f\n",fun(n));  
}
float fun(int k)
{
    int n;
    float s,w,p,q; 
    n=1;  
    s=1.0;
    while(n<=k)
    {
        w=2*n;
        p=w-1;
        q=w+1;
        s=s*w*w/(p*q); 
        n++;
    }
    return s;
}

5、Q3118.(语言: C)绘制金字塔

要求用户从键盘输入一个大写字母,使用嵌套循环产生像下面这样的金字塔图案:

A

ABA

ABCBA

ABCDCBA

程序运行结果示例1:

Please input a capital:

D↙

A

ABA

ABCBA

ABCDCBA

程序运行结果示例2:

Please input a capital:

F↙

A

ABA

ABCBA

ABCDCBA

ABCDEDCBA

ABCDEFEDCBA

注意,最后一行输出的字符前面也有一个空格

输入格式:"%c"

输出格式:

输入提示信息:"Please input a capital:\n"

输出格式: "%c"

c 复制代码
#include <stdio.h>
int main()
{
    char s;
    printf("Please input a capital:\n");
    scanf("%c",&s);
    int high=s-'A'+1;
    for(int i=0;i<high;i++){
        for(int j=0;j<high-i;j++) printf(" ");
        int k=0;
        while(k<=i){
            printf("%c",'A'+k++);
        }
        k--;
        while(k>0){
            printf("%c",'A'+--k);
        }
        printf("\n");
    }
    return 0;
}
相关推荐
abant25 分钟前
leetcode912 排序算法总结
算法·leetcode·排序算法
@猿程序10 分钟前
ShardingSphere自定义分片算法与Redis动态规则加载实战
网络·redis·算法
Share_Shun11 分钟前
【定位引导】多点对位算法
算法
炽烈小老头11 分钟前
【 每天学习一点算法 2026/03/18】全排列
学习·算法
Book思议-11 分钟前
【数据结构实战】判断链表是否有环:快慢指针法(Floyd 判圈算法)
c语言·数据结构·算法·链表
RFCEO12 分钟前
JavaScript基础课程十四、原型与原型链(JS 核心底层)
开发语言·原型模式·prototype原型详解·javascript基础课·构造函数原型方法定义与使用·js原型链继承机制入门·t原型链顶层null原理
liuyao_xianhui14 分钟前
优选算法_位运算_只出现一次的数字3_C++
开发语言·数据结构·c++·算法·leetcode·链表·动态规划
lihao lihao19 分钟前
滑动窗口
数据结构·算法
qq_1508419922 分钟前
用CVI写一个贪吃蛇小游戏
c语言
Sylvia33.30 分钟前
体育数据API实战:用火星数据实现NBA赛事实时比分与状态同步
java·linux·开发语言·前端·python