当前位置:   article > 正文

39个C语言小程序(适合新手)

c语言小程序
1 %c 输入 2 个数字(0--9),将 2 个数字组成 2 位数并每位上的数字不能相同,以%d 输出。
  1. #include <stdio.h>
  2. int main()
  3. {
  4. char a,b;
  5. int sum;
  6. printf("输入两个数字(0~9\n");
  7. scanf("%c %c",&a,&b);
  8. if(a==b){
  1. printf("两数不能相等!\n");
  2. }else if( a<'0'|| a >'9' || b < '0' || b > '9'){
  3. printf("两个数必须为0~9的数字\n");
  4. }else {
  5. sum=(a-'0')*10 + (b-'0');
  6. printf("result = %d\n",sum);
  7. }
  8. return 0;
  9. }
考点:if else的用法,以及ascii码中数值的大小,这个可以用man ascii查看ascii表格
------------------------------------------------------------------------------------------------------------------------------
2. 从键盘上输入一个字符,如果它是大写字母,则把它转换成小写字母输出;否则,直接输出。
  1. #include <stdio.h>
  2. int main(){
  3. char a;
  4. printf("输入一个字符");
  5. scanf("%c",&a);
  6. if(a>='A' && a<='Z'){
  7. a=a+32;
  8. printf("%c\n",a);
  9. }else if(a>='a' && a<='z'){
  10. printf("%c\n",a);
  11. }else{
  12. printf("请输入一个字符\n");
  13. }
  14. return 0;
  15. }
考点:ascii码中大小写字母之间的差值,以及if else用法
------------------------------------------------------------------------------------------------------------------------------
3. 编程输入一串字符串将字符串中,字母、数字和其他符号归类,并统计出各个字符的个数。
  1. int charsize(char a[]);//字符串长度函数
  2. void classify(int n,int *a,int *b,int *c,char *ptr);//统计
  3. int main()
  4. {
  5. char ch[200];
  6. int i;
  7. int a=0,b=0,c=0;
  8. printf("输入一个字符串\n");
  9. scanf("%s",ch);
  10. charsize(ch);
  11. classify(charsize(ch),&a,&b,&c,ch);
  12. printf("总共输入%d个字符\n\n",charsize(ch),b);
  13. printf("字母有%d个\n数字有%d个\n其他有%d个\n",a,b,c);
  14. return 0;
  15. }
  16. //统计字符串的长度,也可以用string.h库中的函数,stelrn(char *str)函数来确定字符串长度,新手建议自己动手写。
  17. int charsize(char a[])
  18. {
  19. int n=0;
  20. while(*(a+n) != '\0')
  21. {
  22. n++;
  23. }
  24. return n;
  25. }
  26. //分类其中a,b,c,分别代表字母,数字,和其他。
  27. void classify(int n,int *a,int *b,int *c,char *ptr)
  28. {
  29. int i;
  30. for(i=0;i<n;i++){
  31. if((*(ptr+i)>='a'&&*(ptr+i)<='z')||(*(ptr+i)>='a'&&*(ptr+i)<='z')){
  32. (*a)++;
  33. }
  34. else if((*(ptr+i)>='0'&&*(ptr+i)<='9')){
  35. (*b)++;
  36. }
  37. else{
  38. (*c)++;
  39. }
  40. }
  41. return ;
  42. }
考点:分函数,以及传参时简单的一级指针的应用
------------------------------------------------------------------------------------------------------------------------------
4. 从键盘上输入一个百分制成绩 score,按下列原则输 出 其 等 级 : score≥90 , 等 级 为 A ;80≤score<90,等级为 B;70≤score<80,等级为C;60≤score<70,等级为 D;score<60,等级为E。
  1. #include <stdio.h>
  2. void score(int temp)
  3. {
  4. switch(temp)
  5. {
  6. case 10:
  7. printf("The score is : A");
  8. break;
  9. case 9 :
  10. printf("The score is : A");
  11. break;
  12. case 8 :
  13. printf("The score is : B");
  14. break;
  15. case 7 :
  16. printf("The score is : C");
  17. break;
  18. case 6 :
  19. printf("The score is : D");
  20. break;
  21. default:
  22. printf("The score is : E");
  23. break;
  24. }
  25. printf("\n");
  26. return ;
  27. }
  28. int main()
  29. {
  30. int sco,temp;
  31. printf("输入一个学生成绩:\n");
  32. scanf("%d",&sco);
  33. temp = sco/10;
  34. score(temp);
  35. return 0;
  36. }

考点:分函数、switch语句的用法

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

5. 编程实现以下功能:读入两个运算数(data1 和 data2)及一个运算符(op),计算表达式 data1 opdata2 的值,其中 op 可为‘+’,‘-’,‘*’,‘/’(用 switch 语句实现)

这里我们将+ - * / 以及main函数,分别用add.c  sub.c  mul.c  div.c main.c 分别来写,注意:这里并不是分文件,只是C语言的灵活写法

  1. //add.c
  2. #include <stdio.h>
  3. int add(int x,int y,int *res)
  4. {
  5. *res = x + y ;
  6. return 0;
  7. }
  1. //sub.c
  2. #include <stdio.h>
  3. int sub(int d1,int d2,int *res)
  4. {
  5. *res = d1 - d2 ;
  6. return 0;
  7. }
  1. //sub.c
  2. #include <stdio.h>
  3. int mul(int x,int y,int *p)
  4. {
  5. *p = x * y ;
  6. return 0;
  7. }
  1. //div.c
  2. #include<stdio.h>
  3. int div(int x,int y,int *res)
  4. {
  5. if( y == 0 )
  6. {
  7. return 1;
  8. }
  9. else
  10. {
  11. *res = x / y ;
  12. return 0;
  13. }
  14. }
  1. //main.c
  2. #include <stdio.h>
  3. extern int add(int x,int y,int *res);
  4. extern int sub(int x,int y,int *res);
  5. extern int mul(int x,int y,int *res);
  6. extern int div(int x,int y,int *res);
  7. extern void display(int x,int *y);
  8. int (*fun)(int x,int y,int *res); //函数的指针
  9. int main()
  10. {
  11. char op;
  12. int data1,data2,result; //result变量用来存储运算后存储的结果。
  13. printf("输入 A op B ,eg: 5 + 4 :\n");
  14. scanf("%d %c %d",&data1,&op,&data2);
  15. switch(op)
  16. {
  17. case '+':fun = add;break;
  18. case '-':fun = sub;break;
  19. case '*':fun = mul;break;
  20. case '/':fun = div;break;
  21. }
  22. display(fun(data1,data2,&result),&result);//fun函数:将data1和data2的运算结果,存储在result中
  23. return 0;
  24. }
这里编译的时候需要将.c文件全部编译:gcc add.c mul.c sub.c  div.c main.c  -o exe
考点:extern关键字的灵活用法
------------------------------------------------------------------------------------------------------------------------------

6. 下面程序的功能是用 while 语句求 1 至 1000的数,且一行只打印五个数。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i=0;
  5. int count=0;
  6. while(i<1000);
  7. {
  8. if((i%3==2)&&(i%5==3)&&(i%7==2))
  9. {
  10. printf("%5d",i);
  11. count++;
  12. if(count%5==0)
  13. {
  14. printf("\n");
  15. }
  16. }
  17. i++;
  18. }
  19. return 0;
  20. }

考点:while()语句
------------------------------------------------------------------------------------------------------------------------------

7. 求 fibonacci 数列的前 40 个数。该数列的生成方法为:F1=1,F2=1,Fn=Fn-1+Fn-2(n>=3),即从第 3 个数开始,每个数等于前 2 个数之和。

  1. #include <stdio.h>
  2. #if 1
  3. int fibonacci(); //外部函数声明(extern)
  4. int main()
  5. {
  6. int i;
  7. for(i=0;i<40;i++){
  8. if(i%4==0){ //每4个数为一行
  9. printf("\n");
  10. }
  11. printf("%10d",fibonacci()); //打印fibonacci数列
  12. }
  13. printf("\n");
  14. return 0;
  15. }
  16. /*
  17. 函数功能:计算fibonacci数列的下一个值
  18. 返回值 :last(fibonacci数列下一个值)
  19. */
  20. int fibonacci()
  21. {
  22. static int last = 0;
  23. static int last_but_one = 1;
  24. int next;
  25. next = last + last_but_one;
  26. last_but_one = last; //注意赋值顺序,防止last被覆盖
  27. last = next;
  28. return last; //下一个数值
  29. }
  1. /*
  2. static:静态变量,函数结束后,变量不会被收回,占用的内从空间还在,
  3. 空间里保存的数值还存在。
  4. 1 0 1 1 2 3 5
  5. l_b_o l n l_b_o l n
  6. last_but_one : l_b
  7. last : l
  8. next : n
  9. */

