C语言实验
更新时间:2024-04-08 08:32:01 阅读量: 综合文库 文档下载
注意:
1. 输入数据时请考虑需要Double 还是int 2.
1 输出图形
#include
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 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 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 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 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 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 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 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 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 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 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 #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 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 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 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 |========================================================================================
正在阅读:
C语言实验04-08
2004年陈先奎押题讲座笔记04-21
党建工作制度及职责03-11
班组安全行为规范管理制度03-28
指路的英语作文4篇04-01
Matlab2010b 完美安装08-10
新概念英语第一册自学笔记含课后练习答案:Lesson 87-8804-25
会计电算化实务考试操作步骤07-03
尼康D7000菜单基本设置12-18
怎样做好自我管理03-29
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 语言
- 实验