1、求最大公约数和最小公倍数

题目内容:

编写程序,在主函数中输入两个正整数 a,b,调用两个函数 fun1() 和 fun2(),分别求 a 和 b 的最大公约数和最小公倍数,在主函数中输出结果。

输入格式:

两个正整数

输出格式:

最大公约数和最小公倍数

输入样例:

12,40[回车]

输出样例:

最大公约数:4[回车]

最小公倍数:120[回车]

 1 #include 2 #include 34 int LCM(int x, int y); 5 int GCD(int x, int y); 6 int main() 7 { 8 int a,b; 9 scanf("%d,%d",&a,&b);10 printf("最大公约数:%d\n",GCD(a,b));11 printf("最小公倍数:%d",LCM(a,b));12 return 0;13 }14 15 int LCM(int x, int y){16 return x/GCD(x,y)*y; 17 }18 int GCD(int x, int y){19 return y == 0 ? x : GCD(y, x%y); 20 }

2、排序并插入

题目内容:

编写程序,在主函数中定义一个有10个元素的整型一维数组,用户输入9个数据,调用函数,对数组元素进行从小到大排序后,在函数中输入一个数,插入到数组中正确的位置,并输出。

输入格式:

9个整数和1个整数

输出格式:

10个整数

输入样例:

2,3,1,5,6,76,89,31,90[回车]

7[回车]

输出样例:

1,2,3,5,6,7,31,76,89,90[回车]

 1 #include 2 void sortArr(int *arr, int n, int x) 3 {4 arr[n-1] = x; 5 //插入排序 6 int i; 7 for(i=1; i=0 && key0},i,x;19 for(i=0; i<8; ++i)20 scanf("%d,",&arr[i]);21 scanf("%d%d",&arr[i],&x);22 23 sortArr(arr,10,x);24 for(i=0; i<9; ++i)25 printf("%d,",arr[i]);26 printf("%d\n",arr[i]);27 return 0;28 }

3、奇数求和

题目内容:

用递归算法实现,输入整数n(n>0), 求1+3+5+7….+(2*n-1) 的和

输入格式:

输入整数n

输出格式:

输出和

输入样例:

5[回车]

输出样例:

25[回车]

 1 #include 23 int sum(int n); 4 int main() 5 { 6 int n; 7 scanf("%d",&n); 8 printf("%d\n",sum(n)); 9 return 0;10 }11 12 int sum(int n)13 {14 if(n == 1)15 return 1;16 return 2*n-1 + sum(n-1);17 }

4、巧算自然数

题目内容:

编程实现输入一个自然数,若为偶数,则把它除以2;若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。输出经过多少次可以得到自然数1和每次得到的值。

输入格式:

输入一个自然数

输出格式:

输出经过多少次可以得到自然数1和每次得到的值

输入样例:

22[回车]

输出样例:

22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1[回车]

step=16[回车]

 1 #include 2 int main() 3 {4 int n, step=1; 5 scanf("%d",&n); 6 while(n!=1) 7 { 8 printf("%d,",n); 9 step++;10 if(n%2==0)11 n /= 2;12 else if(n%2)13 n = n*3+1;14 }15 printf("1\n");16 printf("step=%d\n", step);17 return 0;18 }

5、卖鸭子

题目内容:

编程调用递归函数。一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了7个村子后还剩2只鸭子,问他出发时共赶多少只鸭子?经过每个村子时依次卖出多少只鸭子?

输入格式:

输出格式:

出发时总鸭子数

每个村子卖出鸭子数

输入样例:

输出样例:(不是结果,仅表示格式)

sum=25[回车]

sell=8,sell=4,[回车]

 1 #include 2 int fun(int arr[],int n,int m) 3 { 4 if(n==0){ 5 arr[n] = m/2+1; 6 return m; 7 } 8 arr[n] = m/2+1; 9 return fun(arr, n-1,m=2*(m+1));10 }11 int main()12 { 13 int arr[7] = {0};14 printf("sum=%d\n", fun(arr,7,2));15 for(int i=0; i<7; ++i)16 printf("sell=%d,", arr[i]);17 return 0;18 }

