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;
}