考点:static关键字

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

8. 编写程序,输出用一元人民币兑换成 1 分、2 分和5 分硬币的不同兑换方法。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i; //兑换成5分的兑换方法,最多可兑换20个。
  5. int j; //兑换成2分的兑换方法,最多可兑换50个。
  6. int k; //兑换成1分的兑换方法,最多可兑换100个。
  7. int count=0; //循环次数(种类)
  8. for(i=0;i<=100/5;i++) //5分循环次数
  9. {
  10. printf("Five cents: %-5d",i); //2分循环次数
  11. for(j=0;j<=(100-5*i)/2;j++)
  12. {
  13. count++;
  14. if(j%5 == 0)
  15. {
  16. printf("\n");
  17. }
  18. printf("Two cents: %-5d",j);
  19. k = 100 - 5*i - 2*j; //5分,2分已知,1分兑换方法固定
  20. printf("One cent:%-5d",k);
  21. }
  22. printf("\n");
  23. }
  24. printf("the count is : %d\n",count);
  25. return 0;
  26. }
------------------------------------------------------------------------------------------------------------------------------
9. 打印出 100~1000 之间的所有“水仙花数”(“水仙花数”是指一个 3 位数,各位数字的立方和等于该数本身。 153=1 +5 +3 , 就是“水仙花数” )如:153
  1. #include <stdio.h>
  2. mypower(int x,int y);//求x的y次幂,x底数,y幂数
  3. int is_flower();
  4. int part();
  5. int main()
  6. {
  7. int i;
  8. for(i=100;i<1000;i++)
  9. {
  10. if(is_flower(i))
  11. {
  12. printf("%6d",i);
  13. }
  14. }
  15. printf("\n");
  16. return 0;
  17. }
  18. int is_flower(int n)//一个数是否为水仙花数
  19. {
  20. int sum=0;
  21. int i;
  22. for(i=0;i<3;i++)
  23. {
  24. sum += part(n,i);//i=0,个位的3次方;i=1,十位的3次方;i=2,百位的3次方
  25. }
  26. if(n == sum)
  27. {
  28. return 1;
  29. }
  30. else
  31. {
  32. return 0;
  33. }
  34. }
  35. int part(int num,int digital)//num:输入的数,digital:输入的数的每位数为多少
  36. {
  37. int s;
  38. int ss;
  39. s = num/mypower(10,digital)%10;//分离一个百位数,求底数
  40. ss = mypower(s,3); //求这个底数的三次方
  41. return ss;
  42. }
  1. double mypower(double x,double y)
  2. {
  3. double sum=1;
  4. int i;
  5. if(y==0)
  6. {
  7. return 1.0;
  8. }
  9. if(y>0)
  10. {
  11. for(i=0;i<y;i++)
  12. {
  13. sum=sum*x;
  14. }
  15. }
  16. if(y<0)
  17. {
  18. for(i=y;i<0;i++)
  19. {
  20. sum=sum*x;
  21. }
  22. sum=1.0/sum;
  23. }
  24. return sum;
  25. }
------------------------------------------------------------------------------------------------------------------------------
10. 编程取满足式 11+20+29+38 ...... +n ≤100 的 n。
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i;
  5. int a = 11;
  6. int q = 9;
  7. int n,nn; //nn = n+1
  8. int sum = 0; //前n项总和
  9. int sum_but_next = 0; //前n+1项总和
  10. for(i=0;i<10;i++)
  11. {
  12. n = q * i + a;
  13. nn = q * (i+1) + a;
  14. sum = sum + n;
  15. sum_but_next = sum + nn;
  16. if(sum <= 100 && sum_but_next >= 100)
  17. {
  18. printf("i = %d\n",i); //输出第n项
  19. printf("n = %d\n",n); //项数n为多少
  20. }
  21. }
  22. return 0;
  23. }
-----------------------------------------------------------------------------------------------------------------------------
11. 下面程序的功能是从键盘输入一个字符串,然后反序输出输的字符串
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5. int i;
  6. char arra[128];
  7. char arrb[128];
  8. printf("输入字符串\n");
  9. scanf("%s",arra); //输入的字符串存入arra数组中
  10. for(i=0;i<strlen(arra);i++) //strlen(arra)求arra字符串的长度
  11. {
  12. arrb[strlen(arra)-1-i] = arra[i]; //将arra中的字符串倒序存入arrb中
  13. }
  14. printf("%s\n",arrb);
  15. return 0;
  16. }
------------------------------------------------------------------------------------------------------------------------------
12. 下面程序的功能是显示具有 n 个元素的数组 s 中的最大元素,输出最大数值和其位置。
  1. #include <stdio.h>
  2. #define N 6
  3. void input(int n,int *ptr); //输入函数,从键盘上输入N个数,N为define N 定义的数
  4. int fun_max(int n,int a[]); //查找最大值,return@:最大值下标
  5. int main()
  6. {
  7. int arr[N];
  8. input(N,arr); //输入函数,输入N个元素,arr:存储数组的元素
  9. printf("the max is arr[%d] = %d\n",fun_max(N,arr),*(arr+fun_max(N,arr)));
  10. return 0;
  11. }
  12. /*
  13. *功能:查找一个数组中的最大数位置
  14. * */
  15. int fun_max(int n,int a[])
  16. {
  17. int i;
  18. int temp = *a;
  19. int count = 0;
  20. for(i=0;i<n-1;i++)
  21. {
  22. if(temp < *(a+i+1))
  23. {
  24. temp = *(a+i+1);
  25. count = i+1;
  26. }
  27. }
  28. return count;
  29. }
  30. /*
  31. *功能 :输入一个数组。
  32. *param :n:输入数组的个数,*ptr:指向数组的指针
  33. * @return:空
  34. * */
  35. void input(int n,int *ptr)
  36. {
  37. int i,j;
  38. printf("Input %d Integer:\n",n);
  39. for(i=0;i<n;i++)
  40. {
  41. scanf("%d",&j);
  42. *(ptr+i) = j;
  43. }
  44. }
------------------------------------------------------------------------------------------------------------------------------
13. x 的值转换为二进制数,所得的二进制数放在一个一维数组中返回,二进制数的最低位放在下标为 0 的元素中。
  1. #include <stdio.h>
  2. void output(int n,int *ptr);//输出显示一个数组的内容,
  3. //n:数组中元素的个数,*ptr,数组指针。
  4. int main()
  5. {
  6. int x;
  7. int i = 0;
  8. int arr[20]={0};
  9. printf("please input a num\n");
  10. scanf("%d",&x);
  11. while(1){
  12. *(arr+i)=x % 2;
  13. x = x / 2;
  14. i++;
  15. if(x == 0){
  16. break;
  17. }
  18. }
  19. output(i,arr);
  20. return 0;
  21. }
  22. void output(int n,int *ptr)
  23. {
  24. int i;
  25. for(i=0;i<n;i++)
  26. {
  27. printf("%4d",*(ptr+i));
  28. }
  29. printf("\n");
  30. }