6、输出各位数字之和

题目内容:

编程调用递归函数,求输入一个数,输出这个数的各位数字之和。

输入格式:

输入一个数

输出格式:

输出这个数的各位数字之和

输入样例:

2354[回车]

输出样例:

14[回车]

 1 #include 2 int fun(int n) 3 { 4 if(n==0) 5 return 0; 6 return n%10 + fun(n/10); 7 } 8 int main() 9 { 10 int n;11 scanf("%d",&n);12 printf("%d\n", fun(n));13 return 0;14 }

7、排序

题目内容:

用指针方法,将一维数组int a[10] 中元素按从小到大顺序输出。

输入格式:

10个整数,空格隔开

输出格式:

排序后的10个数,逗号隔开

输入样例:

12 34 56 43 7 89 81 11 33 90[回车]

输出样例:

7,11,12,33,34,43,56,81,89,90[回车]

 1 #include  2 #include  3 #define N 1000 45 int main() 6 { 7 int arr[N] = {0},x; 8 for(int i=0; i<10; ++i){ 9 scanf("%d",&x);10 arr[x]++;11 }12 int flag = 1;13 for(int j=0; j<N; ++j){14 while(arr[j]){15 if(!flag)16 printf(",");17 printf("%d",j);18 flag = 0;19 arr[j]--;20 }21 }22 return 0;23 }
 1 #include  2 #include  3 #define N 1000 45 int main() 6 { 7 int arr[N] = {0}; 8 for(int i=0; i<10; ++i) 9 scanf("%d",&arr[i]);10 //选择(选一个最小的)11 for(int *p = arr; p
 1 #include  2 #include  3 #define N 1000 45 int main() 6 { 7 int arr[N] = {0}; 8 for(int i=0; i<10; ++i) 9 scanf("%d",&arr[i]);10 //冒泡11 for(int i=0; ii; --j){13 if(arr[j-1]>arr[j]){14 int t = arr[j-1];15 arr[j-1] = arr[j];16 arr[j] = t;17 }18 }19 }20 21 for(int k=0; k<10; ++k){22 if(k)23 printf(",");24 printf("%d",arr[k]);25 }26 return 0;27 }

8、成绩排序

题目内容:

从键盘输入3个同学4门课的成绩,将其按平均分从高到低排序输出。

输入格式:

输入3个同学4门课的成绩

输出格式:

按平均分从高到低排序输出

输入样例:

89 78 80 76 88 78 75 90 99 92 100 89[回车]

输出样例:

99,92,100,89[回车]

88,78,75,90[回车]

89,78,80,76[回车]

 1 #include  2 struct student{ 3 int a,b,c,d; 4 double avg; 5 }; 6 void swap(struct student *a,struct student *b){ 7 struct student t = *a; 8 *a = *b; 9 *b = t;10 }11 int main()12 {13 struct student s[3];14 for(int i=0; i<3; ++i){15 scanf("%d%d%d%d",&s[i].a,&s[i].b,&s[i].c,&s[i].d);16 s[i].avg = (s[i].a + s[i].b + s[i].c + s[i].d)/4.0;17 }18 19 if(s[0].avg<s[1].avg)20 swap(&s[0],&s[1]);21 if(s[0].avg<s[2].avg)22 swap(&s[0],&s[2]);23 if(s[1].avg<s[2].avg)24 swap(&s[1],&s[2]);25 26 for(int i=0; i<3;++i)27 printf("%d,%d,%d,%d\n",s[i].a,s[i].b,s[i].c,s[i].d);28 return 0;29 }

9、输出指定学生成绩

题目内容:

从键盘输入3个同学4门课的成绩,输出指定同学的成绩和平均分。

输入格式:

