7-1 逆置一维数组
编写程序,以指针的方式,就地逆置一维数组。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据先输入数据个数n,然后输入n个整数。
输出格式:
对于每组测试,在一行上输出逆置之后的结果。数据之间以一个空格分隔。
输入样例:
2
4 1 2 5 3
5 4 3 5 1 2
输出样例:
3 5 2 1
2 1 5 3 4
#include<stdio.h>
int f(int n,int*p)
{
int i;
for(i=n-1;i>=0;i--)
{
if(i==n-1)
printf("%d",p[i]);
else
printf(" %d",p[i]);
}
}
int main()
{
int m,n;
int p[1005];
scanf("%d",&m);
for(int i=0;i<m;i++)
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&p[i]);
}
f(n,p);
printf("\n");
}
return 0;
}
7-2 求组合数
本题要求编写程序,根据公式Cnm=m!(n−m)!n!算出从n个不同元素中取出m个元素(m≤n)的组合数。
建议定义和调用函数fact(n)
计算n!
,其中n
的类型是int
,函数类型是double
。
输入格式:
输入在一行中给出两个正整数m和n(m≤n),以空格分隔。
输出格式:
按照格式"result = 组合数计算结果"输出。题目保证结果在double
类型范围内。
输入样例:
2 7
输出样例:
result = 21
#include<stdio.h>
double fact(int n)
{
int i;
double sum=1;
for(i=1;i<=n;i++)
{
sum=sum*i;
}
return sum;
}
int main()
{
int m,n;
double t;
scanf("%d %d",&m,&n);
t=fact(n)/(fact(m)*fact(n-m));
printf("result = %.lf",t);
return 0;
}
7-3 sdut - C语言实验-保留字母
编一个程序,输入一个允许带空格的字符串,将组成字符串的所有非英文字母的字符删除后输出。
输入格式:
一个字符串,长度不超过80个字符。
输出格式:
删掉非英文字母后的字符串。
输入样例:
abc123+xyz.5
输出样例:
在这里给出相应的输出。例如:
abcxyz
#include<stdio.h>
int main()
{
int i;
char str[80];
gets(str);
for(i=0;str[i]!='\0';i++)
{
if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
printf("%c",str[i]);
}
return 0;
}
7-4 sdut-C语言实验- 字符统计2
输入英文句子,输出该句子中除了空格外出现次数最多的字符及其出现的次数。
输入格式:
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
输出格式:
逐行输出每个句子中出现次数最多的字符及其出现的次数(如果有多个字符的次数相同,只输出ASCII码最小的字符)。
输入样例:
I am a student
a good programming problem
ABCD abcd ABCD abcd
输出样例:
在这里给出相应的输出。例如:
a 2
o 4
A 2
#include <stdio.h>
#include <stdlib.h>
int main()
{
char s[101];
int i;
while (gets(s)!=NULL)
{
int a[130]={0};
for (i=0;s[i]!='\0';i++)
{
if (s[i]!=' ')
{
a[s[i]]++;
}
}
int max=a[0];int k=0;
for (i=1;i<=129;i++)
{
if (a[i]>max)
{
max=a[i];
k=i;
}
}
printf("%c %d\n",k,max);
}
return 0;
}
7-5 利用指针返回多个函数值
读入n个整数,调用max_min()函数求这n个数中的最大值和最小值。
输入格式:
输入有两行:
第一行是n值;
第二行是n个数。
输出格式:
输出最大值和最小值。
输入样例:
在这里给出一组输入。例如:
5
8 9 12 0 3
输出样例:
在这里给出相应的输出。例如:
max = 12
min = 0
#include<stdio.h>
int max_min(int n,int *p)
{
int i;
int max=p[0],min=p[0];
for(i=0;i<n;i++)
{
if(p[i]>max)
max=p[i];
if(p[i]<min)
min=p[i];
}
printf("max = %d\n",max);
printf("min = %d",min);
}
int main()
{
int i,n;
scanf("%d",&n);
int p[1005];
for(i=0;i<n;i++)
{
scanf("%d",&p[i]);
}
max_min(n,p);
return 0;
}