------------------------------------------------------------------------------------------------------------------------------
14. 以下程序是用来输入 5 个整数,并存放在数组中,找出最大数与最小数所在的下标位置,并把二者对调,然后输出调整后的 5 个数。

  1. //lib.h
  2. #ifndef LIB_H
  3. #define LIB_H
  4. int fun_max(int n,int a[]);
  5. int fun_min(int n,int a[]);
  6. void input(int n,int *ptr);
  7. void output(int n,int *ptr);
  8. void swap(int *x,int *y);
  9. #endif
  1. //lib.c
  2. #include <stdio.h>
  3. int fun_max(int n,int a[]){ //n:数组中元素个数,a[]:数组指针,指向要查找的数组
  4. int i;
  5. int temp = *a; //取第一项,然后逐次与下一相比较
  6. int count = 0;
  7. for(i=0;i<n-1;i++){
  8. if(temp < *(a+i+1)){ //如果下于下一项,那么最大值为下一项
  9. temp = *(a+i+1);//将最大值赋给temp
  10. count = i+1; //下表值加1。
  11. }
  12. }
  13. return count;
  14. }
  15. int fun_min(int n,int a[]){
  16. int i;
  17. int temp = *a;
  18. int count = 0;
  19. for(i=0;i<n-1;i++){
  20. if(temp > *(a+i+1)){
  21. temp = *(a+i+1);
  22. count = i+1;
  23. }
  24. }
  25. return count;
  26. }
  27. void input(int n,int *ptr){
  28. int i,j;
  29. printf("Input %d Integer:\n",n);
  30. for(i=0;i<n;i++){
  31. scanf("%d",&j);
  32. *(ptr+i) = j;
  33. }
  34. }
  35. void output(int n,int *ptr){
  36. int i;
  37. for(i=0;i<n;i++){
  38. printf("%4d",*(ptr+i));
  39. }
  40. printf("\n");
  41. }
  42. void swap(int *x,int *y){
  43. int sw;
  44. sw = *x;
  45. *x = *y;
  46. *y = sw;
  47. }
  1. //main.c
  2. #include <stdio.h>
  3. #include "lib.h"
  4. #define N 5
  5. int main()
  6. {
  7. int arr[N]={0};
  8. input(N,arr); //输入一个数组
  9. printf("the max is arr[%d] = %d\n",fun_max(N,arr),*(arr+fun_max(N,arr)));
  10. printf("the min is arr[%d] = %d\n",fun_min(N,arr),*(arr+fun_min(N,arr)));
  11. swap(arr+fun_max(N,arr),arr+fun_min(N,arr)); //交换两个数组中的数
  12. output(N,arr); //输出一个数组
  13. return 0;
  14. }
------------------------------------------------------------------------------------------------------------------------------
15. 首先对 a 所指的 N 行 N 列的矩阵,找出各行中的最大的数,再求这 N 个最大值中的最小的那个数。
  1. #include <stdio.h>
  2. #define N 4 //行数
  3. #define M 4 //列数
  4. void twoutput(int n,int m,int (*ptr)[m]);//输出一个二位数组
  5. void twoinput(int n,int m,int (*ptr)[m]);//输入一个二位数组
  6. int find_max(int n,int m,int (*ptr)[m]); //查找二位数组中每行的最大值,@return:最大值下标
  7. int fun_max(int n,int a[]);//查找最大值,@return:最大值下标
  8. int fun_min(int n,int a[]);//查找最小值,@return:最小值下标
  9. int main()
  10. {
  11. int arb[N]; //存储每行最大的数
  12. int arr[N][M]; //输入的二位数组
  13. int sum;
  14. twoinput(N,M,arr); //提示输入一个二位数组
  15. twoutput(N,M,arr); //输出这个二位数组的数
  16. for(sum=0;sum<N;sum++)
  17. {
  18. printf("第%d行最大的数是%d \n",sum+1,arr[sum][find_max(sum,M,arr)]);
  19. // printf("s=%d\n",find_max(sum,M,arr));
  20. // printf("第%d行最大的数是%d \n",sum+1,*(*(arr+sum)+find_max(sum,M,arr)));
  21. arb[sum] = arr[sum][find_max(sum,M,arr)]; //
  22. }
  23. printf("\n");
  24. printf("%d 行最大元素为 %d\n",N,*(arb+fun_max(N,arb)));
  25. printf("%d 行最小元素为 %d\n",N,*(arb+fun_min(N,arb)));
  26. return 0;
  27. }
  28. int find_max(int n,int m,int (*ptr)[m]){
  29. int temp = *(*(ptr+n));
  30. int count=0;
  31. int i;
  32. for(i=0;i<m-1;i++){
  33. if(temp < *(*(ptr+n)+i+1)){
  34. temp = *(*(ptr+n)+i+1);
  35. count= i+1;
  36. }
  37. }
  38. return count;
  39. }
  40. int fun_max(int n,int a[]){
  41. int i;
  42. int temp = *a;
  43. int count = 0;
  44. for(i=0;i<n-1;i++){
  45. if(temp < *(a+i+1)){
  46. temp = *(a+i+1);
  47. count = i+1;
  48. }
  49. }
  50. return count;
  51. }
  52. int fun_min(int n,int a[])
  53. {
  54. int i;
  55. int temp = *a;
  56. int count = 0;
  57. for(i=0;i<n-1;i++){
  58. if(temp > *(a+i+1)){
  59. temp = *(a+i+1);
  60. count = i+1;
  61. }
  62. }
  63. return count;
  64. }
  65. void twoinput(int n,int m,int (*ptr)[m]){
  66. printf("请输入%d行%d列的数组,共%d个元素\n",n,m,n*m);
  67. int i,j;
  68. for(i=0;i<n;i++){
  69. for(j=0;j<m;j++){
  70. scanf("%d",(*(ptr+i)+j));
  71. }
  72. }
  73. }
  74. void twoutput(int n,int m,int (*ptr)[m]){
  75. int i,j;
  76. for(i=0;i<n;i++){
  77. for(j=0;j<m;j++){
  78. printf("%-3d",*(*(ptr+i)+j));
  79. }
  80. printf("\n");
  81. }
  82. }
------------------------------------------------------------------------------------------------------------------------------
16. 在数组中查找最大的数与数组中最后一个数交换,并查找数组中最小的数与数组第一个数交换。

  1. #include <stdio.h>
  2. #define N 6
  3. void swap(int *x,int *y); //交换
  4. void input(int n,int *ptr); //输入
  5. void output(int n,int *ptr);//输出
  6. int fun_max(int n,int a[]); //查找最大值,@return:最大值下标
  7. int fun_min(int n,int a[]); //查找最小值,@return:最小值下标
  8. int main(){
  9. int arr[N];
  10. input(N,arr); //输入一个一维数组
  11. fun_max(N,arr); //查找数组中的最大值
  12. swap(arr+fun_max(N,arr),arr+N-1); //与数组中最后一个数交换
  13. fun_min(N,arr); //查找最小值
  14. swap(arr+fun_min(N,arr),arr); //与数组中的第一个数交换
  15. output(N,arr); //输出交换后的数组
  16. return 0;
  17. }
  18. int fun_max(int n,int a[]){
  19. int i;
  20. int temp = *a;
  21. int count = 0;
  22. for(i=0;i<n-1;i++){
  23. if(temp < *(a+i+1)){
  24. temp = *(a+i+1);
  25. count = i+1;
  26. }
  27. }
  28. return count;
  29. }
  30. int fun_min(int n,int a[]){
  31. int i;
  32. int temp = *a;
  33. int count = 0;
  34. for(i=0;i<n-1;i++){
  35. if(temp > *(a+i+1)){
  36. temp = *(a+i+1);
  37. count = i+1;
  38. }
  39. }
  40. return count;
  41. }
  42. void input(int n,int *ptr){
  43. int i,j;
  44. printf("Input %d Integer:\n",n);
  45. for(i=0;i<n;i++){
  46. scanf("%d",&j);
  47. *(ptr+i) = j;
  48. }
  49. }
  50. void output(int n,int *ptr){
  51. int i;
  52. for(i=0;i<n;i++){
  53. printf("%4d",*(ptr+i));
  54. }
  55. printf("\n");
  56. }
  57. void swap(int *x,int *y){
  58. int sw;
  59. sw = *x;
  60. *x = *y;
  61. *y = sw;
  62. }