输入3个同学4门课的成绩

输出格式:

输出指定同学的成绩和平均分

输入样例:

89 78 80 76 88 78 75 90 99 92 100 89[回车]

1[回车]

输出样例:

89 78 80 76[回车]

80.75[回车]

 1 #include  2 struct student{ 3 int a,b,c,d; 4 double avg; 5 }; 67 int main() 8 { 9 struct student s[3];10 for(int i=0; i<3; ++i){11 scanf("%d%d%d%d",&s[i].a,&s[i].b,&s[i].c,&s[i].d);12 s[i].avg = (s[i].a + s[i].b + s[i].c + s[i].d)/4.0;13 }14 15 int i;16 scanf("%d",&i);17 printf("%d %d %d %d\n",s[i-1].a,s[i-1].b,s[i-1].c,s[i-1].d);18 if(s[i-1].avg==(int)s[i-1].avg)19 printf("%.f\n",s[i-1].avg);20 else21 printf("%.2f\n",s[i-1].avg);22 return 0;23 }

10、统计字符串出现次数

题目内容:

从键盘输入两个字符串,输出第二个串在第一个串中出现的次数。如果没有,输出“No”。

输入格式:

输入两个字符串

输出格式:

输出第二个串在第一个串中出现的次数。

如果没有,输出 No

输入样例1:

This is his book[回车]

is[回车]输出样例1:

3[回车]

输入样例2:

This is my book[回车]

at[回车]

输出样例2:

No[回车]

 1 #include  2 #include  3 #include  45 int KMPStrMatching(char* S, char* P, int *N, int start)6 { 7 int j= 0; // 模式的下标变量 8 int i = start; // 目标的下标变量 9 int pLen = strlen(P); // 模式的长度10 int tLen = strlen(S); // 目标的长度11 if (tLen - start < pLen) // 若目标比模式短,匹配无法成功12 return (-1);13 while ( j < pLen && i = pLen)20 return (i-pLen); // 注意仔细算下标21 else return (-1);22 }23 24 int* findNext(char* P) 25 {26 int j, k;27 int m = strlen(P); // m为模式P的长度28 int *next = (int*)malloc(m*sizeof(int));29 next[0] = -1;30 j = 0; k = -1;31 while (j < m-1) 32 {33if(k == -1 || P[k] == P[j]){34j++; k++; next[j] = k;35}36else 37k = next[k]; //不等则采用 KMP 递归找首尾子串 38 }39 return next;40 }41 42 int main()43 {44 int count=0;45 char s1[256]="",s2[256]="";46 gets(s1);47 gets(s2);48 int len1 = strlen(s1);49 int len2 = strlen(s2);50 int ret = 0;51 for(int i=0; i<len1; i=ret+len2)52 {53 ret = KMPStrMatching(s1,s2,findNext(s2),i);54 if(ret == -1)55 break;56 count++;57 }58 if(count)59 printf("%d\n",count);60 else61 printf("No\n");62 return 0;63 }

11、成绩统计

题目内容:有如下学生成绩表,第一列前4行为学生姓名,第一列最后一行为平均分,表中给定数据为学生成绩(每一列为同一门课)

编程输出:学生姓名,每个学生的平均分,及各门课程平均分

输入格式:

输出格式:

