C语言实验

更新时间:2024-04-08 08:32:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

注意:

1. 输入数据时请考虑需要Double 还是int 2.

1 输出图形

#include int main() {

int i,j,n;

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

, for(j=1;j<=n-i;j++) {

printf(\ }

for(j=1;j<=2*i-1;j++) {

printf(\ }

printf(\ } }

2矩阵的转置

#include int main() {

int i,j,a[10][10],b[10][10]; for(i=0;i<2;i++) {

for(j=0;j<3;j++) {

scanf(\ b[j][i]=a[i][j]; } }

for(i=0;i<3;i++) {

for(j=0;j<2;j++) {

if(j==0)

printf(\ else

printf(\ }

printf(\ } }

3实验12C

Problem C: 编写函数:字符串的连接之三 (Append Code)

Time Limit: 1 Sec Memory Limit: 2 MB

Submit: 2873 Solved: 809 [Submit][Status][Web Board]

Description

将输入的两个字符串连接在一起输出。

----------------------------------------------------------------------------- 编写一个函数str_cat()求两个串的连接:

原型:char * str_cat(char * str, char * s);

功能:动态分配一段内存空间,将串str和串s的连接存放进去形成一个新的串,并返回这段内存空间的首地址。

函数的调用格式见“Append Code”。

-----------------------------------------------------------------------------

Invalid Word(禁用单词)错误:在解决这个题目时,某些关键词是不允许被使用的。如果提交的程序中包含了下列的关键词之一,就会产生这个错误。

被禁用的头文件:string.h。

被禁用的库函数:strcat()、strncat()、memcat()、strcpy()、strncpy()、memcpy()等。

Input

输入为多组,每组包括两行。第一行为一个字符串s,第二行为字符串str。s、str的字符总数均不超过100个。

Output

每组输出三个串,各占一行,依次为:串str、串s、串str和串s的连接。

Sample Input

Look!

I love china!

Sample Output

I love china! Look!

I love china! Look!

HINT

“Append Code”中用到的头文件、全局变量或宏的定义应自行补充。

Append Code

append.c, #include

#define MAX_STR_LEN 100

char * str_cat(char * str, char * s) {

char *p; int i,j;

p=(char*)malloc(201); for(i=0;str[i]!=0;i++) {

p[i]=str[i]; }

for(j=0;s[j]!=0;j++) {

p[j+i]=s[j]; }

p[i+j]='\\0'; return p; }

int main() {

char s[MAX_STR_LEN], str[MAX_STR_LEN], *p; while(gets(s) != NULL && gets(str) != NULL) {

p = str_cat(str, s); puts(str); puts(s); puts(p); free(p); }

return 0; }

4实验11 A

Problem A: 编写函数:三个数的最大最小值 (Append

Code)

Time Limit: 1 Sec Memory Limit: 2 MB

Submit: 4657 Solved: 2234 [Submit][Status][Web Board]

Description

给出三个数a,b,c,最大值是?最小值是?

----------------------------------------------------------------------------- 编写以下两个函数:

get_num()的功能是读取输入的三个整数a,b,c; max_min()的功能是求出a,b,c的最大值和最小值。

以上函数的调用格式见“Append Code”。这里不给出函数原型,请通过main()函数自行确定。

Input

输入的第一个整数n,表示有n组测试数据,每组3个整数:a,b,c。a,b,c都在int类型范围内。

Output

每组测试数据对应输出一行:为a,b,c的最大值和最小值,格式见sample。

Sample Input

5

20 15 10 10 15 20 100 100 0 0 1 -1

0 0 0

Sample Output

case 1 : 20, 10 case 2 : 20, 10 case 3 : 100, 0 case 4 : 1, -1 case 5 : 0, 0

HINT Append Code

append.c, append.cc, #include

int get_num(int *a,int *b,int *c) {

scanf(\}

int max_min(int *mmax,int *mmin,int a,int b,int c) {

int t; if(a

t=a; a=b; b=t; }

if(a

t=a; a=b; b=t; }

if(b

t=b; b=c; c=t; }

*mmax=a;

*mmin=c; }

int main() {

int cases, i;

int mmax, mmin, a, b, c;

scanf(\ for(i = 1; i <= cases; i++) {

get_num(&a, &b, &c);

max_min(&mmax, &mmin, a, b, c);

printf(\ } }

方法2

#include

int get_num(int *a,int *b,int *c) {

int d,e,f;

scanf(\ *a=d; *b=e; *c=f; return 0; }

int max_min(int *max,int *min,int a,int b,int c) {

if(a>=b&&a>=c&&b>=c) {

*max=a; *min=c; }

else if(a>=b&&a>=c&&c>=b) {

*max=a; *min=b; }

else if(b>=a&&b>=c&&a>=c) {

*max=b;

*min=c; }

else if(b>=a&&b>=c&&c>=a) {

*max=b; *min=a; }

else if(c>=a&&c>=b&&a>=b) {

*max=c; *min=b; } else {

*max=c; *min=a; }

return *max,*min; }

int main() {

int cases, i;

int mmax, mmin, a, b, c;

scanf(\ for(i = 1; i <= cases; i++) {

get_num(&a, &b, &c);

max_min(&mmax, &mmin, a, b, c);

printf(\ } }

5实验11B

Problem B: 编写函数:字符串的连接之一 (Append Code) Time Limit: 1 Sec Memory Limit: 2 MB Submit: 2838 Solved: 717 [Submit][Status][Web Board] Description

将输入的两个字符串连接在一起输出。

----------------------------------------------------------------------------- 编写一个函数str_cat()求两个串的连接: 原型:char * str_cat(char * t, char * s);

功能:把串s连接到串t之后,返回值是串t。 函数的调用格式见“Append Code”。

-----------------------------------------------------------------------------

Invalid Word(禁用单词)错误:在解决这个题目时,某些关键词是不允许被使用的。如果提交的程序中包含了下列的关键词之一,就会产生这个错误。

被禁用的头文件:string.h、stdlib.h。

被禁用的库函数:strcat()、strncat()、memcat()、strcpy()、strncpy()、memcpy()等。

Input

输入为多组,每组包括两行。第一行为一个字符串s,第二行为字符串str。s、str的字符总数均不超过100个。

Output

把串s的内容连接到串str之后,输出串str。 输出两遍,一遍是测试返回值,一遍是测试str。

Sample Input

Look!

I love china!

Sample Output

I love china! Look!

I love china! Look!

HINT

str_cat()的返回值参考标准库函数strcpy()、strcat()、strchr()的设计思路:返回指向目标串的指针。

Append Code

append.c,

#include

#define MAX_STR_LEN 101 char * str_cat(char * t, char * s) {

int i,j;

for(i=0;t[i]!=0;i++); for(j=0;s[j]!=0;j++) {

t[i+j]=s[j]; }

t[i+j]='\\0'; return t; }

int main() {

char s[MAX_STR_LEN], str[MAX_STR_LEN], *p; while(gets(s) != NULL && gets(str) != NULL) {

p = str_cat(str, s); puts(p); puts(str); }

return 0; }

6实验11C

Problem C: 编写函数:各位数字之和 (Append Code)

Time Limit: 1 Sec Memory Limit: 2 MB

Submit: 3231 Solved: 1380 [Submit][Status][Web Board]

Description

给定一个正整数,求它的各位数字之和,直到这个和只有一位数为止。 例如,给出整数1236,那么计算

1+2+3+6=12

因为12是一个两位数,所以继续求和

1+2=3

得到结果为:3。

----------------------------------------------------------------------------- 编写一个函数digit_sum()完成求和的功能: 原型:int digit_sum(int num);

功能:返回整数num的各个位数字之和。 函数的调用格式见“Append Code”。

Input

一个int类型的正整数N。

Output

N的各位数字之和,并不断求和,直到所求的和只有一位数字为止。

Sample Input

1236

Sample Output

3

HINT Append Code append.c, append.cc, #include int digit_sum(int num) {

int sum=0; while(num) {

sum+=num; num=num/10; }

if(sum>=10)

sum=digit_sum(sum); return sum; }

int main() {

int n;

scanf(\

printf(\ return 0; }

7实验11D

Problem D: 编写函数:递归求逆序 (Append Code)

Time Limit: 1 Sec Memory Limit: 128 MB

Submit: 1864 Solved: 853 [Submit][Status][Web Board]

Description

将输入的一个字符串s逆序输出。

-----------------------------------------------------------------------------

编写函数recursive()完成程序: 原型:int recursive();

功能:用递归的方法读取输入,并且逆序输出。 函数的调用格式见“Append Code”。

-----------------------------------------------------------------------------

Invalid Word(禁用单词)错误:在解决这个题目时,某些关键词是不允许被使用的。如果提交的程序中包含了下列的关键词之一,就会产生这个错误。

被禁用的关键字:循环语句for、while,甚至包括分支语句的switch、case、goto。 被禁用的头文件:string.h、stdlib.h。

被禁用的库函数:scanf、printf、gets、puts、malloc、calloc、strcpy、memcpy等。 被禁用的字符: “%”、“*”、“[”和“]”。

你几乎不能使用大多数的控制语句和输入输出函数,甚至数组和指针都被禁用了。

Input

输入为一个串s,最少有一个字符。输入以EOF结尾,EOF不是串的内容。

Output

输出为串s的逆序。

Sample Input

abcde

Sample Output

edcba

HINT Append Code

append.c,

#include int recursive() {

char c;

c=getchar();//输入一个字符 if(c!=EOF) {

recursive(); putchar(c); } }

int main() {

recursive(); }

8实验11E

Problem E: 求中位数

Time Limit: 1 Sec Memory Limit: 16 MB

Submit: 2903 Solved: 976 [Submit][Status][Web Board]

Description

中位数(Medians)是一个统计学名词,是指将统计总体当中的各个数据的值按大小顺序排列起来,形成一个数列,处于变量数列中间位置的值就称为中位数。当数据的项数N为奇数时,处于中间位置的数据值即为中位数;当N为偶数时,中位数则为处于中间位置的2个数据值的平均数。

Input

输入为多行,每行为一组测试样例。每个测试样例以一个整数N(N<=1000)开始,后面接着是N个整数。当输入的N为0时表示输入结束。

Output

每组测试样例对应一行输出,为所给的N个整数的中位数,顺序与输入对应。中位数用%lg输出即可。

Sample Input

10 100 10 5 4 3 1 1 1 0 0 5 2 4 5 8 9 0

Sample Output

2 5

HINT Append Code

#include int main() {

int n,i,a[1001],min,t,j;

while(scanf(\ {

for(i=0;i

scanf(\ }

for(i=0;i

min=i;

for(j=i+1;j

if(a[j]

t=a[i];

a[i]=a[min]; a[min]=t; } } }

if(n%2==0) {

printf(\

} else

printf(\

} }

9实验11F

Problem F: 编写函数:日期的顺序 (Append Code)

Time Limit: 1 Sec Memory Limit: 128 MB

Submit: 1996 Solved: 613 [Submit][Status][Web Board]

Description

输入不超过10000个日期,把它们按从前到后进行排序。 ----------------------------------------------------------------------------- 至少编写两个函数完成程序: 原型:int get_date_array(struct date d[]);

功能:按格式从输入读取若干日期存入结构体数组d[]中,返回值为实际读取的日期数。 原型:int sort_date_array(struct date d[], int n); 功能:将结构体数组中的日期排序。

函数的调用格式见“Append Code”,结构体“struct date”的类型定义根据“Append Code”自行给出。

Input

输入为多行,到EOF结束。

每行一个日期,格式为“mm/dd/yyyy”(月/日/年),其中,月和日都占2个字符位,年占4位。

可以保证输入的日期都是合法的,且都不早于公元1000年。

Output

按从前到后的顺序输出这些日期,每个日期占一行。

Sample Input

01/01/2012 02/01/2010 02/01/2012 10/01/2010 10/01/2012 01/01/2010 02/10/2000 02/10/2012 01/10/2010 10/10/2010 10/10/2000 02/10/2012 01/10/2010 01/10/2012 02/01/2000

Sample Output

02/01/2000 02/10/2000 10/10/2000 01/01/2010 01/10/2010

01/10/2010 02/01/2010 10/01/2010 10/10/2010 01/01/2012 01/10/2012 02/01/2012 02/10/2012 02/10/2012 10/01/2012

HINT

“Append Code”中用到的头文件、全局变量、宏和自定义类型的定义应自行补充。

Append Code

append.c,

#include

#define MAX_SIZE 10000 struct date {

int month,day,year; };

int get_date_array(struct date d[]) {

int i=0;

while(scanf(\ {

i++; }

return i; }

int sort_date_array(struct date d[], int n) {

int i,j,min; struct date t; for(i=0;i

min=i;

for(j=i+1;j

if(d[j].year

t=d[i];

d[i]=d[min]; d[min]=t; }

} }

int main() {

struct date d_arr[MAX_SIZE]; int cases = 0, i, j;

cases = get_date_array(d_arr); sort_date_array(d_arr, cases);

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

printf(\ return 0; }

10实验10B

Problem B: 编写函数:你交换了吗?之一 (Append Code)

Time Limit: 1 Sec Memory Limit: 2 MB

Submit: 4075 Solved: 1885 [Submit][Status][Web Board]

Description

从标准输入读取两个整数a、b,按先小后大的次序输出。那么a、b的输出顺序与输入顺序是否一致呢?即,输出相对于输入是否交换过位置。

注意:a和b相等时不产生交换。

----------------------------------------------------------------------------- 用C语言编写函数实现,append.c中函数原型为: int is_swapped(int * a, int * b);

功能:返回值是0或者1。其它的就不告诉你了,猜猜看^-^。 用C++编写函数实现,append.cc中函数原型为: bool isSwapped(int &a, int &b);

功能:返回一个布尔值(true或false)。 函数的调用格式见“Append Code”。

Input

两个较小的整数a,b,用空格分开。

Output

输出有两种情况:

1) “a b NO”,当a,b没有交换过 2) “b a YES”, 当a,b交换过

Sample Input

5 3

Sample Output

3 5 YES

HINT

参看系统首页上的“Append Code”使用说明,讨论版(Web Board)上也有。

#include

int is_swapped(int * a, int * b) {

int t; if(*a>*b) {

t=*a; *a=*b; *b=t; return 1; } else

return 0; }

int main() {

int a, b;

scanf(\ if(is_swapped(&a, &b))

printf(\ else

printf(\}

11实验10 C

Problem C: 编写函数:你交换了吗?之二 (Append Code)

Time Limit: 1 Sec Memory Limit: 2 MB

Submit: 3346 Solved: 1876 [Submit][Status][Web Board]

Description

从标准输入读取两个整数a、b,按先小后大的次序输出。那么a、b的输出顺序与输入顺序是否一致呢?即,输出相对于输入是否交换过位置。 注意:a和b相等时不产生交换。

-----------------------------------------------------------------------------

用C语言编写函数实现,append.c中函数原型为: int is_swapped(int * a, int * b);

功能:返回值是0或者1。其它的就不告诉你了,猜猜看^-^。 用C++编写函数实现,append.cc中函数原型为: bool isSwapped(int &a, int &b);

功能:返回一个布尔值(true或false)。 函数的调用格式见“Append Code”。

Input

两个较小的整数a,b,用空格分开。

Output

输出有两种情况:

1) “a b NO”,当a,b没有交换过 2) “b a YES”, 当a,b交换过

Sample Input

5 3

Sample Output

3 5 YES

HINT

参看系统首页上的“Append Code”使用说明,讨论版(Web Board)上也有。

Append Code append.c, append.cc, 法1

#include

int is_swapped(int * a, int * b) {

if(*a>*b) return 1; else

return 0; }

int main() {

int a, b;

scanf(\ if(is_swapped(&a, &b))

printf(\ else

printf(\}

实验10D

Problem D: 编写函数:字符串的复制之一 (Append Code)

Time Limit: 1 Sec Memory Limit: 2 MB

Submit: 2782 Solved: 1405 [Submit][Status][Web Board]

Description

将输入的一个字符串s拷贝输出。

----------------------------------------------------------------------------- 编写一个函数str_cpy()求一个串的拷贝:

原型:char * str_cpy(char * t, char * s); 功能:把串s复制到串t中,返回值是串t。 函数的调用格式见“Append Code”。

-----------------------------------------------------------------------------

Invalid Word(禁用单词)错误:在解决这个题目时,某些关键词是不允许被使用的。如果提交的程序中包含了下列的关键词之一,就会产生这个错误。 被禁用的头文件:string.h、stdlib.h。

被禁用的库函数:strcpy()、strncpy()、memcpy()等。

Input

输入为多行。每行为一个字符串s。s的字符总数不超过100个。

Output

串s的复制。

输出两遍,一遍是测试返回值,一遍是测试str。

Sample Input

2 Look!

5 I love china!

Sample Output

2 Look! 2 Look!

5 I love china! 5 I love china!

HINT

str_cpy()的返回值参考标准库函数strcpy()、strstr()、strchr()的设计思路:返回指向目标串的指针。

Append Code

append.c,

#include

#define MAX_STR_LEN 101 char * str_cpy(char * t, char * s) {

int i,j;

for(j=0;s[j]!=0;j++) {

t[j]=s[j]; }

t[j]='\\0'; return t; }

int main() {

char s[MAX_STR_LEN], str[MAX_STR_LEN], *p; while(gets(s) != NULL) {

p = str_cpy(str, s); puts(p); puts(str); }

return 0; }

实验10E

Problem E: 求矩阵的每行之和

Time Limit: 1 Sec Memory Limit: 16 MB

Submit: 3723 Solved: 1963 [Submit][Status][Web Board]

Description

编写一个程序,求矩阵各行元素值相加之和。其中,矩阵的元素都是很小的整数,且各行元素之和的数值不会超出int类型的表示范围。

Input

输入为多行。第一行K>0,表示有K个测试用例。

之后K个测试用例中,首先是两个整数0<=M,N<=100,表示该测试用例的矩阵是一个M行N列的矩阵。之后是一个M行N列的整数组成的矩阵。

Output

输出有K行,每个测试用例的结果占一行。每行的格式为: case i:d1 d2 ... dj

其中i表示测试用例的编号(从1开始),d1、d2、....、dj表示相应测试用例的各行的和,两两之间用空格隔开。

Sample Input

4 3 3 1 2 3 1 2 3 1 2 3 2 3 1 1 1 1 1 1 1 1 1 5 1 3 4 5 6 7

Sample Output

case 1:6 6 6 case 2:3 3 case 3:1

case 4:3 4 5 6 7

HINT Append Code

#include int main() {

int k,m,n,sum,i,j,I,J,a[100][100],p,s=0; scanf(\ for(p=0;p

scanf(\ for(i=0;i

for(j=0;j

scanf(\ } } s++;

printf(\ for(i=0;i

sum=0;

for(j=0;j

sum+=a[i][j]; }

if(i==0)

printf(\ if(i!=0)

printf(\ }

printf(\ } }

实验10F

Problem F: 规范序排列

Time Limit: 1 Sec Memory Limit: 16 MB

Submit: 1580 Solved: 920 [Submit][Status][Web Board]

Description

规范序是一种对字符串比较的排序规则,定义如下: 1 串长小的排在前面;

2 相同串长的按照字典序排列顺序。 串的字典序遵循如下递归定义:

1 两串的前n-1个字符相同,第n个字符字典序小的排在前面; 2 只有两串的字符完全相同时,才有两串相等。

字符的字典序即按照字母排列的顺序,即a, b, ..., z。ASCII码范围内的字符串的字典序比较可以用strcmp()函数(原型和功能见HINT)完成。

Input

第一行输入为一个整数N(N<=100),后接N行,每行一个字符串。每个字符串仅由小写字母“a”~“z”组成,长度不超过10个字符。

Output

输出为N行,按照字符串的规范序排列,规范序小的排前面。

Sample Input

10 abc bc aca ca

c aac aba bc da ba

Sample Output

c ba bc bc ca da aac aba abc aca

HINT

原型: int strcmp(const char *s1,const char * s2);

功能:比较字符串s1和s2。

当s1

当s1==s2时,返回值=0

当s1>s2时,返回值>0

Append Code

#include #include int main() {

int i,j,k,n,min; char t[11]; char s[11][11];

scanf(\ for(i=0; i

scanf(\ }

for(j=0; j

min=j;

for(k=j+1; k

if(strcmp(s[k],s[min])<0) min=k; if(min!=j) {

strcpy(t,s[j]);

strcpy(s[j],s[min]); strcpy(s[min],t); } }

for(j=0; j

min=j;

for(k=j+1; k

strcpy(t,s[j]);

strcpy(s[j],s[min]); strcpy(s[min],t); } }

for(i=0; i

printf(\ printf(\ } }

实验9A

Problem A: 浮点数的拆分

Time Limit: 1 Sec Memory Limit: 2 MB

Submit: 5185 Solved: 1801 [Submit][Status][Web Board]

Description

把一个浮点数拆分成符号、整数部分和小数部分。

所有测试数据的浮点数在double范围内,其整数部分和小数部分都在int范围内。 你可能会用到以下函数:

double floor(double x) 返回值是小于或等于x的最大整数; double ceil(double x) 返回值是大于或等于x的最小整数; 其实不用也行,如果你会用强制(显式)类型转换。

Input

一个用小数点形式(即a.b)表示的浮点数x。

Output

输出x的符号、整数部分a和小数部分0.b,中间用一个空格分隔。 x为负数,符号输出“-”,为正数,符号输出“+”。0的符号是“+”。 x的小数部分不输出无意义的0。 行尾没有回车。

Sample Input

-1.00

Sample Output

- 1 0

HINT Append Code

#include #include

int main() {

int e;

double c,d; scanf(\ if(c<0)

printf(\ else

printf(\ e=fabs(c); c=fabs(c); d=c-e;

printf(\ printf(\}

实验9B

Problem B: 寻求勾股数

Time Limit: 1 Sec Memory Limit: 2 MB

Submit: 2312 Solved: 637 [Submit][Status][Web Board]

Description

满足x2+y2=z2的正整数x,y和z称为一组勾股数(pythagorean triple),又称为毕达哥拉斯三元数组。现在要求你编程求指定范围内的勾股数。

Input

输入若干对数a和b,每对数占一行。0

Output

输出为多行,与上述输入一一对应。

每行输出首先输出用例编号“case i\,其中i为行号,从1开始计数。

如果指定范围内有勾股数,则按照x从小到大的顺序输出每组勾股数,每组勾股数要求x

如果指定范围内没有勾股数,则输出”No pythagorean triple“。

Sample Input

1 10 6 9

Sample Output

case 1:3,4,5;6,8,10

case 2:No pythagorean triple

HINT Append Code 法1

#include #include int main() {

int a,b,m=0,i,j,k,z,p;

while(scanf(\ {

m=m+1;

printf(\ p=0;

for(i=a; i<=b-2; i++) {

for(j=i+1; j<=b-1; j++) {

z=i*i+j*j; z=sqrt(z);

if(z*z==i*i+j*j&&z>=a&&z<=b) {

p=p+1; if(p==1)

printf(\ if(p>=2)

printf(\ } } }

if(p==0)

printf(\ else

printf(\ } }

法2

#include int main() {

int i,j,k,a,b,t,m=0,n;

while(scanf(\ {

m++;

printf(\ if(a>b) {

t=a; a=b; b=t; } n=0;

for(i=a;i<=b-2;i++)

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

for(k=j+1;k<=b;k++) {

if(i*i+j*j==k*k) {

n++; if(n==1)

printf(\ else

printf(\ } }if(n==0)

printf(\ printf(\ } }

实验9C

Problem C: 编写函数:是否水仙花数? (Append Code)

Time Limit: 1 Sec Memory Limit: 2 MB

Submit: 5657 Solved: 1661 [Submit][Status][Web Board]

Description

所谓水仙花数,是指一个三位的正整数,它的每个位上的数字的3次幂之和等于它本身。 ----------------------------------------------------------------------------- 用C语言实现:append.c中函数原型为 int is_daffodil(int n);

功能:若n是水仙花数,则返回1,否则返回0。 用C++实现:append.cc中函数原型为 bool isDaffodil(int n);

功能:若n是水仙花数返回true,否则返回false。

函数的调用格式见“Append Code”。

Input

一个正整数n。

Output

如果n是一个水仙花数,则输出: Yes, it is a daffodil. 否则,输出: No, it is not a daffodil.

Sample Input

153

Sample Output

Yes, it is a daffodil.

HINT

参看系统首页上的“Append Code”使用说明,讨论版(Web Board)上也有。

Append Code

append.c, append.cc, #include int is_daffodil(int n) {

int d,b,c; d=n/100; b=n0/10; c=n;

if(n<100||n>=1000) return 0;

else if(d*d*d+b*b*b+c*c*c==n) return 1; else

return 0; }

int main() {

int n;

scanf(\ printf(\

( is_daffodil(n) ? \

: \ ); return 0; }

实验9D

Problem D: A+B Problem (VIII) : Pointer Practice (Append

Code)

Time Limit: 1 Sec Memory Limit: 2 MB

Submit: 2321 Solved: 1690 [Submit][Status][Web Board]

Description

计算a+b,0<=a,b<1000。

----------------------------------------------------------------------------- 编写一个函数get_int_sum()输入a,b的值,并计算a+b。函数原型为 int get_int_sum(int *, int *);

功能:函数的参数传入a和b的地址,用来存储输入两数的值,返回值是两数之和。 get_int_sum()的调用格式见“Append Code”。

Input

输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。

Output

每行输出一个a+b的和,顺序与输入对应。 格式为“sum = a + b”,具体参见输出样例。

Sample Input

2 1 2 10 20

Sample Output

3 = 1 + 2 30 = 10 + 20

HINT

参看系统首页上的“Append Code”使用说明,讨论版(Web Board)上也有。

Append Code

append.c, append.cc, #include

int get_int_sum(int *a, int *b) {

int c,d,sum;

scanf(\ *a=c; *b=d;

sum=*a+*b; return sum; }

int main() {

int n, a, b, i;

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

printf(\ printf(\

}

return 0; }

实验9E

Problem E: 编写函数:字符串原地逆序 (Append Code)

Time Limit: 1 Sec Memory Limit: 16 MB

Submit: 3573 Solved: 2160 [Submit][Status][Web Board]

Description

将输入的一个字符串s逆序输出。

----------------------------------------------------------------------------- 编写一个函数revs()把一个串在原地(原存储位置上)倒转顺序: 原型:char * revs(char * s);

功能:要逆序的字符串s作为参数传入,revs(s)函数调用后,s中存储的串为原串的逆序。 函数的调用格式见“Append Code”。

Input

输入为一个串s。输入最少为一个字符,最多不会超过100个字符。

Output

串s的逆序。

Sample Input

ABCDE

Sample Output

EDCBA

HINT

本题中,函数原型中的“char * s”可以认为等同于“char s[]”,而返回值的“char *”可以忽略,因为实际并没有用到,或者用“return s”实现即可。

Append Code

append.c,

#include #include

#define MAX_STR_LEN 101 char * revs(char * s) {

char *m; int i,n;

n=strlen(s);

for(i=0;i

m=s[i];

s[i]=s[n-1-i]; s[n-1-i]=m; } }

int main() {

char s[MAX_STR_LEN]; gets(s); revs(s); puts(s); return 0; }

实验8A

Problem A: 编写函数:求整数的位数之一 (Append Code)

Time Limit: 1 Sec Memory Limit: 2 MB

Submit: 2282 Solved: 1411 [Submit][Status][Web Board]

Description

输入一个十进制正整数,它共有几位数字组成?

----------------------------------------------------------------------------- 编写一个函数digits(),其原型为: int digits(int n);

功能:返回n的十进制位数。 函数的调用格式见“Append Code”。

Input

一个不超过10位的正整数num。

Output

输出num有多少位十进制数字。

Sample Input

1000

Sample Output

4

HINT

参看系统首页上的“Append Code”使用说明,讨论版(Web Board)上也有。

Append Code

append.c, append.cc, #include int digits(int n) {

if(n/1000000000>=1) return 10;

else if(n/100000000>=1) return 9;

else if(n/10000000>=1) return 8;

else if(n/1000000>=1) return 7;

else if(n/100000>=1) return 6;

else if(n/10000>=1) return 5;

else if(n/1000>=1) return 4;

else if(n/100>=1) return 3;

else if(n/10>=1) return 2; else

return 1; }

int main() {

int num;

scanf(\

printf(\}

法2

#include

int digits(int n) {

int i; if(n==0)

return 1; else {

for(i=0;; i++) {

if(n!=0) {

n=n/10; } else

break; }

return i; } }

int main() {

int num;

scanf(\

printf(\}

实验8B

Problem B: 编写函数:求整数的位数之二 (Append Code)

Time Limit: 1 Sec Memory Limit: 2 MB

Submit: 2953 Solved: 1308 [Submit][Status][Web Board]

Description

输入一个十进制的整数,它共有几位数字组成?

----------------------------------------------------------------------------- 编写一个函数digits(),其原型为:

int digits(int n);

功能:返回n的十进制位数。 函数的调用格式见“Append Code”。

Input

一个不超过10位的整数num。

Output

输出num有多少位十进制数字。

Sample Input

1000

Sample Output

4

HINT

负数该怎么处理?

Append Code

append.c, append.cc, #include #include int digits(int n) {

int g;

g=fabs(n);

if(g/1000000000>=1) return 10;

else if(g/100000000>=1)

return 9;

else if(g/10000000>=1) return 8;

else if(g/1000000>=1) return 7;

else if(g/100000>=1) return 6;

else if(g/10000>=1) return 5;

else if(g/1000>=1) return 4;

else if(g/100>=1) return 3;

else if(g/10>=1) return 2; else

return 1; }

int main() {

int num;

scanf(\

printf(\}

实验8C

Problem C: 编写函数:数组元素的查找 (Append Code)

Time Limit: 1 Sec Memory Limit: 16 MB

Submit: 3895 Solved: 1843 [Submit][Status][Web Board]

Description

在数组a[]中查找某个值val。

-----------------------------------------------------------------------------

结合“Append Code”中的代码,编写以下函数: 原型:int getarray(int a[]);

功能:遵循样例输入的格式读取一个数组存放在a[]里,返回输入的数组元素个数。 原型:int find(int a[], int n, int val);

功能:在有n个元素的数组a[]中查找值为val的元素。若找到,返回第一个值为val的元素下标,否则返回-1。

函数的调用格式见“Append Code”。

Input

输入的第一行为一个整数M(M>0),后面有M个测试样例。

每个测试样例有两行输入;第一行的第一个整数为N(N<=1000),后接一个长度为N的数组a[];第二行为一个整数值val。

Output

输出有M行。每行输出一个测试样例的结果:若val在数组中,则输出第一个值为val的数组元素下标;否则输出“NOT FOUND”。

Sample Input

4

3 1 2 3 1

5 10 15 20 30 50 50

4 100 200 300 400 500 0 0

Sample Output

0 4

NOT FOUND

NOT FOUND

HINT

“Append Code”中用到的头文件、全局变量或宏的定义应自行补充。

Append Code

append.c,

#include

#define MAX_SIZE 100000 int getarray(int a[]) {

int j,m;

scanf(\ for(j=0;j

scanf(\ }

return m; }

int find(int a[], int n, int val) {

//if(==val)

//printf(\ int p;

for(p=0;p

if(a[p]==val) return p; }

return -1; }

int main() {

int cases, i;

int arr[MAX_SIZE], size; int val, found = 0;

scanf(\ for(i = 1; i <= cases; i++) {

size = getarray(arr);

scanf(\

found = find(arr, size, val); if(found == -1) {

printf(\ continue; }

printf(\ }

return 0; }

实验8D

Problem D: 串的某个字符

Time Limit: 1 Sec Memory Limit: 2 MB

Submit: 4996 Solved: 2072 [Submit][Status][Web Board]

Description

求一个字符串s中的第k个字符。

Input

输入一个串s和一个正整数k。s不为空串且长度不超过10。

Output

输出串s的第k个字符。

若k超过s的长度范围,输出“error”。

Sample Input

abc 1

Sample Output

a

HINT Append Code

#include #include int main() {

char str11[11]; int n;

scanf(\ if(n<=strlen(str11)) printf(\ else

printf(\ }

实验8E

Problem E: 成绩的柱状图

Time Limit: 1 Sec Memory Limit: 2 MB

Submit: 2371 Solved: 1390 [Submit][Status][Web Board]

Description

柱状图(Histogram),也称条图(英文:bar graph)、长条图(英文:bar chart)、条状图,是一种以长方形的长度为变量的表达图形的统计报告图,由一系列高度不等的纵向条纹表示数据分布的情况,用来比较两个或以上的价值(不同时间或者不同条件),只有一个变量,通常利用于较小的数据集分析。柱状图图亦可横向排列,或用多维方式表达。 你的任务是把学生成绩转换成直观的柱状图表示。

Input

第一行为一个整数N(N<=200),表示有N个学生。后面有N行输入。每行有两部分,第一部分是学生姓名(不超过8个字符,且不含空白符);第二部分是学生的成绩,均为0~100之间的整数。

Output

输出有N行,顺序与输入对应,每行包括以下内容: 1. 学生的姓名,占8个字符、右对齐; 2. 一个空格;

3. 一条竖线,用“|”表示;

4. 一个表示分数的长条:由“=”组成。学生成绩为x,就输出一个长度为x个长条。长条是左对齐的;

5. 一个回车(用来换行!)。

Sample Input

10

Tom 46 Jerry 88 Zhang3 99 Li4 100 Wang5 95 Zhao6 60 Liu7 1 Wang8 0 Song9 5 Ma10 45

Sample Output

Tom

|============================================== Jerry

|========================================================================================

本文来源:https://www.bwwdw.com/article/29pr.html

Top