------------------------------------------------------------------------------------------------------------------------------
17. 将字符变量的值插入已经按 ASCII 码值从小到大排好序的字符串中
  1. #include <stdio.h>
  2. #include <string.h>
  3. void order(int n,char a[]);//排序
  4. void insert_char(char a[],char ch);//插入一个字符ch到数组a[]中
  5. int main()
  6. {
  7. char i;
  8. char arra[128]={0};
  9. printf("请输入一字符串: ");
  10. scanf("%s",arra);
  11. order(strlen(arra),arra); //排序,从小到大
  12. printf("字符串的排序为: %s\n",arra);
  13. printf("请插入一个字符: ");
  14. getchar();
  15. scanf("%c",&i);
  16. insert_char(arra,i); //插入一个字符
  17. printf("字符插入结果为: %s\n",arra);
  18. return 0;
  19. }
  20. void order(int n,char a[])
  21. {
  22. char swap;
  23. int i,j;
  24. for(i=0;i<n-1;i++){
  25. for(j=0;j<n-1-i;j++){
  26. if(*(a+j) > *(a+j+1)){
  1. swap = *(a+1+j);
  2. *(a+1+j) = *(a+j);
  3. *(a+j) = swap;
} } }}void insert_char(char a[],char ch){ int i = 0; for(i=0;i<=strlen(a);i++) { if(ch < a[strlen(a)-i]) //从后往前比 { *(a+strlen(a)+1-i) = *(a+strlen(a)-i); //将最大字符往后挪一位 *(a+strlen(a)-i)=ch; //将字符插入中间 } }}


------------------------------------------------------------------------------------------------------------------------------18. 下面程序的功能是从键盘上输入两个字符串,对两个字符串分别排序;然后将它们合并,合并后的字符串按 ASCII 码值从小到大排序,并删去相同的字符。
  1. #include <stdio.h>
  2. #include <string.h>
  3. void order(int n,char a[]); //排序
  4. void del_same(int n,char a[],char b[]);//消除相同字符
  5. int main()
  6. {
  7. char a[256];
  8. char b[64];
  9. char res[256]={0};
  10. printf("输入第一个字符串:");
  11. scanf("%s",a);
  12. order(strlen(a),a); //对输入的第一个字符串排序
  13. printf("排列后 结果:%s\n",a);
  14. printf("输入第二个字符串:");
  15. scanf("%s",b);
  16. order(strlen(b),b); //对输入的第二个字符串排序
  17. printf("排列后 结果:%s\n",b);
  18. strcat(a,b); //合并两个字符串
  19. order(strlen(a),a); //合并后排序
  20. printf("合并后 结果:%s\n",a);
  21. del_same(strlen(a),a,res); //删除相同的字符
  22. printf("去掉相同字符结果:%s\n",res);
  23. return 0;
  24. }
  25. void order(int n,char a[])
  26. {
  27. char swap;
  28. int i,j;
  29. for(i=0;i<n-1;i++)
  30. {
  31. for(j=0;j<n-1-i;j++)
  32. {
  33. if(*(a+j) > *(a+j+1))
  34. {
  35. swap = *(a+1+j);
  36. *(a+1+j) = *(a+j);
  37. *(a+j) = swap;
  38. }
  39. }
  40. }
  41. }
  42. void del_same(int n,char a[],char b[])
  43. {
  44. int i;
  45. int j=0;
  46. for(i=0;i<=strlen(a);i++)
  47. {
  48. if( *(a+i) != *(a+1+i))
  49. {
  50. *(b+j) = *(a+i);
  51. j++;
  52. }
  53. }
  54. }
------------------------------------------------------------------------------------------------------------------------------
19. 一数列 包含 10 个数,已按升序排列,现要求,能够从指定位置开始的 n 个数按逆序重新排列并输出新的完整数列(例如:1 ,2,3,4,5,6,7,8,9,10。若要求把从第 4 个数开始的 5 个数逆序重新排列,新数列为 1,2,3,8,7,6,5,4,9,10)

  1. #include <stdio.h>
  2. #define N 10
  3. void input(int n,int *ptr); //输入数组
  4. void output(int n,int *ptr); //输出数组
  5. void order(int n,int a[]); //对数组排序
  6. void swap(int *x,int *y); //交换
  7. void new_alignment(int n,int m,int a[]);//新的排序区间n,m为区间的开始和末尾
  8. int main()
  9. {
  10. int a,b;
  11. int arr[N];
  12. input(N,arr);
  13. order(N,arr);
  14. printf("升序排列后为:");
  15. output(N,arr);
  16. printf("区间[n,m]为调换区,请输入n m\n");
  17. scanf("%d %d",&a,&b);
  18. new_alignment(a,b,arr);
  19. printf("排序后的数列:");
  20. output(N,arr);
  21. return 0;
  22. }
  23. void new_alignment(int n,int m,int a[]){
  24. int i;
  25. int temp;
  26. for(i=0;i<(m-n)/2;i++) //将要指定的区间内容进行调换
  27. {
  28. swap((a+i+n-1),(a+m-2-i));
  29. }
  30. }
  31. void swap(int *x,int *y){
  32. int sw;
  33. sw = *x;
  34. *x = *y;
  35. *y = sw;
  36. }
  37. void input(int n,int *ptr){
  38. int i,j;
  39. printf("Input %d Integer:\n",n);
  40. for(i=0;i<n;i++){
  41. scanf("%d",&j);
  42. *(ptr+i) = j;
  43. }
  44. }
  45. void output(int n,int *ptr){
  46. int i;
  47. for(i=0;i<n;i++){
  48. printf("%4d",*(ptr+i));
  49. }
  50. printf("\n");
  51. }
  52. void order(int n,int a[]){
  53. int swap;
  54. int i,j;
  55. for(i=0;i<n-1;i++){
  56. for(j=0;j<n-1-i;j++){
  57. if(*(a+j) > *(a+j+1)){
  58. swap = *(a+1+j);
  59. *(a+1+j) = *(a+j);
  60. *(a+j) = swap;
  61. }
  62. }
  63. }
  64. }

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

20. 10 个学生围一圈,从第一个学生开始数数,数到 3 的学生退出,显示最后剩余的学生号码。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int arr[128];
  5. int x,a,i=0,j=0;
  6. int count=0;
  7. printf("输入学生数量x = \n");
  8. scanf("%d",&x);
  9. for(a=1;a<=x;a++){
  10. *(arr+a-1) = a; //将10个学生编号为1~10
  11. }
  12. /************************************************/
  13. while(j < x-1) //10个学生,那么循环数9次,就剩下最后一个
  14. {
  15. if(*(arr+i) != 0 )
  16. {
  17. count++; //如果不为0,开始数数
  18. }
  19. if(count == 3) //如果数到三
  20. {
  21. count = 0; //重新开始数
  22. *(arr+i) = 0; //退出后将其位置填0
  23. j++; //当前数的次数+1,
  24. }
  25. i++; //数组中的数循环数数
  26. if(i == x) //如果到10了,从第一个数接着数
  27. {
  28. i = 0;
  29. }
  30. }
  31. /***************************************************/
  32. for(i=0;i<10;i++)
  33. {
  34. printf("%-3d",*(arr+i));
  35. }
  36. printf("\n");
  37. return 0;
  38. }
------------------------------------------------------------------------------------------------------------------------------
21. 程序的功能是输入 10 个整数,将它们存入数组a 中,再输入一个数 x,然后在数组中查找 x,如果找到,输出相应的下标(如有多个元素与 x 相等,只要输出下标值最小的那个元素的下标),否则,输出“Not Found”。
  1. #include <stdio.h>
  2. #define N 10
  3. void input(int n,int *ptr); //输入数组
  4. void output(int n,int *ptr); //输出数组
  5. void find_num(int n,int a[],int *m,int b[]); //查找数组
  6. int main()
  7. {
  8. int arr[N]; //输入一个数组
  9. int nu[N]; //存储查询后索引号的数组
  10. int s=0; //标记,有多少个相同元素
  11. input(N,arr);
  12. find_num(N,arr,&s,nu);
  13. printf("x 的索引为:\n");
  14. output(s,nu);//输出结果
  15. return 0;
  16. }
  17. void find_num(int n,int a[],int *m,int num[])
  18. {
  19. int x,i;
  20. printf("input a num:\n");
  21. scanf("%d",&x);
  22. for(i=0;i<n;i++)
  23. {
  24. if(x == *(a+i)) //如果输入的x与数组中的元素相同
  25. {
  26. *(num+*m) = i; //将索引号存入数组num中,
  27. (*m)++; //有意个相等,那么标记就+1。
  28. }
  29. }
  30. if(*m == 0) //如果一次都不相等,那么就是没有找到
  31. {
  32. printf("Not Found!");
  33. }
  34. printf("\n");
  35. }
  36. void input(int n,int *ptr){
  37. int i,j;
  38. printf("Input %d Integer:\n",n);
  39. for(i=0;i<n;i++){
  40. scanf("%d",&j);
  41. *(ptr+i) = j;
  42. }
  43. }
  44. void output(int n,int *ptr){
  45. int i;
  46. for(i=0;i<n;i++){
  47. printf("%4d",*(ptr+i));
  48. }
  49. printf("\n");
  50. }
------------------------------------------------------------------------------------------------------------------------------
22. 求数列中第二小的数

  1. #include <stdio.h>
  2. #define N 5
  3. void input(int n,int *ptr);//输入一个数组
  4. void order(int n,int a[]); //排序
  5. int main()
  6. {
  7. int arr[N];
  8. input(N,arr); //输入一个数组
  9. order(N,arr); //对着个数组排序
  10. printf("第二小的数 = %d\n",*(arr+1));
  11. return 0;
  12. }
  13. void order(int n,int a[])
  14. {
  15. int swap;
  16. int i,j;
  17. for(i=0;i<n-1;i++)
  18. {
  19. for(j=0;j<n-1-i;j++)
  20. {
  21. if(*(a+j) > *(a+j+1)){
  22. swap = *(a+1+j);
  23. *(a+1+j) = *(a+j);
  24. *(a+j) = swap;
  25. }
  26. }
  27. }
  28. }
  29. void input(int n,int *ptr)
  30. {
  31. int i,j;
  32. printf("Input %d Integer:\n",n);
  33. for(i=0;i<n;i++)
  34. {
  35. scanf("%d",&j);
  36. *(ptr+i) = j;
  37. }
  38. }
------------------------------------------------------------------------------------------------------------------------------
23. 统计两个数组中相应元素大于、等于或小于的次数,并由此决定那个数组较大。

  1. #include <stdio.h>
  2. #include <string.h>
  3. void compare();
  4. int main()
  5. {
  6.         compare();   //比较两个数组
  7.         return 0;
  8. }
  1. void compare()
  2. {
  3. char arra[128];
  4. char arrb[128];
  5. int i,s,a=0,b=0,c=0;
  6. printf("输入第一个字符串:");
  7. scanf("%s",arra);
  8. printf("输入第二个字符串:");
  9. scanf("%s",arrb);
  10. if(strlen(arra) >= strlen(arrb))
  11. {
  12. s = strlen(arra); //s为比较次数,两个数组那个字符串长度长取哪个
  13. }else{
  14. s = strlen(arrb);
  15. }
  16. for(i=0;i<s;i++)
  17. {
  18. if(*(arra+i) > *(arrb+i)){
  19. a++; //大于的次数
  20. }else if(*(arra+i) < *(arrb+i)){
  21. b++; //小于的次数
  22. }else if(*(arra+i) == *(arrb+i)){
  23. c++; //等于的次数
  24. }
  25. }
  26. printf("\n");
  27. if( a > b ){
  28. printf("第 一 个字符串大\n");
  29. }else if(a < b){
  30. printf("第 二 个字符串大\n");
  31. }else{
  32. printf(" 两个字符串相等\n");
  33. }
  34. printf("第1个字符串相应元素 大于 第二个的次数为:%d次\n",a);
  35. printf(" 小于 :%d次\n",b);
  36. printf(" 等于 :%d次\n",c);
  37. }
------------------------------------------------------------------------------------------------------------------------------
24. 请编写一个函数 fun,它的功能是:将一个字符串转换为一个整数

  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5. char arr[256]={0};
  6. char brr[128]={0};
  7. int i,j=0;
  8. int sum = 0;
  9. printf("输入一个数字字符串:");
  10. scanf("%s",arr);
  11. for(i=0;i<strlen(arr);i++) //输入的字符串,将数字取出来存入brr中
  12. {
  13. if(arr[i] >= '0' && arr[i] <= '9')
  14. {
  15. brr[j] = arr[i];
  16. j++;
  17. }
  18. }
  19. for(i=0;i<strlen(brr);i++) //对brr中的字符数子进行转换,转黄乘整数
  20. {
  21. sum = sum*10+(brr[i]-'0');
  22. }
  23. printf("sum = %d\n",sum);
  24. return 0;
  25. }