学生姓名,每个学生的平均分(按行输出)各门课程平均分(按列输出)(若平均分为整数,则输出整数,若平均分为小数,则保留两位)

 1 #include  2 #include  3 #include  45 static float av[4]; 67 struct student{ 8 char *s; 9 float score[4];10 }stu[4];11 12 void fun1(struct student *stu)13 {14 float sum=0;15 for(int i=0; iscore[i];18 sum += stu->score[i];19 }20 if((int)sum/4==sum/4)21 printf("%s,%.f\n",stu->s,sum/4);22 else23 printf("%s,%.2f\n",stu->s,sum/4);24 }25 26 void fun2(float av)27 {28 if((int)(av/4)==av/4)29 printf("%.f",av/4);30 else31 printf("%.2f",av/4);32 }33 34 int main()35 {//036 stu[0].s = "wanglei",stu[0].score[0] = 78,stu[0].score[1] = 90,stu[0].score[2] = 87,stu[0].score[3] = 92;37 fun1(&stu[0]);38 //139 stu[1].s = "lihong",stu[1].score[0] = 88,stu[1].score[1] = 91,stu[1].score[2] = 89,stu[1].score[3] = 78;40 fun1(&stu[1]);41 //242 stu[2].s = "zhangli",stu[2].score[0] = 84,stu[2].score[1] = 76,stu[2].score[2] = 83,stu[2].score[3] = 75;43 fun1(&stu[2]);44 //345 stu[3].s = "liuming",stu[3].score[0] = 88,stu[3].score[1] = 90,stu[3].score[2] = 71,stu[3].score[3] = 83;46 fun1(&stu[3]);47 //448 printf("AVERAGE:");49 for(int i=0; i<4; ++i){50 if(i)51 printf(",");52 fun2(av[i]);53 }54 return 0;55 }

12、输出菱形

题目内容:

输入数字和大写字母,输出由字母组成的菱形。

例如:3 B

B

C C

D D

E E

F

输入格式:

数字和大写字母

输出格式:

由字母组成的菱形

输入样例:

3[空格]B[回车]

输出样例:

[空格][空格]B[回车]

[空格]C[空格]C[回车]

D[空格][空格][空格]D[回车]

[空格]E[空格]E[回车]

[空格][空格]F[回车]

 1 #include  2 int main() 3 { 4 char start; 5 int high,i,j; 6 scanf("%d %c",&high,&start); 7 //上半部 8 for (i=0; i<high; i++) 9 {10 //空格11 for (j=1;j<high-i;j++)12 printf (" ");13 //字符、空格、字符14 printf ("%c",start);15 for (j=0;j0 ;i--)26 {27 //空格28 for (j=0;j<high-i;j++)29 printf (" ");30 //字符、空格、字符31 printf ("%c",start);32 for (j=0;j<2*i-3;j++)33 printf (" ");34 if (i-1){35 printf ("%c",start);36 } 37 start++;38 //换行39 printf ("\n");40 }41 return 0;42 }

13、最大数

题目内容:

任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531。

输入格式:

自然数 n

输出格式:

各位数字组成的最大数

输入样例:

1593[回车]

输出样例:

9531[回车]

 1 #include  2 int main() 3 { 4 int n; 5 scanf("%d",&n); 6 int key[10] = {0}; 7 while(n) 8 { 9 key[n%10]++;10 n /= 10;11 }12 for(int i=9; i>=0; --i){13 while(key[i]){14 printf("%d",i);15 key[i]--;16 }17 }18 return 0;19 }

14、字符串删除

题目内容:

输入一个字符串,找出其中相同的字符(不区分大小写),并删除,输出剩余的部分。

例如:输入:eye 输出:y

输入格式:

字符串

输出格式:

删除相同字符之后的字符串

输入样例:

eye[回车]

输出样例:

y[回车]

 1 #include 2 #define N 256 34 int main() 5 { 6 /* 输入一个字符串 */ 7 char s[N] = ""; 8 gets(s); 9 char *p = s;10 /* 判断是否重复 */11 int key[N] = {0};12 while(*p)13 {14 key[*p++]++;15 }16 /* 输出不重复的字符 */17 for(int i=0; s[i]; ++i)18 if(key[s[i]]==1)19 printf("%c",s[i]);20 return 0;21 }

15、字母存储

题目内容:

使用单项链表存储一组字母{a, b, c, d, c, b , a},输入序号输出字母,输入字母输出最后一次出现的序号,越界则输出N。

输入格式:

序号或字母

输出格式:

字母或序号

输入样例1:

2[回车]

输出样例1:

