文档库 最新最全的文档下载
当前位置:文档库 › C++上机答案(下)

C++上机答案(下)

70051 找最大值并交换

输入一个正整数 repeat (0

输入一个正整数 n (1

输入

3 (repeat=3)

5 (n=5)

4 3

5 5 2

4 (n=4)

1 5 6 7

5 (n=5)

5 4 3 2 1

输出

max = 5, index = 3

4 3

5 2 5

max = 7, index = 3

1 5 6 7

max = 5, index = 0

1 4 3

2 5

#include

int main( )

{

int i, index, n, temp;

int repeat, ri;

int a[10];

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){

scanf("%d", &n);

for(i = 0; i < n; i++)

scanf("%d", &a[i]);

index=0;

for(i=1;i

if(a[index]<=a[i])

index=i;

}

temp=a[index];

a[index]=a[n-1];

a[n-1]=temp;

printf("max = %d, index = %d\n", a[n-1],index);

for(i = 0; i < n; i++)

printf("%d ", a[i]);

printf("\n");

}

}

70052 统计字符出现次数

输入一个正整数 repeat (0

输入一个以回车符结束的字符串(少于80个字符),再输入一个字符,统计并输出该字符在字符串中出现的次数。

输入输出示例:括号内为说明

输入:

2 (repeat=2)

programming (字符串"programming")

m (字符'm')

1234 (字符串"1234")

a (字符'a')

输出:

count = 2 ('m'在"programming"中出现2次)

count = 0 ('a'在"1234"中没有出现过)

#include "stdio.h"

#define MAXLEN 80

int main(void)

{

char cc, ch;

char str[MAXLEN];

int i,count;

int repeat, ri;

scanf("%d", &repeat);

getchar();

for(ri = 1; ri <= repeat; ri++){

i = 0;

while((str[i] = getchar( )) != '\n')

i++;

str[i] = '\0';

cc = getchar();

getchar();

count=0;

for(i=0;str[i] != 0;i++){

if(str[i]==cc) c ount++;

}

printf("count = %d\n", count);

}

}

10008 求1~100中能被6整除的所有整数的和

#include

int main(void)

{

int i, sum = 0;

for(i=1;i<=100;i++){

if(i%6==0)

sum+=i;

}

printf("%d", sum);

return 0;

}

20014 计算三门课程的平均成绩

程序填空,不要改变与输入输出有关的语句。

已知某位学生的数学、英语和计算机课程的成绩分别是87分、72分和93分,求该生3门课程的平均分。

输入输出示例:

math = 87, eng = 72, comp = 93, average = 84

#include

int main(void)

{

int math, eng, comp, average;

math = 87;eng = 72;comp = 93; /* 若自己增加输入语句,程序就通不过*/

average=(math+eng+comp)/3;

printf("math = %d, eng = %d, comp = %d, average = %d\n", math, eng, comp, average);

}

20016 计算x的平方

假设 x 的值为3,计算 x 的平方 y,并分别以"y = x * x"和"x * x = y"的形式输出 x 和 y 的值。

输入输出示例:

9 = 3 * 3

3 * 3 = 9

#include

int main(void)

{

int y;

int x=3;

y=x*x;

printf("%d = %d * %d\n",y,x,x);

printf("%d * %d = %d",x,x,y);

}

20021 计算分段函数的值

输入一个正整数repeat (0

输入 x,计算并输出下列分段函数 f(x) 的值(保留1位小数)。

当 x 不等于0时,y = f(x) = 1/x,当 x 等于0时,y = f(x) = 0。

输入输出示例:括号内是说明

输入

2 (repeat=2)

10 (x=10)

0 (x=0)

输出

f(10.00) = 0.1

f(0.00) = 0.0

#include

int main(void)

{

int repeat, ri;

double x, y;

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){

scanf("%lf", &x);

if(x!=0)

y=1.0/x;

else

y=0;

printf("f(%.2f) = %.1f\n", x, y);

}

}

20022 计算摄氏温度

输入华氏温度,输出对应的摄氏温度。计算公式:c = 5*(f-32)/9,式中:c表示摄氏温度,f表示华氏温度。

输入输出示例:括号内为说明

输入

150 (fahr=150)

输出

celsius = 65

#include

int main(void)

{

int celsius, fahr;

scanf("%d",&fahr);

celsius=5*(fahr-32)/9;

printf("celsius = %d\n", celsius);

}

80011 循环移动

输入两个正整数 n 和 m (1

要求定义并调用函数 mov(x,n,m) 实现上述循环移动的功能,函数形参x的类型是整型指针,形参n和m的类型是int,函数的类型是void。

输入输出示例:括号内为说明

输入:

5 3 (n=5,m=3)

1 2 3 4 5 (5个整数)

输出:

After move: 3 4 5 1 2

#include

void mov(int *x, int n, int m);

int main(void)

{

int i, m, n;

int a[80];

scanf("%d%d", &n, &m);

for(i = 0; i < n; i++)

scanf("%d", &a[i]);

void mov(int *x,int n,int m);

mov(a,n,m);

printf("After move: ");

for(i = 0; i < n; i++)

printf("%d ", a[i]);

printf("\n");

}

void mov(int a[], int n, int m)

{

int y,i,j;

for(i=1;i<=m;i++){ /* 循环移动m次*/

y=a[n-1];

for(j=n-1;j>0;j--)

a[j]=a[j-1];

a[0]=y;

}

}

move方法参考2:

void mov(int *x,int n,int m){

int i,j,t;

for(i=0;i0;j--){

t=x[j];

x[j]=x[j-1];

x[j-1]=t;

}

}

}

80012 在数组中查找指定元素

输入一个正整数repeat (0

输入一个正整数 n (1

要求定义并调用函数search(list, n, x),它的功能是在数组list中查找元素x,若找到则返回相应元素的最小下标,否则返回-1,函数形参 list 的类型是整型指针,形参n和x的类型是int。

输入输出示例:括号内为说明

输入

2 (repeat=2)

3 (n=3)

1 2 -6

2 (x=2)

5 (n=5)

1 2 2 5 4

0 (x=0)

输出

index = 1

Not found

#include

int main(void)

{

int i, index, n, res, x;

int repeat, ri;

int a[10];

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

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){

scanf("%d", &n);

for(i = 0; i < n; i++)

scanf("%d", &a[i]);

scanf("%d", &x);

int search(int *list,int n,int x);

res=search(a,n,x);

if(res != -1)

printf("index = %d\n", res);

else

printf("Not found\n");

}

}

int search(int *list,int n,int x){

int i,t;

for(i=0;i

if(list[i]==x){

t=i;

break;

}

else

t=-1;

}

return t;

}

80013 使用函数的选择法排序

输入一个正整数 repeat (0

输入一个正整数 n (1

要求定义并调用函数 sort(a,n),它的功能是采用选择排序算法,将数组 a 的前 n 个元素按从小到大的顺序排序,函数形参 a 的类型是整型指针,形参n 的类型是int,函数的类型是void。

输入输出示例:括号内为说明

输入

3 (repeat=3)

4 (n=4)

5 1 7 6

3 (n=3)

1 2 3

5 (n=5)

5 4 3 2 1

输出

After sorted: 1 5 6 7

After sorted: 1 2 3

After sorted: 1 2 3 4 5

#include

void sort(int a[],int n);

int main(void)

{

int i, n;

int repeat, ri;

int a[10];

void sort(int *p,int n);

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){

scanf("%d", &n);

for(i = 0; i < n; i++)

scanf("%d", &a[i]);

sort(a,n);

printf("After sorted: ");

for(i = 0; i < n; i++)

printf("%d ", a[i]);

printf("\n");

}

}

void sort(int *p,int n)

{

int k,i,index,t;

for(k=0;k

index=k;

for(i=k+1;i

if(p[i]

index=i;

t=p[index];

p[index]=p[k];

p[k]=t;

}

}

80014 报数

输入两个正整数 n 和 m( (1

提示:将每个人的编号存入数组,从第一个人开始报数,输出报数 m 的人的编号,并将该编号清除为0,重复这样的操作直至只剩下一个不为0的数,该数就是最后一个人的编号。

输出使用语句:printf("No%d: %d\n", no, *p);

输入输出示例:括号内为说明

输入:

5 (n个人报数,n=5)

3 (报数m=3)

输出:

No1: 3 (第1个退出圈子的人编号是3)

No2: 1 (第2个退出圈子的人编号是1)

No3: 5 (第3个退出圈子的人编号是5)

No4: 2 (第4个退出圈子的人编号是2)

Last No is: 4 (最后一个人的编号是4)

/* 提示:这是一个不断循环的过程;

终止条件:报数总个数为n-1;

报数过程中,嵌套一个循环:每次计数到m,退出当前小循环

在循环时,注意当前的数组下标k==n时,k=0, 保证circle 报数

*/

#include

main()

{

int m, n;

int i, k=0; /* 下标*/

int totalNumber=0; /* 报数总个数*/

int count=0; /* 当前轮报数个数*/

int num[50];

scanf("%d%d", &n, &m);

for(i = 0; i < n; i++)

num[i] = i + 1;

while (1)

{

if (totalNumber == n-1) break;

while (count

{

if (num[k])

{

count++;

if (totalNumber == n-1) break;

else if (count==m)

{

printf("No%d: %d\n", ++totalNumber, num[k]);

break;

}

}

k++;

if (k == n) k=0 ;

}

num[k]=0; count=0; /* 当前轮报数个数从新计数*/

k++;

if (k == n) k=0 ;

}

while (!num[k])

{ k++;

if (k == n) k=0 ;

}

printf("Last No is: %d\n", num[k]);

return 0;

}

参考2:

#include

int main(void)

{

int count, i, m, n, no;

int num[50];

int *p;

scanf("%d%d", &n, &m);

for(i = 0; i < n; i++)

num[i] = i + 1;

p = num;

for(no=1;no

count=0;

for(;;) {

if(*p!=0)count++;

if(count==m){

printf("No%d: %d\n", no, *p);

*p=0;

break;

}

p=p+1;

if(p-1==&num[n-1])p=num;

}

}

p = num;

while(*p == 0)

p++;

printf("Last No is: %d\n", *p);

}

参考3:

#include

int main(void)

{

int count, i, m, n, no;

int num[50];

int *p;

scanf("%d%d", &n, &m);

for(i = 0; i < n; i++)

num[i] = i + 1;

p = num;

int k;

no=i=k=0;

while(no

if(*(p+i)!=0)

k++;

if(k==m){

printf("No%d: %d\n",no+1,*(p+i));

*(p+i)=0;

k=0;

no++;

}

i++;

if(i==n)

i=0;

}

p = num;

while(*p == 0)

p++;

printf("Last No is: %d\n", *p);

}

夏4周

10012 函数程序设计

编写一个函数,利用参数传入一个3位数number,找出101~number之间所有满足下列两个条件的数:

它是完全平方数,又有两位数字相同,如144、676等,函数返回找出这样的数据的个数。请同时编写主函数。

例:(括号内为说明)

输入

3 (repeat=3)

150

500

999

输出

count=2

count=6

count=8

#include

#include

int search(int n);

int main(void)

{

int number,ri,repeat;

scanf("%d",&repeat);

for(ri=1;ri<=repeat;ri++){

do{

scanf("%d",&number);

}while(number<101||number>999);

printf("count=%d\n",search(number));

}

return 0;

}

int search(int n)

{

int i,j,a1,a2,a3, flag=0;

for (i = 101; i <= n; i++)

{

for (j = 1; j <= i; j++)

{

if (j * j == i)

{

a1 = i % 10;

a2 = i / 10 % 10;

a3 = i /100 % 10;

if ( (a1==a2)||(a1==a3) || (a2==a3) )

{

flag += 1;

break;

}

}

}

}

return flag;

}

10024 计算最长的字符串长度

编写一个函数int max_len(char *s[ ], int n),用于计算有n(n<10)个元素的指针数组s中最长的字符串的长度,并编写主程序验证。

例:(括号内为说明)

输入

4 (n=4)

blue

yellow

red

green

输出

length=6

#include

#include

int max_len(char *s[],int n);

void main()

{

int i,n;

char s[10][80],*p[10];

scanf("%d",&n);

for(i=0;i

scanf("%s",s[i]);

p[i]=s[i];

}

printf("length=%d\n",max_len(p,n));

}

int max_len(char *s[],int n)

{

int max,i;

max=strlen(s[0]);

for(i=1;i

if(max

max=strlen(s[i]);

return max;

}

10025 字符串的连接

用字符指针实现函数str_cat(s,t),将字符串t复制到字符串s的末端,并且返回字符串s的首地址,并编写主程序。

例:(括号内为说明)

输入

abc

def

输出

abcdef

#include

char *str_cat(char *s,char *t);

void main()

{

char s[80],t[80];

gets(s);

gets(t);

puts(str_cat(s,t));

}

char *str_cat(char *s,char *t)

{

char *p;

p=s;

while (*s!='\0') s++;

while (*t!='\0')

{

*s =*t;

s++, t++;

}

*s='\0';

return p;

}

/*---------*/

/* 在函数str_cat()具体实现时,若用数组下标实现可参考如下*/

char *str_cat(char *s,char *t)

{

int i=0,j=0;

while (s[i]!='\0') i++;

while (t[j]!='\0')

{

s[i] =t[j];

i++, j++;

}

s[i]='\0';

return s;

}

40017 求2/1+3/2+5/3+8/5+...

输入一个正整数 repeat (0

输入一个正整数 n,输出 2/1+3/2+5/3+8/5+……前n项之和,保留2位小数。(该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子)

输入输出示例:括号内是说明

输入

3 (repeat=3)

1 (n=1)

5 (n=5)

20 (n=20)

输出

sum = 2.00 (第1项是2.00)

sum = 8.39 (前5项的和是8.39)

sum = 32.66 (前20项的和是32.66)

#include

int main(void)

{

int i, n;

int repeat, ri;

double denominator, numerator, sum, temp;

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){

scanf("%d", &n);

sum=0;

denominator=1;

numerator=2;

for(i=1;i<=n;i++){

sum += numerator/denominator;

temp = denominator; /* 为求下一项分子,保留当前项分母*/

denominator=numerator;

numerator=numerator+temp;

}

printf("sum = %.2f\n",sum);

}

}

80021 找最大的字符串

输入5个字符串,输出其中最大的字符串。

输入输出示例:括号内为说明

输入:

peach

pear

melon

orange

berry

输出:

Max is: pear

#include

#include

int main(void)

{

char str[80], max[80];

int i;

scanf("%s", str);

strcpy(max,str);

for(i=1;i<5;i++){

scanf("%s",str);

if(strcmp(str,max)>0)

strcpy(max,str);

}

printf("Max is: %s\n", max);

}

80022 找最长字符串

输入一个正整数 repeat (0

输入一个正整数 n (1

输入输出示例:括号内为说明

输入:

3 (repeat=3)

5 (n=5)

melon peach pear strawberry orange

3 (n=3)

pear berry orange

4 (n=4)

melon peach pear apple

输出:

The longest is: strawberry

The longest is: orange

The longest is: melon

#include

#include

int main(void)

{

char sx[80], longest[80];

int i, n;

int repeat, ri;

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){

scanf("%d", &n);

scanf("%s", sx);

strcpy(longest,sx);

for(i=1;i

scanf("%s",sx);

if(strlen(sx)>strlen(longest))

strcpy(longest,sx);

}

printf("The longest is: %s\n",longest);

}

}

80023 使用函数删除字符串中的字符

输入一个正整数 repeat (0

输入一个字符串 str,再输入一个字符 c,将字符串 str 中出现的所有字符 c 删除。

要求定义并调用函数delchar(str,c), 它的功能是将字符串 str 中出现的所

有 c 字符删除,函数形参str的类型是字符指针,形参c的类型是char,函数类型是void。

输入输出示例:括号内为说明

输入

3 (repeat=3)

happy new year (字符串"happy new year")

a (待删除的字符'a')

bee (字符串"bee")

e (待删除的字符'e')

111211 (字符串"111211")

1 (待删除的字符'1')

输出

result: hppy new yer (字符串"happy new year"中的字符'a'都被删除) result: b (字符串"bee"中的字符'e'都被删除)

result: 2 (字符串"111211"中的字符'1'都被删除)

#include

void main()

{

char c;

char str[80];

int repeat, ri;

void delchar(char *str, char c);

scanf("%d", &repeat);

getchar();

for(ri = 1; ri <= repeat; ri++){

gets(str);

scanf("%c", &c);

getchar();

delchar(str,c);

printf("result: ");

puts(str);

}

}

void delchar(char *str, char c)

{

int i,j;

i = 0, j=0;

while (str[i]!='\0')

{

if (str[i] != c) /* 若当前字符是要被保留的*/

{

str[j]=str[i];

i++; j++;

}

else i++; /* 否则查看下一个元素*/

}

str[j]='\0';

}

80024 使用函数实现字符串复制

输入一个正整数 repeat (0

输入一个字符串 t 和一个正整数 m,将字符串 t 中从第 m 个字符开始的全部字符复制到字符串 s 中,再输出字符串 s。

要求定义并调用函数 strmcpy(s,t,m), 它的功能是将字符串 t 中从第 m 个字符开始的全部字符复制到字符串 s 中,函数形参s和t的类型是字符指针,形参m的类型是int,函数类型是void。

输入输出示例:括号内为说明

输入:

3 (repeat=3)

happy new year

7

happy

1

new

4

输出:

new year (从"happy new year"第7个字符开始组成的新字符串为"new year")

happy (从"happy"第1个字符开始组成的新字符串为"happy")

error input ("new"的长度小于4)

#include

#include

void main()

{

char s[80], t[80];

int m;

int repeat, ri;

void strmcpy(char *s,char *t, int m);

scanf("%d", &repeat);

getchar();

for(ri = 1; ri <= repeat; ri++){

gets(t);

scanf("%d", &m);

getchar();

if(strlen(t)

printf("error input");

else{

strmcpy(s,t,m);

puts(s);

}

}

}

void strmcpy(char *s,char *t,int m)

{

int i,j;

for(i=m-1,j=0;*(t+i)!='\0';i++,j++)

*(s+j)=*(t+i);

*(s+j)='\0';

}

或者void strmcpy()用数组元素表示

void strmcpy(char s[],char t[],int m)

{

int i,j;

for(i=m-1,j=0;t[i]!='\0';i++,j++)

s[j]=t[i];

相关文档
相关文档 最新文档