------------------------------------------------------------------------------------------------------------------------------
25. 编写一个函数,该函数可以统计一个字符串在另一个字符串中出现的次数。

  1. #include <stdio.h>
  2. #include <string.h>
  3. int statistic(char a[],char b[]); //统计b在a中出现的次数
  4. int main()
  5. {
  6. char a[128];
  7. char b[32];
  8. printf("请输入一个字符串char_1:");
  9. scanf("%s",a);
  10. getchar();
  11. printf("请输入查找字符串char_2:");
  12. scanf("%s",b);
  13. statistic(a,b); //统计b在a中出现的次数,返回值:出现的次数
  14. printf("字符串char_2在char_1中出现 %d 次。\n",statistic(a,b));
  15. return 0;
  16. }
  17. int statistic(char a[],char b[])
  18. {
  19. int i,j,s=0,k=0;
  20. for(i=0;i<strlen(a);i++) //字符串char1长度,将每个字符都跟char2的比较
  21. {
  22. if(*(a+i) == *b)
  23. {
  24. for(j=0;j<strlen(b);j++) //字符串char2长度,判断char1当前字符串开头的后的每位字符,是否都与char2的每位
  25. 字符相等
  26. {
  27. if(a[i+j] == b[j])
  28. {
  29. s++;//如果有一个相等,则s就+1,
  30. }else{
  31. s=0;
  32. }
  33. if(s == strlen(b))//如果s等于有strlen(b),则证明这每位的字符都相等
  34. {
  35. k++; //k+1,证明该char2在char1中出现了1次
  36. s=0; //重新计数
  37. }
  38. }
  39. }
  40. }
  41. return k;
  42. }
------------------------------------------------------------------------------------------------------------------------------
26. 该程序功能是运行时输入 n,输出 n 各位数字之和(如 n=1308,则输出 12,n=-3204 则输出 9)

  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5. char arr[128];
  6. int i,sum = 0;
  7. printf("请输入n:");
  8. scanf("%s",arr);
  9. if(*arr == '-'){
  10. for(i=1;i<strlen(arr);i++)
  11. {
  12. sum += (*(arr+i)-'0');
  13. }
  14. printf("sum = %d\n",sum);
  15. }
  16. else{
  17. for(i=0;i<strlen(arr);i++)
  18. {
  19. sum += (*(arr+i)-'0');
  20. }
  21. printf("sum = %d\n",sum);
  22. }
  23. return 0;
  24. }

------------------------------------------------------------------------------------------------------------------------------
27. 统计整数的各位数字中零的个数,并求各位数字中最大者的个数及最大数输出。

  1. #include <stdio.h>
  2. #include <string.h>
  3. int fun_max(int n,char a[]);//差炸最大值下标
  4. int main()
  5. {
  6. char a[128],s;
  7. int i;
  8. int couna = 0;
  9. int counb = 0;
  10. printf("请输入一个整数: \n");
  11. scanf("%s",a);
  12. s=*(a+fun_max(strlen(a),a)); //s为数组中的最大数
  13. for(i=0;i<strlen(a);i++)
  14. {
  15. if( *(a+i)>='0' && *(a+i)<='9' )
  16. {
  17. if(*(a+i)=='0') //统计0的个数
  18. {
  19. couna++;
  20. }
  21. else if(*(a+i) == s) //统计最大数的个数
  22. {
  23. counb++;
  24. }
  25. }
  26. }
  27. printf("该整数有 %d 个 0\n",couna);
  28. printf("该整数最大数为%c\n",s);
  29. printf("该整数有 %d 个 %c\n",counb,s);
  30. return 0;
  31. }
  32. int fun_max(int n,char a[])
  33. {
  34. int i;
  35. int temp = *a;
  36. int count = 0;
  37. for(i=0;i<n-1;i++)
  38. {
  39. if(temp < *(a+i+1))
  40. {
  41. temp = *(a+i+1);
  42. count = i+1;
  43. }
  44. }
  45. return count;
  46. }

------------------------------------------------------------------------------------------------------------------------------
28. 计算一个英文句子中最长的单词的长度。假设英文句子只有字母和空格,连续的字母为单词,句子以‘.‘结束。(利用一级指针)

  1. #include <stdio.h>
  2. #include <string.h>
  3. int fun_max(int n,int a[]);
  4. int main()
  5. {
  6. char arr[128];
  7. int sum[64];
  8. int i, a = 0, b = 0;
  9. printf("输入一个英文句子,单词以空格分离,结束用‘.’标注\n");
  10. gets(arr);
  11. for(i=0;i<=strlen(arr);i++)
  12. {
  13. if(*(arr+i) != ' ' && *(arr+i) != '.')
  14. {
  15. a++; //当前连续字母个数
  16. }else{ //如果遇到空格或者'.'的时候,证明一个单词结束,a代表单词的个数
  17. *(sum+b) = a; //将 a 的值存入数组sum中,a的数值为空格前面单词的字符数
  18. a=0; //将 a 清零,重新记录下一个
  19. b++; //记录有多少个单词
  20. }
  21. }
  22. printf("最长的单词长度为 %d 个字节\n",*(sum+fun_max(b,sum))); //fun_max(b,sum)为新数组最大数的索引
  23. return 0;
  24. }
  25. int fun_max(int n,int a[])
  26. {
  27. int i;
  28. int temp = *a;
  29. int count = 0;
  30. for(i=0;i<n-1;i++)
  31. {
  32. if(temp < *(a+i+1))
  33. {
  34. temp = *(a+i+1);
  35. count = i+1;
  36. }
  37. }
  38. return count;
  39. }