c[回车]

输入样例2:

c[回车]

输出样例2:

4[回车]

输入样例3:

8[回车]

输出样例3:

N[回车]

 1 #include  2 #include  3 #include  45 typedef struct node *PNODE; 6 typedef struct node NODE; 7 struct node{ 8 char ch; 9 PNODE next;10 };11 12 /* void print(PNODE head){13 while(head){14 printf("%c",head->ch);15 head = head->next;16 }17 printf("\n");18 } */19 20 void print(PNODE head,int ch){21 if(!isalpha(ch)&&ch>'7'){22 printf("N\n");23 return;24 }25 int index = -1,t = -1;//元素从0开始计算26 while(head){27 index++; //元素计数28 if(head->ch==ch)//是字母29 t = index + '0';//序号转字符30 else if(index==ch-'0')//是数字31 t = head->ch;//保存字母32 head = head->next;33 }34 printf("%c\n",t);//打印字母(数字)35 }36 37 int main()38 { 39 /* 创建头结点 */40 PNODE head,rear;41 head = rear = (PNODE)malloc(sizeof(NODE));42 head->next = NULL;43 /* 字符串 */44 char s[] = "abcdcba";45 char*p = s;46 while(*p)47 {48 PNODE s = (PNODE)malloc(sizeof(NODE));49 s->ch = *p++;50 s->next = NULL;51 rear->next = s;//尾插法52 rear = s;53 }54 /* print(head->next); */55 int ch;56 ch = getchar();57 print(head->next,ch);58 59 return 0;60 }

16、链表合并

题目内容:

实现两个由单项链表存储的有序字母数据的合并,如有重复的则只保留一个。

例如:给定{a, c ,f}, { b, e, g}合并后结果为{a, b, c , e , f , g}。

输入格式:

两个有序字母数据

输出格式:

合并后的字母数据

输入样例1:

a b c[回车]

d e f[回车]

输出样例1:

a b c d e f[回车]

输入样例2:

e f g[回车]

e g m[回车]

输出样例2:

e f g m[回车]

 1 #include  2 #include  3 typedef struct node NODE; 4 typedef struct node* Linklist; 5 struct node{ 6 char ch; 7 Linklist next; 8 }; 9 Linklist mergelist(Linklist LA,Linklist LB)10 {11 /* 12 LA的头指针为新链表的头、尾指针13 LB的头结点释放14 */15 Linklist head = LA,rear = LA,temp = LB; 16 LA = LA->next;17 LB = LB->next;18 free(temp);19 /* 逐个结点链接到新链表 */20 while(LA && LB)21 {22 if(LA->ch == LB->ch)23 {24 Linklist p = LB;25 LB = LB->next;26 free(p); //删除重复内容的结点27 continue;28 }29 elseif(LB->chch)30 {31 rear->next = LB;//尾插结点32 LB = LB->next;33 }34 else if(LA->chch)35 {36 rear->next = LA;//尾插结点37 LA = LA->next;38 }39 rear = rear->next;//更新尾结点40 }41 if(LA)42 rear->next = LA;//尾插剩余结点43 if(LB)44 rear->next = LB; 45 return head;46 }47 Linklist create(){48 Linklist L,p,r;49 L = r = (Linklist)malloc(sizeof(NODE));50 L->next = NULL;51 char ch;52 while((ch=getchar())!='\n')//空格结束53 {54 if(ch!=' '){ //去除空格55 p = (Linklist)malloc(sizeof(NODE));56 p->ch = ch;57 p->next = NULL;58 r->next = p;59 r = p;60 }61 }62 return L;63 }64 void print(Linklist L){65 int flag = 0;66 while(L->next)67 {68 if(flag)69 printf(" ");70 flag = 1;71 L = L->next;72 printf("%c",L->ch);73 }74 printf("\n");75 }76 int main()77 {78 Linklist L1 = create();79 Linklist L2 = create();80 Linklist L3 = mergelist(L1,L2);81 print(L3);82 return 0;83 }

