第六章 利用数组处理批量数据

1.用筛选法求100之内的素数。

int main()
{int a[100],i,j;for(i=0;i<100;i++)a[i]=i+1;a[0]=0;//因为1不是素数,a[0]用0表示;for(i=0;i<99;i++){for(j=i+1;j<100;j++){if(a[i]!=0&&a[j]!=0){if(a[j]%a[i]==0)//筛选过程a[j]=0;}}}printf("筛选法求100以内的素数:\n");for(i=0;i<100;i++){if(a[i]!=0)printf("%3d",a[i]);}printf("\n");return 0;
}

2.选择法对10个整数进行排序

#include <stdio.h>
#include <stdlib.h>
int main()
{
int array[] = {2,8,3,9,5,7,1,4,0,6};
int size=sizeof(array)/sizeof(array[0]);for (int i = 0; i < size; ++i)printf("%d ", array[i]);printf("\n");for(int i=0;i<size-1;++i)
{int maxPos=0;for(int j=1;j<size-i;++j){if(array[j]>array[maxPos])maxPos=j;}if(maxPos!=size-i-1){int temp=array[maxPos];array[maxPos]=array[size-i-1];array[size-i-1]=temp;}
}for (int i = 0; i < size; ++i)printf("%d ", array[i]);printf("\n");return 0;
}

3.求一个3x3的整型矩阵的对角线元素之和

#include <stdio.h>
#include <stdlib.h>int main()
{int a[3][3],i,j;int sumLT2RB=0;int sumRT2RB=0;printf("请输入3x3数组:\n");for(i=0;i<3;i++){for(j=0;j<3;j++)scanf("%d",&a[i][j]);}for(i=0;i<3;i++)sumLT2RB +=a[i][i];for(j=0;j<3;j++)sumRT2RB +=a[j][j];printf("左上角到右下角的元素和为%d,右上角到左下角的元素和为%d",sumLT2RB,sumRT2RB);return 0;
}

4.有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入到数组中。

int main()
{
int array[10]={1,2,3,4,5,6,7,8,9};int num=0,i,j;printf("输入一个整数:\n");scanf("%d",&num);printf("原数组为:\n");for(i=0;i<9;++i)printf("%d",array[i]);printf("\n");int end=8;while(end>=0&& num<array[end]){array[end+1]=num;end--;}array[end+1]=num;printf("插入元素%d之后的结果为\n",num);for(i=0;i<10;++i)printf("%d",array[i]);printf("\n");return 0;
}

5.将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1要求改为 1,4,5,6,8

#include <stdio.h>
#include <stdlib.h>int main()
{int a[5],t,i,j;printf("输入5个数值:\n");for(int i=0;i<5;i++)scanf("%d",&a[i]);for( j=0;j<5;j++)for( i=0;i<5-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("变换后的排序:\n");for(int i=0;i<5;i++)printf("%d",a[i]);return 0;
}

6.输入杨辉三角前十行

#include <stdio.h>
#include <stdlib.h>int main()
{int array[10][10];for(int i=0;i<10;i++){for(int j=0;j<=i;j++){if(i==j||0==j)array[i][j]=1;elsearray[i][j]=array[i-1][j]+array[i-1][j-1];}}for(int i=0;i<10;i++){for(int j=0;j<=i;j++){printf("%5d",array[i][j]);}printf("\n");}return 0;
}

7.输出魔方阵,使得每行每列和对角线之和相等

#include <stdio.h>
#include <stdlib.h>int main()
{int a[15][15],n,i,j,k;while(1){printf("请输入n(1~15):");scanf("%d",&n);if(n!=0 && n<=15 && n%2!=0)break;else{printf("请输入奇数\n");}}for(i=1;i<=n;i++){for(j=1;j<=n;j++)a[i][j]=0;}j=n/2+1;a[1][j]=1;i=1;for(k=2;k<n*n;k++){i-=1;j+=1;if(i<1&&j>n){j+=2;j-=1;}else if(i<1){i=n;}else if(j>n){j=1;}if(a[i][j]==0){a[i][j]=k;}else{i+=2;j-=1;a[i][j]=k;}}for(i=1;i<=n;i++){for(j=1;j<=n;j++)printf("%5d",a[i][j]);printf("\n");}return 0;
}

解析:

| 17 | 24 |  1 |  8 | 15 |
--------------------------
| 23 |  5 |  7 | 14 | 16 |
--------------------------
|  4 |  6 | 13 | 20 | 22 |
--------------------------
| 10 | 12 | 19 | 21 |  3 |
--------------------------
| 11 | 18 | 25 |  2 |  9 |

仔细观察上述矩阵,可以看到以下规律:


8.找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点

#include <stdio.h>
#include <stdlib.h>
#define M 3
#define N 4
int main()
{int max,min,rowindex,colindex,flag=0;int array[M][N];printf("请输入%d行%d列的矩阵:\n",M,N);for(int i=0;i<M;i++){for(int j=0;j<N;j++)scanf("%d",&array[i][j]);}//先输入for(int i=0;i<M;++i){max =array[i][0];//让第i行的第一个元素成为最大元素for(int j=0;j<N;++j){if(array[i][j]>max){max=array[i][j];colindex=j;}}//找i行最大的元素,记录该元素在序列号colindexmin=array[0][colindex];for(int j=0;j<M;++j){if(array[j][colindex]<min){min=array[j][colindex];rowindex=j;}}//求列中最小的元素if(max==min && i==rowindex){flag =1;printf("鞍点为:%d行%d列的元素%d",rowindex,colindex,max);break;}}if(0==flag)printf("没有鞍点");
return 0;}

9. 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出"无此数"。

#include <stdio.h>
#include <stdlib.h>int main()
{int array[15]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14};int left=0;int right=sizeof(array)/sizeof(array[0]);int key=0;printf("请输入你想要查找的数字:\n");scanf("%d",&key);//二分查找while(left<right){int mid=left+((right-left)>>1);if(key==array[mid]){printf("%d\n",mid);break;}else if(key<array[mid]){right=mid;}else{left=mid+1;}}if(left>=right)printf("无此数\n");return 0;
}