------------------------------------------------------------------------------------------------------------------------------

29. 输入一个字符串,然后按下面要求输出一个新的字符串。新串是在原串中的每两个字符之间分别插入 1、3、5,......个字符'#'形成的。例如,原串为"abcd"、那么新串为"a#b###c#####d"。如果原串中只有一个字符,则新串与原串相同。

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. int new_mamory_count(int count); //新开辟空间总个数,count:原内存字符个数
  5. void insert(int count,char *ptr,char a[]);//将输入的字符插入新开辟的空间中
  6. int main()
  7. {
  8. char a[64],ch;
  9. char *pstr=(char *)malloc(sizeof(char));
  10. int i,len = 1,count=0;
  11. int sum = 0;
  12. memset(pstr,0,len);
  13. while(1)
  14. {
  15. scanf("%c",&ch);
  16. if(ch != '\n')
  17. {
  18. pstr=(char *)realloc(pstr,len);//将原pstr所指堆中的内容拷贝到新开辟的内存中,新地址重新赋给pstr,空间大小+1,
  19. 用于判断下一个。
  20. len ++; //空间+1,用于下一个
  21. *(pstr+count) = ch; //将值赋给开辟的空间
  22. *(a+count) = ch; //保存输入字符
  23. count ++; //索引+1,存放数据,也是元素个数
  24. }
  25. else //如果遇到回车,退出
  26. {
  27. break;
  28. }
  29. }
  30. sum = new_mamory_count(count);
  31. pstr = realloc(pstr,sum+1); //sum+count+1开辟新空间大小,+1多开辟一个用于存'\0'
  32. *(pstr+sum+1) = '\0'; //最后一个空间存'\0'
  33. memset(pstr,'#',sum); //剩余空间填 #
  34. insert(count,pstr,a); //将输入的字符串插入
  35. printf("%s\n",pstr);
  36. free(pstr);
  37. return 0;
  38. }
  39. int new_mamory_count(int count) //新开辟空间总个数,count:原内存字符个数
  40. {
  41. int sum;
  42. int i;
  43. for(i=0;i<count-1;i++) //count:输入元素个数
  44. {
  45. sum = sum + 2*i +1; //统计字母中要插入 # 的个数
  46. }
  47. sum = sum + count;
  48. return sum;
  49. }
  50. void insert(int count,char *ptr,char a[])
  51. {
  52. int sum;
  53. int i;
  54. for(i=0;i<count;i++) //在对应的位置插入字符数组中a[]中的各元素。
  55. {
  56. sum = sum + 2*i + 1;
  57. *(ptr+sum-i-1) = *(a+i);
  58. }
  59. }

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

30. 在执行文件名后输入十个字符串,通过函数找出最长的那个串

  1. #include <stdio.h>
  2. #include <string.h>
  3. int fun_max(int n,int a[]); //查找最大值下标
  4. int main (int argc,char *argv[]) //argc:统计 ./ 后面输入字串串的个数。*argc[]:数组指针,存储各个数组的收地址
  5. {
  6. char temp;
  7. int i,j;
  8. int arr[32];
  9. for(i=1;i<argc;i++)
  10. {
  11. arr[i-1] = strlen(*(argv+i)); //统计每个字符串的长度,并一次存入数组arr中
  12. }
  13. fun_max(argc-1,arr);
  14. printf("%s\n",argv[fun_max(argc,arr)+1]);
  15. return 0;
  16. }
  17. /*
  18. *功能:查找一个含有N个数组中最小元素的位置
  19. * @retuan:count:索引
  20. * */
  21. int fun_max(int n,int a[])
  22. {
  23. int i;
  24. int temp = *a;
  25. int count = 0;
  26. for(i=0;i<n-1;i++)
  27. {
  28. if(temp < *(a+i+1))
  29. {
  30. temp = *(a+i+1);
  31. count = i+1;
  32. }
  33. }
  34. return count;
  35. }

------------------------------------------------------------------------------------------------------------------------------
31. 将字符串中的数字串取出存入各个数组中,例如:如 adfad1234adfj4561,则分别取出 1234、4561 放
到数组中,并转置,既放进去是 4321,1654;
/*功能:在字符串str中查找数字字符串
  参数:
  str:查找的字符串
  pNumStrLen:在查找的字符串中第一个数字字符串的长度
  返回值:查找成功返回第一个数字串的首地址 查找失败返回null
*/
char *findNumStr(char *pstr, int *pNumStrLen);

设计思路:
1 计算源串有多少个数字串
2 char *findNumStr(char *pstr, int *pNumStrLen);
获取每个数字串的长度并保存
3 为每个数字串开辟足够空间并将每个首地址保存
4 将每个数字串的内容复制到每个新开辟的内存空间中

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. char *findNumStr(char *pstr,int *pNumStrlen){
  5. int i;
  6. int nu_ch = 0,count_nu = 0;
  7. char *p = NULL;
  8. for(i=0;i<strlen(pstr);i++){
  9. if( pstr[i] >= '0' && pstr[i] <= '9'){
  10. nu_ch++;
  11. }
  12. }
  13. if(nu_ch != 0){
  14. for(i=0;i<strlen(pstr);i++){
  15. if( pstr[i] >= '0' && pstr[i] <= '9'){
  16. p = pstr+i - count_nu;
  17. count_nu++;
  18. }else if(count_nu != 0){
  19. *pNumStrlen = count_nu;
  20. return p;
  21. }
  22. }
  23. }
  24. else
  25. {
  26. return NULL;
  27. }
  28. }
  29. int main()
  30. {
  31. char pstr[64];
  32. char *p=NULL;
  33. int pNumStrlen = 0;
  34. printf("输入字符串\n");
  35. scanf("%s",pstr); //打印收地址
  36. printf("字符串首地址 = %p\n",pstr);
  37. p = findNumStr(pstr,&pNumStrlen);
  38. printf("第一个数字串首地址 = %p\n",p);
  39. printf("第一个数字串的长度 = %d\n",pNumStrlen);
  40. return 0;
  41. }