17、解析字符串

题目内容:

输入一个字符串,要求将其中的字母‘n’理解为回车符号’\n’,模拟文件缓冲区读取的数据,并按替换后的数据流解析出其中包括的字符串。(即通过'n'分割两个字符串)

输入格式:

一个字符串

输出格式:

其中包括的字符串

输入样例:

abcnde[回车]

输出样例:

abc[回车]

de[回车]

 1 #include  2 #define N 256 3 int main() 4 { 5 char str[N]="",*p; 6 p = str; 7 gets(str); 8 while(*p) 9 {10 if(*p=='n'){11 if(*(p-1)!='n')12 putchar('\n');13 }14 else 15 putchar(*p);16 p++;17 }18 return 0;19 }

18、字符串的输入与反向显示

题目内容:

请用标准设备文件的方式完成字符串的输入与反向显示。

输入格式:

字符串

输出格式:

字符串

输入样例:

abc[回车]

输出样例:

cba[回车]

 1 #include  2 #include 3 #define N 256 4 int main() 5 { 6 char str[N]="",*p = str; 7 gets(str); 8 p += strlen(str) - 1; 9 while(*p)10 putchar(*p--);11 return 0;12 }

19、基本四则运算表达式

题目内容:

请结合C语言语法知识以及对编译过程的理解,完成一个仅含一个运算符的基本四则运算表达式字符串的计算。

输入格式:

基本四则运算表达式字符串

输出格式:

运算结果

输入样例:

1+2

输出样例:

3

 1 #include  2 int main() 3 { 4 char op; 5 int i,a,b; 6 scanf("%d%c%d",&a,&op,&b); 7 switch(op) 8 { 9 case '+':printf("%d",a+b);break;10 case '-':printf("%d",a-b);break;11 case '*':printf("%d",a*b);break;12 case '/':printf("%d",a/b);break;13 }14 return 0;15 }

20、递归的方法计算含多个运算符的四则运算表达式字符串的值

题目内容:

请在上一题的基础上,采用递归的方法,计算含多个运算符的四则运算表达式字符串的值(无括号,但要考虑优先级)

输入格式:

多个运算符的四则运算表达式字符串

输出格式:

运算结果

输入样例:

3*2+3

输出样例:

9

 1 #include  2 #include  3 double expression_value();//求一个表达式的值 4 doubleterm_value();//求一个项的值 5 doublefactor_value();//求一个因子的值 6 doubleexpression_value() 7 { 8 doubleresult=term_value(); 9 while(1)10 {11 char op = getc(stdin);12 ungetc(op, stdin);13 if(op=='+'||op=='-')14 {15 getchar();16 doublevalue=term_value();17 if(op=='+')18 result+=value;19 else20 result-=value;21 }22 else23 break;24 }25 return result;26 }27 doubleterm_value()28 {29 doubleresult = factor_value();30 while(1)31 {32 char c= getc(stdin);33 ungetc(c, stdin);34 if(c=='*'||c=='/')35 {36 getchar();37 doublevalue = factor_value();38 if(c=='*')39 result*=value;40 else41 result/=value;42 }43 else44 break;45 }46 return result;47 }48 doublefactor_value()49 {50 doubleresult=0;51 char c= getc(stdin);52 ungetc(c, stdin);53 if(c=='(')54 {55 getchar();56 result = expression_value();57 getchar();58 }59 else//因子本身是一个数字(整个递归的出口)60 {61 while(isdigit(c))//处理整数部分62 {63 result = 10*result+c-'0';64 getchar();65 c = getc(stdin);66 ungetc(c, stdin);67 }68 if(c=='.')//处理小数部分69 {70 getchar();71 c = getc(stdin);72 ungetc(c, stdin);73 double t=0.1;74 while(isdigit(c))75 {76 result += (c-'0')*t;77 t*=0.1;78 getchar();79 c = getc(stdin);80 ungetc(c, stdin);81 }82 }83 }84 return result;85 }86 int main()87 {88 printf("%.f\n",expression_value());89 return 0;90 }

