C语言不挂科之我爱谭浩强——编程题拿高分(附例题答案和知识点详解)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C语言不挂科之我爱谭浩强——编程题拿高分(附例题答案和知识点详解),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2743字,纯文字阅读大概需要4分钟。
内容图文
期末考试要考C语言,边复习边写博客,总结了一些自己不太明白或者可能出错的知识点。现自己已经弄明白,写的你们肯定也能明白,希望期末备考的同学们不挂科,也适合自学C语言的小白哦
这篇博客主要写指针,由易到难,会了指针,前面的例题也就都会了。
- 对三个数进行大小排序
# include <stdio.h>
int swap(int *p,int *q);
int main(){
int a=5, b=11, c=9;
int *p1=&a,*p2=&b,*p3=&c;
printf("%d %d %d\n",a,b,c);
printf("%d %d %d\n",p1,p2,p3);
if (a>b){
swap(p1,p2);
}
if(a>c){
swap(p1,p3);
}
if (b>c){
swap(p2,p3);
}
printf("%d %d %d\n",a,b,c);
printf("%d %d %d\n",p1,p2,p3);
}
int swap(int *p,int *q){
int o;
o = *p;
*p = *q;
*q = o;}
5 11 9
6487556 6487552 6487548
5 9 11
6487556 6487552 6487548
这个swap函数必须用指针写,如果这样,两个数在函数内是交换了,但没有返回主函数,所以必须用指针写,由结果可以看出,函数交换了指针上存放的数值,指针本身并没有变。
int swap(int p,int q){
int o;
o = p;
p = q;
q = o;
}
- 对10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换
# include <stdio.h>
int swap(int *p,int *q);
int main( ){
int a[10]={11,5,8,7,6,9,0,3,4,2} ,*min,*max,*p;
max=min=a;
p=a;
for (;p<a+10;p++){
if (*max<*p)
max=p;
}
swap(a+9,max);
for (p=a;p<a+10;p++){
if(*min>*p)
min=p;
}
swap(a,min);
for (p=a;p<a+10;p++)
printf("%d ",*p);
}
int swap(int *p,int *q){
int o;
o = *p;
*p = *q;
*q = o;
}
本题的主要思路就是先让max和min都等于第一个值的地址,让其与后面的每一个值的地址进行比较,(注意这里是指针的大小比较)如果min比后面的某个值x大,就把x的地址赋值给min,若还有个y比x还小,就把y的地址再赋值给min,直到找到最小的值。注意这时并没有进行数值交换,只是min这个指针指向了不同的数值,下面的swap函数才让其交换了地址所存放的数值。max是一样的。
有的同学可能会想到,用一个for循环,直接找出最大和最小的值不就行吗。不行!
因为这里有个bug如果a=>第一个数是最大的,b=>最后一个数为最小的,a||b 之能交换一个最值,a&b直接不交换。要是非得用也行, 看老谭怎么写的吧
- 有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
# include <stdio.h>
int main(){
int i, k, m, n, num[50], *p;
printf("input number of person: n=" );
scanf("%d", &n);
p=num;
for(i=0;i<n;i++) //给人数编号
*(p+i)=i+1;
i=0; //i为每次循环时计数变量
k=0; //k为按1 2 3报数的计数变量
m=0; //m 是出局的人数
while(m<n-1){ //m 是出局的人数,因有n个人,最后剩一个人,最多出局(n-1)个人
if( *(p+i) != 0) //判断这个序号(原来的序号)是否出局
k++; //如果这个号没有出局,就报数,计数器加1,要是出局了就不算这个号了
if(k==3){ //报3的出局
*(p+i)=0; //将出局的这个人标记为0
k=0; //使计数器置零,重新数1 2 3
m++; //出局人数计数器加1
}
i++; //将指针后移,虽然i不是指针,但p+i就是指针了,i为指针服务
if(i==n) //如果指针移到了尾部,则返回到头部
i=0; //因为编号是从1开始的,所以i=0,以确保下一个是开头
}
int a=0;
for(i=0;i<n;i++){ //因为报到3的就设置成0了,所以加起来就是最后那个序号
a+=num[i];
}
printf("最后一个是%d ",a);
}
内容总结
以上是互联网集市为您收集整理的C语言不挂科之我爱谭浩强——编程题拿高分(附例题答案和知识点详解)全部内容,希望文章能够帮你解决C语言不挂科之我爱谭浩强——编程题拿高分(附例题答案和知识点详解)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。