------------------------------------------------------------------------------------------------------------------------------
32.搜索竞价排名系统,在大量的信息寻找一个特定的信息,排序是按照某个关键字的大小递增或递减。

  1. #include <stdio.h>
  2. #include <string.h>
  3. #define ARRAY_NUM(a, len) (sizeof(a)/(len))
  4. void keySort(char (*p)[21], int arrayNum);
  5. int findKey(char *keyStr, char (*p)[21], int arrayNum);
  6. int main()
  7. {
  8. char array[][21]={"牛仔装","牛仔裤","牛仔服","耳环","帽厂","中国印染","电熨斗","旗袍","棉纺织品","毛皮","衬衣","男女皮鞋",
  9. "鸭绒枕","被褥","芭蕾舞衣","长统袜","毛纺织业","真丝服装","罗口手套","手套","裤袜","印染棉布","中国丝绸","胸罩","鞋城",
  10. "裤子","羊绒纱","加密锁","羊毛衫","针织产品","纺织印染","雨披","领结","毛皮服装","潜水服","羊毛","混纺布","女式服装",
  11. "羊驼绒","棉毛衫裤","围巾","西服","羊毛衫","拖鞋","袜业","运动服","制服","女士大衣","内衣","内裤","皮手套","袜子","鞋袜",
  12. "帽子","尖头鞋","飞行帽","鞋垫","挎包","童装","羊毛","马海毛","开司米","羊毛线","纯羊毛","皮靴","胸针", "冰茶","清茶",
  13. "冰糖","雪糕","茶叶","饭馆","酱","香菇","猴头","芦笋","小麦","杏茶","河蟹","海藻","燕窝","面包","燕麦片","海带","米醋",
  14. "扎啤","洋酒","话梅","粽子","柑橘","卤味","花粉","杏仁露","花生酱","香兰素","海藻酸","酒具","乳制品","茉莉花茶","干贝",
  15. "酱菜","豆汁","脆枣","虾皮","坚果仁","菠菜","硅藻","冰激淋","黄豆","木耳","小米","辣椒酱","柠檬酸","矿泉水","红酒",
  16. "米粉","牛肉干","枣","小笼包","辣酱油","鲜奶油","海蛰","菜花","冬笋","枣脯","果胶糖","虾米","枣泥","方糖","榴莲","香椿",
  17. "卤肉","桔子","压缩饼干","豆腐","墨鱼","墨鱼仔","乌鱼蛋","炸酱面","奶油蛋糕","黄油酱","豆饼","鲜荔枝","瓶装啤酒",
  18. "水煮鱼","香辣蟹","福寿螺","巧克力","鲜奶","苹果","果汁","冰红茶"};
  19. //根据字符的长度排序
  20. int arrayNum=ARRAY_NUM(array, 21);
  21. int i;
  22. keySort(array, arrayNum);
  23. for(i=0; i<arrayNum; i++)
  24. {
  25. printf("%s\n", array[i]);
  26. }
  27. char keyStr[1024];
  28. int resultIndex=0;
  29. memset(keyStr, 0, sizeof(keyStr));
  30. printf("输入关键字:");
  31. scanf("%s", keyStr);
  32. resultIndex=findKey(keyStr, array, arrayNum);
  33. if(resultIndex != -1)
  34. {
  35. printf("%s is found!\n", array[resultIndex]);
  36. }
  37. else
  38. {
  39. printf("%s isnot found!\n", keyStr);
  40. }
  41. return 0;
  42. }
  43. int findKey(char *keyStr, char (*p)[21], int arrayNum)
  44. {
  45. int i;
  46. for(i=0;i<arrayNum;i++)
  47. {
  48. if(strcmp(keyStr,*(p+i)) == 0)
  49. {
  50. return i;
  51. }
  52. }
  53. return -1;
  54. }
  55. void keySort(char (*p)[21], int arrayNum)
  56. {
  57. int i, j;
  58. int len1, len2;
  59. char buf[50];
  60. for(i=0;i<arrayNum-1;i++)
  61. {
  62. for(j=0;j<arrayNum-1-i;j++)
  63. {
  64. if(strlen( *(p+j) ) > strlen( *(p+j+1) ) )
  65. {
  66. strcpy( buf , (*(p+j)) );
  67. strcpy( (*(p+j)) , (*(p+j+1)) );
  68. strcpy( (*(p+j+1)) , buf ) ;
  69. }
  70. }
  71. }
  72. return;
  73. }

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

33. 结构体中存n(从键盘接受)人的姓名和年龄,输出年龄最大者的姓名和年龄。
Struc student{
char name[20];
int age;
}

  1. //pub.h
  2. #ifndef PUB_H
  3. #define PUB_H
  4. #include <iostream>
  5. using namespace std;
  6. #endif

  1. #include "pub.h"
  2. int fun_max(int n,struct student_t *p);//查找数组中的最大值,返回值为其索引
  3. struct student_t{
  4. char name[68];
  5. int age;
  6. };
  7. int main()
  8. {
  9. int i,index;
  10. int stuNum;
  11. int arr[64];
  12. struct student_t person[30];
  13. cout<<"输入学生人数"<<endl;
  14. cin>>stuNum;
  15. for(i=0;i<stuNum;i++)
  16. {
  17. cout<<"输入姓名,年龄"<<endl;
  18. cin>>(person+i)->name;
  19. cin>>(person+i)->age;
  20. // arr[i] = (person+i)->age; //将年龄存入数组arr中
  21. }
  22. index = fun_max(stuNum,person); //s为最大值索引
  23. // printf("name:%s age:%d\n",person[index].name,person[index].age);
  24. cout<<"姓名:"<<person[index].name<<endl;
  25. cout<<"年龄: "<<person[index].age<<endl;
  26. return 0;
  27. }
  28. int fun_max(int n,struct student_t *p)
  29. {
  30. int i;
  31. int temp = p[0].age;
  32. int count = 0;
  33. for(i=1;i<n;i++)
  34. {
  35. if(temp < p[i].age)
  36. {
  37. temp = p[i].age;
  38. count = i;
  39. }
  40. }
  41. return count;
  42. }

------------------------------------------------------------------------------------------------------------------------------
34. 统计学生成绩,功能包括输入学生姓名和成绩,按成绩从高到低排序输出,对前 70%的学生为合格,而后 30%的学生不合格。
Strucr Student{
char *name;
int scoer;
}

  1. //lib.h
  2. #ifndef _WORK34_H
  3. #define _WORK34_H
  4. typedef struct student_t{
  5. int score;
  6. char name[32];
  7. }STU;
  8. void input_student(int *p,STU *ptr);
  9. void order(int *p,STU *ptr,STU *ppr);
  10. void output_student(int *p,STU *ptr);
  11. #endif
  1. //lib.c
  2. #include <stdio.h>
  3. #include "lib.h"
  4. void input_student(int *p,STU *ptr)
  5. {
  6. int i;
  7. for(i=0;i<*p;i++)
  8. {
  9. printf("请输入第%d个学生姓名\n",i+1);
  10. scanf("%s",(ptr+i)->name);
  11. printf("请输入第%d个学生成绩\n",i+1);
  12. scanf("%d",&(ptr+i)->score);
  13. }
  14. }
  15. void order(int *p,STU *ptr,STU *ppr)
  16. {
  17. int i,j;
  18. for(i=0;i<*p-1;i++)
  19. {
  20. for(j=0;j<*p-1-i;j++)
  21. {
  22. if((ptr+j)->score < (ptr+j+1)->score ) //如果第一个结构体中学生成绩小于第二个
  23. {
  24. *ppr = *(ptr+j); //直接交换两个结构体
  25. *(ptr+j) = *(ptr+j+1);
  26. *(ptr+j+1) = *ppr;
  27. }
  28. }
  29. }
  30. }
  31. void output_student(int *p,STU *ptr)
  32. {
  33. int i;
  34. for(i=0;i<*p;i++)
  35. {
  36. if(i == 0){
  37. printf("合格学生为\n");
  38. }
  39. printf("姓名:%-15s成绩:%d\n",(ptr+i)->name,(ptr+i)->score);
  40. if(i == (int)((*p)*0.7)){ //前70%为合格,后%30为不合格
  41. printf("不合格学生为\n");
  42. }
  43. }
  44. }
  1. //main.c
  2. #include <stdio.h>
  3. #include "lib.h"
  4. int main()
  5. {
  6. STU ptr[128]; //存放学生姓名和成绩
  7. STU ppr[128]; //结构体类型数组,用来存储临时交换的值
  8. int sum;
  9. printf("请输入学生总数:");
  10. scanf("%d",&sum); //输入学生人数
  11. input_student(&sum,ptr); //输入每个学生的姓名和成绩
  12. order(&sum,ptr,ppr); //对ptr数组中的学生排序
  13. output_student(&sum,ptr); //输入成绩
  14. return 0;
  15. }

------------------------------------------------------------------------------------------------------------------------------
35. 输入 x 个学校,每个学校 y 个班级,每个班级 z个学生,打印每个学校所有成绩的和。
Struct School{
struct class *sch_class;
}
struct class{
struct Student *class_student;
}
struct Student{
int stu_id;
int stu_score;
}

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define X 2
  4. #define Y 3
  5. #define Z 2
  6. typedef struct Student_t{
  7. int stu_id;
  8. int stu_score;
  9. }STU;
  10. typedef struct Class_t{
  11. struct Student_t *stu_ptr;
  12. }CLA;
  13. typedef struct School_t{
  14. struct Class_t *cla_ptr;
  15. }SCH;
  16. int main()
  17. {
  18. int i,j,k;
  19. int sum = 0,su = 0,s = 0;
  20. SCH *sch_ptr = (SCH *)malloc( X *sizeof(SCH));
  21. for(i=0;i<X;i++)
  22. {
  23. (sch_ptr+i)->cla_ptr = (CLA *)malloc( Y * sizeof(CLA));
  24. for(j=0;j<Y;j++)
  25. {
  26. ((sch_ptr+i)->cla_ptr+j)->stu_ptr = (STU *)malloc( Z * sizeof(STU));
  27. for(k=0;k<Z;k++)
  28. {
  29. printf("输入第%d个学校,第%d个班级,第%d个学生的 ID 和 成绩:\n",i+1,j+1,k+1);
  30. scanf("%d %d",&(((sch_ptr+i)->cla_ptr+j)->stu_ptr+k)->stu_id,&(((sch_ptr+i)->cla_ptr+j)->stu_ptr+k)->stu_score);
  31. sum = sum + (((sch_ptr+i)->cla_ptr+j)->stu_ptr+k)->stu_score;
  32. }
  33. su = su + sum ;
  34. sum = 0;
  35. }
  36. s = s + su;
  37. printf("第%d个学校学生的总成绩为:%d\n",i+1,su);
  38. s = 0;
  39. }
  40. printf("\n");
  41. return 0;
  42. }

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