21、从键盘输入一个字符串,该串中包含字母和数字,然后将数字排在最前面,字母 排在后面,不改变原有数字或字母间的顺序。

 1 #include  2 #include  3 int main() 4 { 5 char a[256]="",b[256]=""; 6 char *p,*q,*ptr; 7 p = q = a; 8 ptr = b; 9 gets(a);10 while(*p)11 {12 if(*p>='0'&&*p<='9'){13 *ptr++ = *p;14 }15 else16 *q++ = *p;17 p++;18 }19 *q = '\0';20 strcat(ptr,a);21 printf("%s\n",b);22 return 0;23 }

22、给定一个数,进行因式分解,删除重复的因子后,剩余因子相乘后输出

 1 #include  2 #include  3 int main() 4 { 5 int n,i=2,result=1,flag=1; 6 scanf("%d",&n); 7 while(i<=n) 8 { 9 if(n%i==0){10 n/=i;11 if(flag)12 result *=i;13 flag=0;14 }15 else {16 ++i;17 flag=1;18 }19 }20 printf("%d\n",result);21 return 0;22 }
 1 #include  2 #include  3 int main() 4 { 5 int n,result=1,m=2; 6 scanf("%d",&n); 7 while(m<=n) 8 { 9 if(n%m==0){10 result *=m;11 while(n%m==0)12 n /= m;13 }14 m++;15 }16 printf("%d\n",result); 17 return 0;18 }

23、)输入行数 n,及首个小写字母,输出三角形字母图 形,如果输出超过 z,再回到 a,依次循环下去。

 1 #include  2 #include  3 int main() 4 { 5 int n,i,j,k; 6 char c; 7 scanf("%d,%c",&n,&c); 8 for(i=0; i0; --j){11 printf("-");12 }13 if(c>'z') c = 'a';14 putchar(c++);15 if(i){16 for(int k=(i-1)*2+1;k>0; k--)17 printf("-");18 if(c>'z') c = 'a';19 putchar(c++);20 }21 printf("\n");22 }23 for(int m=0; m'z') c = 'a';25 putchar(c++);26 }27 return 0;28 }

24、Z型字母图形

题目内容:

输入行数n,及首个小写字母,输出Z型字母图形,如果输出超过z,再回到a,依次循环下去。

输入格式:

3,b

输出格式:

bcd

e

fgh【回车】

输入样例:

3,b

输出样例:

bcd

e

fgh

 1 #include  2 int main() 3 { 4 int n, i, j; 5 char c;6 scanf("%d,%c", &n, &c); 7 for(i=0; i<n; i++) 8 { 9 for(j=0; j<n; j++)10 {11 if(i==0 || i==n-1)12 printf("%c",c++);13 else if(i+j==n-1)14 printf("%c",c++);15 else if(i+j'z') c='a';18 }19 printf("\n");20 } 21 return 0;22 } 

25、特殊数字

题目内容:

给定一个区间,输出其中前半部分数字之和等于后半部分数字之和的数,没有则输出No output。

输入格式:

120 130

输出格式:

121【回车】

输入样例:

120 130

输出样例:

121

 1 #include  2 3 int divide(int i,int *num) 4 { 5 int index = 0; 6 while(i) 7 { 8 num[index++] = i%10; 9 i = i/10;10 }11 return index;12 }1314 int isEqual(int *num,int index)15 {16 int i,sum1,sum2;17 sum1 = sum2 = 0;18 for(i=0; i<index/2; i++)19 {20 sum1 += num[i];21 sum2 += num[index-i-1];22 }23return (sum1 == sum2);24 }2526 int main()27 {28 int a=120,b=130,index,num[12],flag=0;29 scanf("%d%d",&a,&b);30 for(int i=a;i<=b;i++)31 {32 index = divide(i,num);33 if(isEqual(num,index))34 {35 flag = 1;36 printf("%d\n",i);37 } 38 } 39 if(!flag)40 puts("No output");41 return 0;42 } 

