关于C语言习题二
1、5*5数组中找出一行中最大的数,同时也是一列中最大的数。
#include<stdio.h> #include<stdlib.h> #include<time.h> #define N 5 int main(){ srand((unsigned)time(NULL)); int i,j; int a[5][5]; int row; int col; int max; int found=0; do{ for(i=0;i<N;i++){ for(j=0;j<N;j++){ a[i][j]=rand()%100; } } for(i=0;i<N;i++){ for(j=0;j<N;j++){ printf("%4d",a[i][j]); } printf("\n"); } for(i=0;i<N;i++){ max=a[i][0]; row = i; col = 0; for(j = 0;j < N;j++){ if(max<a[i][j]){ max = a[i][j]; col = j; } } for(j=0;j<N;j++){ if(max>a[j][col]){ break; } } if(j == N){ found = 1; printf("num is %d, row = %d,col = %d\n",max,row,col); } }
}while(found == 0);//一直循环到找到saddle为止 if(found==0){ printf("not found saddle\n"); } return 0; }
2、字符串逆序
#include<stdio.h> int main(){ void verse(char *a); char a[20]; scanf("%[^\n]",a); verse(a); printf("%s\n",a); return 0; } void verse(char *a){ int i = 0; int j = 0; int t; while(a[i]!='\0'){ i++; } i--; while(j<i){ t = a[j]; a[j] = a[i]; a[i] = t; j++; i--; } }
3、整数转为任意进制的字符串输出。
#include<stdio.h> int main(){ void verse(char *a); char two(int n,char *a); char eight(int n,char *a); char ten(int n,char *a); char sixteen(int n,char *a); int n; char a[10]; char b[10]; char c[10]; char d[10]; printf("please input a number:"); scanf("%d",&n); two(n,a); eight(n,b); ten(n,c); sixteen(n,d); printf("%s\n",a); printf("%s\n",b); printf("%s\n",c); printf("%s\n",d); return 0; } void verse(char *a){ int i = 0; int j = 0; int t; while(a[i]!='\0'){ i++; } i--; while(j<i){ t = a[j]; a[j] = a[i]; a[i] = t; j++; i--; } } char two(int n,char *a){ int i = 0; while(n!=0){ a[i] = (n % 2) + '0'; i++; n = n / 2; } verse(a); } char eight(int n,char *a){ int i = 0; while(n != 0){ a[i] = (n % 8) + '0'; i++; n = n / 8; } verse(a); } char ten(int n,char *a){ int i = 0; while(n != 0){ a[i] = (n % 10) + '0'; i++; n = n / 10; } verse(a); } char sixteen(int n,char *a){ int i = 0; while(n != 0){ switch(n%16){ case 0: a[i] = 0+'0';break; case 1: a[i] = 1+'0';break; case 2: a[i] = 2+'0';break; case 3: a[i] = 3+'0';break; case 4: a[i] = 4+'0';break; case 5: a[i] = 5+'0';break; case 6: a[i] = 6+'0';break; case 7: a[i] = 7+'0';break; case 8: a[i] = 8+'0';break; case 9: a[i] = 9+'0';break; case 10: a[i] = 'A';break; case 11: a[i] = 'B';break; case 12: a[i] = 'C';break; case 13: a[i] = 'D';break; case 14: a[i] = 'E';break; case 15: a[i] = 'F';break; } i++; n = n / 16; } verse(a); }
4、计算主串中子串出现的次数
#include<stdio.h> #include<string.h> int main(){ char a[20]; char b[20]; int n; int find(char *a,char *b); printf("please input the string:"); scanf("%s",a); printf("please input the substring:"); scanf("%s",b); n = find(a,b); if(n == 0) printf("not found!\n"); else printf(" found %d time\n",n); return 0; } int find(char *a,char *b){ int count = 0; int i = 0; int j = 0; int k;//位标,如果b没有比结束,就不等于了,就调回a的下一下和b【0】重新比较. while(a[i]!='\0'){ if(a[i] == b[j]){ i++; j++; if(j == 1) k = i; if(j==strlen(b)){ count++; j = 0; } } else{ i++; if(j!=strlen(b)&&j!=0) i = k; j = 0; } } return count; } //kmp 算法可能会补
5、将i am from shanghai
#include<stdio.h> int main(){ int i = 0; int j = 0; int k = 0; int n; char a[] = "I am from shanghai"; char b [10][10]= {0}; while(a[i]!=0){ if(a[i]==' '&&a[i+1]!='\0'){ j++; k = 0; } else if ( a[i]!=' '){ b[j][k] = a[i]; k ++; } i++; } while(b[j][0]!='\0'){ printf("%s ",b[j]); j--; } printf("\n"); return 0; }
6、输入一个字符串,开头是head结尾是tail,判断是不是合法帧(寻找最前面的那个head最后面的那个tail)
#include<stdio.h> int main(){ char a[30]; int i = 0;
int first = 0; int local1 = 0,local2 = 0; printf("please input a string:"); scanf("%s",a); while(a[i]!='\0'){ if(a[i]=='h'&&first==0){ if(a[i+1]=='e'&&a[i+2]=='a'&&a[i+3]=='d'){ local1 = i; i = i+3;
first++; } } if(a[i]=='t'){ if(a[i+1]=='a'&&a[i+2]=='i'&&a[i+3]=='l'){ local2 = i; } } i++; } if((local2-local1)>4){ for(i = local1;i<=local2+3;i++){ printf("%c",a[i]); } printf("\n"); } else printf("not found!"); return 0; }
7、请编写一个c函数,该函数给出一个字节中被置为1的位的个数
#include<stdio.h> int main(){ int and(int n); int n; int count; scanf("%d",&n); count = and(n); printf("The num of one %d\n",count); return 0; } int and(int n){ int max = 1; int i; int count = 0; for(i = 1; i<=8;i++){ if(max&n) count++; max<<=1; } return count; }
8、输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的p1到p2位.
#include<stdio.h> int main(){ void part(int a,int p1,int p2); int a; int p1; int p2; printf("please input a integer:"); scanf("%d",&a); printf("please input two limits:"); scanf("%d%d",&p1,&p2); part(a,p1,p2); return 0; } void part(int a,int p1,int p2){ int i; int max = 1; a>>=(p1-1); for(i = p1; i <= p2;i++){ if(max&a) putchar('1'); else putchar('0'); max<<=1; } printf("\n"); }
9、输入一个整数a,再输入两个整数p1,p2(p1,p2<32),将该整数的二进制表示方法中从右端开始的p1到p2位取反后输出
#include<stdio.h> int main(){ void part(int a,int p1,int p2); int a; int p1; int p2; printf("please input a integer:"); scanf("%d",&a); printf("please input two limits:"); scanf("%d%d",&p1,&p2); part(a,p1,p2); return 0; } void part(int a,int p1,int p2){ int i; int max = 1; a>>=(p1-1); for(i = p1; i <= p2;i++){ if(max&a) putchar('0'); else putchar('1'); max<<=1; } printf("\n"); }
10、输入一个整数a,再输入两个整数p(p<32),v(0|1),将该整数a的p位设置为v,输出修改后的该整数的二进制表示.
#include<stdio.h> int main(){ void part(int a,int p,char v); int a; int p; int v; printf("please input a integer:"); scanf("%d",&a); printf("please input location:"); scanf("%d",&p); printf("please input 0||1:"); scanf("%d",&v); part(a,p,v+'0'); return 0; } void part(int a,int p,char v){ int i; int max = 1; max<<=31; for(i = 1; i <=32;i++){ if(33-p == i) putchar(v); else{ if(max&a) putchar('1'); else putchar('0'); } max>>=1; } printf("\n"); }
11、b的每一位数有a左右两位异或得到
#include<stdio.h> int main() { int a; int b=0; scanf("%d",&a); for(int i=0;i<32;i++) { b=b+((((a<<(30-i))>>31)^((a<<32-i)>>31))<<i); } printf("%d",b); return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)