36. 定义结构体包括数据域和指向本身结构体的指针,并定义三个这样结构体变量,
(1)将三个变量连接 x 的指针域指向 y,y 的指针域指向 z,z 的指针域指向 NULL,并在主函数中打印其数据域的值。
p=link(x, y, z);
根据p打印x、y、z的数据
(2)将 y 删除,遍历打印链的值
void delete(y.data, p);
根据p打印数据域内容
(3)将 y 添加到链上,遍历打印链的值。
insertHead(p, y);
根据p打印数据域->y.data x.data z.data

  1. #include <stdio.h>
  2. typedef struct Pointer_t{
  3. int data;
  4. struct Pointer_t *ptr;
  5. }POT;
  6. POT *link(POT *x,POT *y,POT *z)
  7. {
  8. POT *p = x;
  9. x->ptr = y;
  10. y->ptr = z;
  11. z->ptr = NULL;
  12. return p;
  13. }
  14. void delete(POT *p,POT *y)
  15. {
  16. p->ptr = y->ptr;
  17. }
  18. POT *insertHead(POT *p,POT *y)
  19. {
  20. POT *pnew = y;
  21. y->ptr = p;
  22. return pnew;
  23. }
  24. int main()
  25. {
  26. POT *p = NULL;
  27. POT x;
  28. POT y;
  29. POT z;
  30. printf("输入 X Y Z :\n");
  31. scanf("%d %d %d",&x.data,&y.data,&z.data);
  32. p = link(&x,&y,&z); //根据p打印x,y,z的数值
  33. printf("P=%d P1=%d P2=%d\n",p->data,p->ptr->data,p->ptr->ptr->data);
  34. delete(p,&y); //将y链删除
  35. printf("P=%d P1=%d\n",p->data,p->ptr->data);
  36. p = insertHead(p,&y); //将y添加到链上
  37. printf("P=%dX P1=%d P2=%d\n",p->data,p->ptr->data,p->ptr->ptr->data);
  38. return 0;
  39. }
------------------------------------------------------------------------------------------------------------------------------
37. 实现计算器功能输入+、-、*、/输出计算的结果
struct opt{
int (*p_add)(int, int);
int (*p_sub)(int, int);
int (*p_div)(int, int);
int (*p_mul)(int, int);
}

  1. //lib.h
  2. #ifndef _WORK37_H
  3. #define _WORK37_H
  4. struct arithmetic_t{
  5. int (*p_add)(int,int);
  6. int (*p_sub)(int,int);
  7. int (*p_div)(int,int);
  8. int (*p_mul)(int,int);
  9. };
  10. int add(int x,int y);
  11. int sub(int x,int y);
  12. int div(int x,int y);
  13. int mul(int x,int y);
  14. #endif
  1. //lib.c
  2. #include <stdio.h>
  3. #include "lib.h"
  4. int add(int x,int y) //加
  5. {
  6. int sum;
  7. sum = x + y;
  8. return sum;
  9. }
  10. int sub(int x,int y) //减
  11. {
  12. int sum;
  13. sum = x - y;
  14. }
  15. int div(int x,int y) //乘
  16. {
  17. int sum;
  18. if(y == 0)
  19. {
  20. printf("data2 不能为 0\n");
  21. }else{
  22. sum = x / y;
  23. }
  24. return sum;
  25. }
  26. int mul(int x,int y) //除
  27. {
  28. int sum;
  29. sum = x * y;
  30. return sum;
  31. }

  1. //main.c
  2. #include <stdio.h>
  3. #include "lib.h"
  4. int main()
  5. {
  6. struct arithmetic_t op;
  7. int data1,data2,ret;
  8. char ch;
  9. printf("输入 运算符 data1 data2\n");
  10. scanf("%c %d %d",&ch,&data1,&data2);
  11. switch(ch)
  12. {
  13. case '+':op.p_add = add;ret = op.p_add(data1,data2);break;
  14. case '-':op.p_sub = sub;ret = op.p_sub(data1,data2);break;
  15. case '/':op.p_div = div;ret = op.p_div(data1,data2);break;
  16. case '*':op.p_mul = mul;ret = op.p_mul(data1,data2);break;
  17. }
  18. printf("sum = %d\n",ret);
  19. return 0;
  20. }

------------------------------------------------------------------------------------------------------------------------------
38. 根据以下要求编写函数。
1)、输入参数是 unsigned char 类型
2)、参数的格式是:
bit      数值    含义
0~1     2      输出字符串“你是”
其他            输出字符串“我是”
2~4     5      输出字符串“集团”
其他            输出字符串“股份”
5~7     4      输出字符串“员工”
其他             输出字符串“职员”

  1. #include <stdio.h>
  2. struct pack_t{
  3. unsigned a:2;
  4. unsigned b:3;
  5. unsigned c:3;
  6. };
  7. union pack_k{
  8. char ch;
  9. struct pack_t byte;
  10. };
  11. int main()
  12. {
  13. union pack_k ch;
  14. printf("输入一个字符:\n");
  15. scanf("%c",&ch.ch);
  16. if(ch.byte.a == 2){
  17. printf("你是");
  18. }else{
  19. printf("我是");
  20. }
  21. if(ch.byte.b == 3){
  22. printf("集团");
  23. }else{
  24. printf("股份");
  25. }
  26. if(ch.byte.c == 3){
  27. printf("员工!\n");
  28. }else{
  29. printf("职员!\n");
  30. }
  31. return 0;
  32. }
------------------------------------------------------------------------------------------------------------------------------
39. 编写程序,从键盘输入 3 个学生的数据,将它们存入文件 student;然后再从文件中读出数据,显示在屏幕上。
Struct Student{
int stu_id;
char *stu_name;
int stu_age;
char addr[200];
}

  1. #include <stdio.h>
  2. #define N 3
  3. struct Student_t{
  4. int stu_id;
  5. char stu_name[200];
  6. int stu_age;
  7. char addr[200];
  8. };
  9. void write(struct Student_t *data,int n);
  10. void read(struct Student_t *date,int n);
  11. int main()
  12. {
  13. FILE *fp=NULL,*fpr=NULL; //定义两个文件流
  14. // size_t num;
  15. struct Student_t data[3]={0}; //fwrite写文件的缓冲区
  16. struct Student_t date[3]={0}; //fread 读文件的缓冲区
  17. /***************************写入***********************************/
  18. fp = fopen("student","w");
  19. if(fp == NULL){
  20. printf("file open failt!\n");
  21. return 1;
  22. }
  23. write(data,3);
  24. fwrite(data,sizeof(struct Student_t),3,fp); //缓冲区、结构体长度
  25. fclose(fp); //每次读入字节数
  26. printf("file write success!\n"); //文件流入口
  27. /***************************读出***********************************/
  28. fpr = fopen("student","r");
  29. if(fpr == NULL){
  30. printf("file open failt!\n");
  31. return 1;
  32. }
  33. fread(date+1,sizeof(struct Student_t),1,fpr);
  34. read(date,3);
  35. fclose(fpr);
  36. printf("file read success!\n");
  37. /******************************************************************/
  38. return 0;
  39. }
  40. void write(struct Student_t *data,int n) //输入学生信息
  41. {
  42. int i;
  43. for(i=0;i<3;i++){
  44. printf("请输入第%d个学生的:ID 姓名 年龄 地址\n",i+1);
  45. scanf("%d %s %d %s",&(data+i)->stu_id,(data+i)->stu_name,&(data+i)->stu_age,(data+i)->addr);
  46. }
  47. }
  48. void read(struct Student_t *date,int n) //显示学生信息
  49. {
  50. int i;
  51. for(i=0;i<3;i++)
  52. {
  53. printf("ID:%-7d 姓名:%-7s 年龄:%-7d 地址:%-7s\n",(date+i)->stu_id,(date+i)->stu_name,(date+i)->stu_age,(date+i)->addr);
  54. }
  55. }

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

这里的39个程序都是按照C语言的顺序,一点点提高难度,希望对你有帮助。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/905035
推荐阅读
相关标签
  

闽ICP备14008679号