26、连续子串

题目内容:

从键盘输入一个字符串,按从左向右顺序分解成连续字符组成的几个子串,并顺序输出这些子串

输入格式:

bxyzacdefgh345x

输出格式:

xyz

cdefgh

345【回车】

输入样例:

bxyzacdefgh345x

输出样例:

xyz

cdefgh

345

 1 #include  2 #include  3 int main() 4 { 5 char s[256] = "";6 int count=0; 7 gets(s); 8 for( int i=0; s[i]; ++i) 9 {10 if(s[i+1]&&s[i+1]==s[i]+1) count++;11 else if(count>=1)12 {13 char t[256] = "";14 printf("%s\n",strncpy(t,&s[i-count],count+1));15 count=0;16 }17 }18 return 0;19 }
 1 #include  2 //#include  3 int main() 4 { 5 char s[256] = ""; 6 char t[256] = "";7 int count=0; 8 gets(s); 9 for( int i=0; s[i]; ++i)10 {11 if(s[i+1]&&s[i+1]==s[i]+1) t[count++] = s[i];12 else if(count>=1)13 {14 t[count++] = s[i];15 t[count] = '\0';16 printf("%s\n",t);17 count=0;18 }19 }20 return 0;21 }

27、

下面程序的功能是将字符串s的所有字符传送到字符串t中,要求每传递三个字符后再存放一个空格,例如字符串s为"abcdefg",则字符串t为"abc def g"。

 1 #include  2 #include  3 int main() 4 {5 int j, k=0; 6 char s[60], t[100], *p; 7 p=s; 8 gets(p); 9 while(*p) 10 {11 for (j=1; j<=3 && *p; p++,k++,j++)t[k]=*p;12 13 if (j==4) { t[k]=' '; k++;}//*p14 15 }16 t[k]='\0';17 puts(t);18 return 0;19 }

28、下面程序的功能是实现数组元素中值的逆转

 1 #include  2 #include  3 void invert(int *s,int num) 4 {5 int *t,k; 6 t=s+num; 7 while(s<t)8 {9 k=*s;10 *s=*t;11 *t=k;12 s++;13 t--;14 }15 }16 int main()17 { 18 int i,n=10,a[10]={1,2,3,4,5,6,7,8,9,10};19 invert(a,n-1);20 for(i=0; i<10; i++)21 printf("%4d",a[i]);22 printf("\n");23 return 0;24 }

29、建立一个包含30个元素的循环链表

 1 #include  2 #include  3 #include  45 struct node{ 6 int no; 7 struct node* next; 8 }; 9 10 int main()11 { 12 int i, k;struct node *head, *p, *q;13 head = (struct node *)malloc(sizeof(struct node));14 head->no= -1;15 head->next = head;16 for ( i=30; i>0; i-- )/* 生成循环链表 */17 { 18 p = (struct node *)malloc(sizeof(struct node));19 p->next = head->next;p->no = i;head->next = p;20 }21 22 q = head->next;23 while(q->no!=-1)24 {25 printf("%d ",q->no);26 q = q->next;27 }28 return 0;29 }

30、下面程序的功能是将磁盘上的一个文件复制到另一个文件中,两个文件名在命令行中给出(假定给定的文件名无误)

 1 #include  2 #include  3 int main(int argc,char *argv[])4 {5 FILE *fin,*fout; 6 if(argc< 3 )7 {8 printf("The command line error! ");9 exit(0); 10 }11 12 fin=fopen(argv[1], "r"); 13 14 fout=fopen(argv[2], "w"); 15 16 while(!feof(fin)) 17 fputc(fgetc(fin), fout); 18 fclose(fin);19 fclose(fout);20 return 0;21 }