【c语言】c语言常见编程题总结(三)

来源:互联网 发布:public class java 编辑:程序博客网 时间:2024/04/30 14:26
/*30.求一个数的二进制序列中1的个数。#include <stdio.h>int main(){int a;int count=0;scanf("%d",&a);while(a>0){if(a%2==1)count++;a=a/2;}printf("count=%d\n",count);return 0;}//#include <stdio.h>//int main()//{//int count = 0;//int num = 15;//int i = 32;//while(i)//{//if(num & 1 == 1)//{//count++;//}////num=num/2;//num = num >> 1;//i-=1;//}//printf("count= %d\n",count);//return 0;//}//x=x&(x-1)//#include <stdio.h>//int main()//{//int count = 0;//int num = 0;//scanf("%d",&num);////0000 1111////0000 1110////0000 1110---1////0000 1101////0000 1100---2////0000 1011////0000 1000---3////0000 0111////0000 0000---4//while(num)//{//count++;//num = num & (num-1);//}//printf("count = %d\n",count);//return 0;//}*//*29.对任意一个整型数组排序(选择排序)//n个记录的文件可经过n-1趟直接选择排序得到有序结果:// 初始状态:无序区为R[1..n],有序区为空。// 第一趟排序://   在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第一个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区//   和记录个数减少1个的新无序区。// 第i趟排序://   第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R[i..n]。该趟排序从当前无序区中选出关键字最小的记录R[k],将它与无序区的第一个//   记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。#include <stdio.h>#define N 10int main(){void sort(int a[]);int a[N];int i;printf("请输入一个数组:");for(i=0;i<N;i++){scanf("%d",&a[i]);}sort(a);printf("排序后数组:");for(i=0;i<N;i++){printf("%d ",a[i]);}printf("\n");return 0;}void sort(int a[]){int i,j,t,min;for(i=0;i<N-1;i++){min=i;for(j=i+1;j<N;j++){if(a[min]>a[j]){min=j;}}t=a[i];a[i]=a[min];a[min]=t;}}*//*28.不允许创建临时变量求一个字符串的长度(递归)#include <stdio.h>int main(){int my_strlen(char *string);char str[20];scanf("%s",&str);int ret=my_strlen(str);printf("%d\n",ret);return 0;}int my_strlen(char *string){if(*string=='\0')return 0;elsereturn (my_strlen(string+1)+1);//string+1就是string++}*//*27.编写一个函数可以求字符串的长度#include <stdio.h>int main(){int my_strlen(char *string);char str[20];scanf("%s",&str);int ret=my_strlen(str);printf("%d\n",ret);return 0;}int my_strlen(char *string){int length=0;while(*string++!='\0'){length++;}return length;}*//*26.用非递归的方式求斐波那契数列的第n个数(迭代)//  迭代://  每一次迭代的结果会作为下一次迭代的初始值;#include <stdio.h>int main(){int fun(int n);int n;printf("请输入n的值:");scanf("%d",&n);printf("第%d个数是:%d\n",n,fun(n));return 0;}int fun(int n){int ret;int pre;int tmp;ret=pre=1;while(n>2){n--;tmp=pre;pre=ret;ret=pre+tmp;}return ret;}*//*25.用递归的方式求斐波那契数列的第n个数#include <stdio.h>int main(){int fun(int n);int n;printf("请输入n的值:");scanf("%d",&n);printf("第%d个数是:%d\n",n,fun(n));return 0;}int fun(int n){if(n==1||n==2)return 1;if(n>2)return (fun(n-1)+fun(n-2));}*//*24.将多个字符串排序输出#include <stdio.h>#include <string.h>int main(){int i,j;char s[10][20],*p[10],*q;for(i=0;i<5;i++){scanf("%s",&s[i]);p[i]=s[i];}for(i=0;i<4;i++){for(j=0;j<4-i;j++){if(strcmp(p[j],p[j+1])>0){q=p[j];p[j]=p[j+1];p[j+1]=q;}}}for(i=0;i<5;i++){printf("%s\n",p[i]);}return 0;}*//*23.对任意一个整型数组排序(冒泡排序)//冒泡排序://  比较相邻的元素,如果第一个比第二个大,就交换他们两个;if(a[i]>a[i+1])//  对每一对元素作同样的工作,从开始第一对到结尾的最后一对。for(i=0;i<N-j;i++)//  持续每次对越来越少的元素重复上面的步骤。直到没有任何一对数字需要比较。for(j=1;j<N;j++)#include <stdio.h>#define N 10int main(){void sort(int a[]);int a[N];int i;printf("请输入一个数组:");for(i=0;i<N;i++){scanf("%d",&a[i]);}sort(a);printf("排序后数组:");for(i=0;i<N;i++){printf("%d ",a[i]);}printf("\n");return 0;}void sort(int a[]){int i,j,t;for(j=1;j<N;j++){for(i=0;i<N-j;i++){if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}}}}*//*22.将一个整型数组逆序#include <stdio.h>#define N 10int main(){int a[N];int i;int tmp;printf("请输入一个数组:");for(i=0;i<N;i++){scanf("%d",&a[i]);}for(i=0;i<N/2;i++){tmp=a[i];a[i]=a[N-i-1];a[N-i-1]=tmp;}for(i=0;i<N;i++){printf("%d ",a[i]);}printf("\n");return 0;}*//*21.求一个3*3矩阵对角线元素之和#include <stdio.h>int main(){int a[3][3];int sum1=0;int sum2=0;int i,j;printf("请输入一个3*3矩阵:\n");for(i=0;i<3;i++){for(j=0;j<3;j++){scanf("%d",&a[i][j]);}}for(i=0;i<3;i++){sum1=sum1+a[i][i];}for(i=0;i<3;i++){for(j=0;j<3;j++){if((i+j)==2){sum2=sum2+a[i][j];}}}printf("sum1=%d,sum2=%d\n",sum1,sum2);return 0;}*/


 

0 0