10.有篇文章,有3行文字,每行80个字符。要求分别统计出其中文字大写字母、小写字母、数字
空格以及其他字符的个数

include <stdio.h>
#include <stdlib.h>int main()
{char text[3][80];int upp=0,low=0,digit=0,space=0,other=0;for(int i=0;i<3;i++){printf("please input line:%d:\n",i+1);gets(text[i]);for(int j=0;j<80 && text[i][j]!='\0';j++){if(text[i][j]>='A'&& text[i][j]<='Z')upp++;else if(text[i][j]>'a'&& text[i][j]<='z')low++;else if(text[i][j]>'0' && text[i][j]<='9')digit++;else if(text[i][j]==' ')space++;elseother++;}}printf("\nupper case :%d\n",upp);printf("lower case:%d\n",low);printf("digit :%d\n",digit);printf("space: %d\n",space);printf("other: %d\n",other);return 0;
}

11.输出以下答案:

* * * ** * * ** * * ** * * ** * * *
#include <stdio.h>int main()
{
for(int i=0;i<5;i++){for(int j=0;j<i;j++)printf(" ");printf("****\n");}
return 0;
}

12有一行电文,按下面的规律译成密码:

A--->Z   a--->z
B--->Y   b--->y
C--->X   c--->x
……
#include <stdio.h>int main()
{
char s[1024]={0};
scanf("%s",&s);int len=strlen(s);//定义有几个需要转换的字母
for(int i=0;i<len;i++){if(s[i]>='a' && s[i]<='z')s[i]='a'+25-(s[i]-'a');//小写转换else   if(s[i]>='A' && s[i]<='A')s[i]='A'+25-(s[i]-'A');//大写转换
}printf("%s",s);
return 0;}

13.编一程序,将两个字符串连接起来,不要用strcat函数

