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;
}
相关推荐
晓131315 小时前
第六章 【C语言篇:结构体&位运算】 结构体、位运算全面解析
c语言·算法
iAkuya15 小时前
(leetcode)力扣100 61分割回文串(回溯,动归)
算法·leetcode·职场和发展
梵刹古音15 小时前
【C语言】 指针与数据结构操作
c语言·数据结构·算法
VT.馒头15 小时前
【力扣】2695. 包装数组
前端·javascript·算法·leetcode·职场和发展·typescript
萧鼎15 小时前
Python 包管理的“超音速”革命:全面上手 uv 工具链
开发语言·python·uv
Anastasiozzzz16 小时前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
刘琦沛在进步16 小时前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
机器视觉的发动机16 小时前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉
HyperAI超神经16 小时前
在线教程|DeepSeek-OCR 2公式/表格解析同步改善,以低视觉token成本实现近4%的性能跃迁
开发语言·人工智能·深度学习·神经网络·机器学习·ocr·创业创新