#include <stdio.h>int main()
{
char s1[100]={0};
char s2[100]={0};
int index1=0,index2=0;scanf("%s",s1);
scanf("%s",s2);while('\0'!=s1[index1])index1++;while(s1[index1++]=s2[index2++]);//拼接s1s2printf("%s",s1);return 0;}

14.编写一个程序,将两个字符串s1和s2比较,如果s1 > s2,输出一个整数;若s1 = s2,输出0;
若s1 < s2,输出一个负数。不要用strcpy函数。两个字符串用gets函数读入。输出的正数或负数的绝对值应是相比较的两个字符串相对应字符的ASCII码的差值。例如,“A"和“C”相比,由于"A” < “C”,应输出负数,同时由于‘A’与‘C’的ASCII码差值为2,因此应输出"-2"。同理:“And”和"Aid"相比较,根据第2个字符比较结果,“n"比"i"大5,因此应输出"5”。

#include <stdio.h>
#include <stdlib.h>int main()
{int ret=0, index=0;char s1[100]={0}, s2[100]={0};gets(s1);gets(s2);while(!(ret=s1[index]-s2[index]) && '\0' !=s1[index] && '\0' !=s2[index]){++index;}// 将s1和s2中的字符从前往后逐个进行比较,相等继续往后,// 不相等时ret中结果不为0,!ret则为0  循环结束// 如果一个走到末尾,一个未走到末尾 ret也不为0, !ret为0,循环结束// 如果两个字符串相等,同时达到末尾,循环结束printf("%d\n",ret);return 0;
}

15.编写一个程序,将字符数组s2中的全部字符复制到字符数组s1中,不用strcpy函数。
复制时,‘\0’也要赋值过去。’\0’之后的字符不复制。

#include <stdio.h>
#include <stdlib.h>int main()
{char s1[100]={0};char s2[100]={0};int index1=0, index2=0;scanf("%s",s2);while(s1[index1++]=s2[index2++]);printf("%s\n",s1);return 0;
}

第八章 指针 开始啦!从这个章节开始我把编程软件换成Visual studio2019

1. 输入3个整数,要求按由小到大的顺序输出。

#include <stdio.h>void swap(int* p_a, int* p_b)
{int temp = *p_a;*p_a = *p_b;*p_b = temp;
}int main()
{int a, b, c, * p_a = &a, * p_b = &b, * p_c = &c;printf("please input 3 numbers:\n");scanf_s("%d%d%d",p_a, p_b, p_c);//不能加& 地址已经取完if (*p_a > *p_b) {swap(p_a, p_b);}if (*p_a > *p_c) {swap(p_a, p_c);}if (*p_b > *p_c) {swap(p_b, p_c);}printf("%d,%d,%d", *p_a, *p_b, *p_c);return 0;}

2.输入3个字符串,要求按由小到大的顺序输出。

#include <stdio.h>
int main()
{char str[3][32];char* p[3];printf("Please enter three strings:");for (int i = 0; i < 3; i++) {p[i] = str[i];scanf_s("%s", p[i], 32);//后边的数字限制缓冲区边界,防止缓冲区溢出访问越界}//让p[0]和p[1]/p[2]分别进行比较,找出最大的字符串,i+1之后,则让p[1]和p[2]进行比较,找出第二大//i循环总个数-1次,最后一个是不需要比较的for (int i = 0; i < 2; i++) {for (int j = i + 1; j < 3; j++) {if (strcmp(p[i], p[j]) > 0) {char* tmp = p[i]; p[i] = p[j]; p[j] = tmp;}}}printf("%s %s %s\n", p[0], p[1], p[2]);return 0;
}

3. 输入10个整数,将其中最小的数与第一个数对换, 把最大的数与最后一个数对换。

#include <stdio.h>void input(int* arry, int len)
{for (int i = 0; i < len; i++) {scanf_s("%d", &arry[i]);}
}void print(int* arry, int len) {for (int i = 0; i < len; i++) {printf("%d ", arry[i]);}printf("\n");
}void handle(int * arry, int len) {int max_num = arry[0], min_num = arry[0];int* p_max = NULL, * p_min = NULL;for (int i = 1; i < len; i++) {if (min_num > arry[i]) {min_num = arry[i];p_min = &arry[i];}if (max_num < arry[i]) {max_num = arry[i];p_max = &arry[i];}}int tmp;tmp = *p_min; *p_min = arry[0]; arry[0] = tmp;tmp = *p_max; *p_max = arry[len - 1]; arry[len - 1] = tmp;
}int main(){int arry[5];input(arry, 5);handle(arry, 5);print(arry, 5);return 0;
}

C语言谭浩强(第五版)答案6、8章相关推荐

  1. c语言谭浩强第五版---全书笔记+习题(一)

    写在开始之前,适合有一点基础的人复习使用!!!!!!! 写在开始之前,适合有一点基础的人复习使用!!!!!!! 写在开始之前,适合有一点基础的人复习使用!!!!!!! 常用的头部文件 #include ...

  2. c语言 谭浩强第五版第五章习题第17题 乒乓球比赛

    两个乒乓球队进行比赛,各出三人.甲队为A,B,C3人,乙队为X,Y,Z3人.已抽签决定比赛名单.有人向队员打听比赛的名单,A说他不和X比,C说他不和X,Z比,请编程序找出3对赛车的名单. #inclu ...

  3. C语言谭浩强第三版第十二章例题及课后题:位运算

    eg12.1取一个整数a从右端开始的4~7位 0000...000000        0 1111...111111       ~0  1111...110000       ~0<< ...

  4. 《C语言程序设计》(谭浩强第五版) 第2章 算法——程序的灵魂

    <C语言程序设计>(谭浩强第五版) 第2章 算法--程序的灵魂 习题解析与答案 你也可以上程序咖(https://meta.chengxuka.com),打开大学幕题板块,不但有答案,讲解 ...

  5. C语言程序设计(谭浩强第五版)——习题

    C语言程序设计(谭浩强第五版)--习题 第3章 最简单的C程序设计--顺序程序设计 第4章 选择结构程序设计 第5章 循环结构程序设计 第6章 利用数组处理批量数据 第3章 最简单的C程序设计--顺序 ...

  6. 《C语言程序设计》谭浩强 第五版 编程10题解答2

    <C语言程序设计>谭浩强 第五版 编程10题解答2 11.素数计算 编写程序计算500-800区间内素数的个数cnt,并按所求素数的值从大到小的顺序,再计算其间隔减.加之和,即第1个素数- ...

  7. C程序设计(谭浩强第五版)总结

    C程序设计(谭浩强第五版)总结 本篇文章主要是总结谭浩强第五版C语言书上的重点和易漏点的知识点,其目的主要是给高校期末考试的同学们点参考.本文所参考的书籍是谭浩强的<C程序设计(第五版)> ...

  8. C程序设计谭浩强第五版课后答案 第三章习题答案

    C语言程序设计谭浩强第五版课后答案第三章 1.假如我国国民生产总值的年增长率为7%, 计算10年后我国国民生产总值与现在相比增长多少百分比.计算公式为p=(1+r)np = (1+r)^np=(1+r ...

  9. 自学c程序设计之路,谭浩强第五版,(一)程序设计与c语言

    由于本人提升技能需求,开始自学c语言程序设计,教材为<c程序设计>第五版谭浩强著.该系列为本人的学习笔记,记录的是知识点与例题,学到哪里,更到哪里.也希望能对正在学c程序设计的朋友有帮助. ...

  10. C语言谭浩强第5版章节编程题

    本文用来练习谭浩强章节练习题,慢慢更新.有需要解答的在下边留言第一时间回复. 第一章 1-6 编写一个程序,输入3个数a,b,c,输出最大值. #define _CRT_SECURE_NO_WARNI ...

最新文章

  1. 百亿数据,毫秒级返回,如何构建?
  2. /etc/rsyncd.conf
  3. matlab 邻近度 离群点_Matlab基础学习第一弹!干货来啦!
  4. 160个Crackme003之4C大法详解
  5. 容器和容器镜像的区别,您真的了解吗
  6. 华为鸿蒙内置,内置鸿蒙系统,华为生态产品海雀智能摄像头Pro体验
  7. 在VC中使用MATLAB C++函数库
  8. 一文读懂最强中文NLP预训练模型ERNIE
  9. phpexcel 获取工作簿名称_工作分享 | Excel快速汇总考勤
  10. 51NOD 1088 最长回文子串1089 最长回文子串 V2(Manacher算法)
  11. 惊呆!到2020年三大运营商5G投入将达1800亿美元
  12. 蓝桥杯 ALGO-63 算法训练 乘法表
  13. 学NLP不懂这个项目?快别去秋招了,你HOLD不住的!
  14. ftp上传下载工具,6款最值得推荐的Windows端ftp上传下载工具
  15. 智能衣橱控制系统的设计
  16. 电脑蓝牙耳机无法调节用关闭绝对音量来解决
  17. 儿童识字量测试3090字(倪铂颖)
  18. 通过frp穿透实现rdp远程电脑桌面
  19. py4j开发配置idea+python
  20. Python计算等额本息贷款和等额本金贷款

热门文章

  1. java jvm sdk_JDK、SDK、JRE、JVM概念详解
  2. 【深度学习】研究者意外发现DALL-E 2在用自创语言生成图像:全文黑话,人类都看不懂...
  3. MATLAB如何输出图形到CAD或者UG,ug里面怎么导出cad图形
  4. eclipse快速创建无参和有参构造函数:
  5. 快手版-CentOS7系统安装配置图解教程
  6. 头条限流是什么原因_头条号跨领域了,限流了,怎么补救!
  7. 这个地方沸腾,高手争雄,至尊大决战,从天上杀到地下,又从地上打到云霄上!
  8. react 返回一个页面_react-navigation goBack返回指定页面
  9. 李开复:搞无人车在电车难题上论争个没完,这样子不行的
  10. 用python实现小猪佩奇