C语言程序设计-笔记6-数组
C语言程序设计-笔记6-数组
例7-1 输出所有大于平均值的数。输入n个整数(1 ),计算这些数的平均值,再输出所有大于平均值的数。
#include<stdio.h>
int main(void)
{
int i,n;
double average,sum;
int a[10];
printf("Enter n:");
scanf("%d",&n);
if(n>=1&&n<=10)
{
printf("Enter %d integers:",n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sum=0;
for(i=0;i<n;i++)
{
sum=sum+a[i];
}
average=sum/n;
printf("average = %.2f\n",average);
for(i=0;i<n;i++)
{
if(a[i]>average)
{
printf("%d",a[i]);
printf(" ");
}
}
printf("\n");
}
else
{
printf("Invalid value.\n");
}
return 0;
}
例7-2 利用数组计算斐波那契数列。利用数组计算斐波那契数列的前n个数( ),即1,1,2,3,5,8,。。。,并按每行打印5个数的格式输出,如果最后一行的输出少于5个数,也需要换行。
#include<stdio.h>
#define MAX 46
int main(void)
{
int i,n;
int fib[MAX]={1,1};
printf("Enter n:");
scanf("%d",&n);
if(n>=1&&n<=46)
{
for(i=2;i<n;i++)
{
fib[i]=fib[i-1]+fib[i-2];
}
for(i=0;i<n;i++)
{
printf("%6d",fib[i]);
if((i+1)%5==0)
{
printf("\n");
}
}
if(n%5!=0)
{
printf("\n");
}
}
else
{
printf("Invalid Value.\n");
}
return 0;
}
例7-3 查找满足条件的所有整数—顺序查找发。输入正整数n(1 <=n<=10)和整数x,再输入n个整数并存入数组a中,然后在数组a中查找给定的x。如果数组a中的元素与x的值相同,输出所有满足条件的元素的下标(下标从0开始);如果没有找到,输出“Not Found”.
#include<stdio.h>
#define MAXN 10
int main(void)
{
int i,flag,n,x;
int a[MAXN];
printf("Enter n,x:");
scanf("%d%d",&n,&x);
printf("Enter %d integers:",n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
flag=0;
for(i=0;i<n;i++)
{
if(a[i]==x)
{
printf("Index is %d\n",i);
flag=1;
}
}
if(flag==0)
{
printf("Not Found.\n");
}
return 0;
}
例7-4 输入一个正整数n(1<=n<=10),再输入n个整数,将它们存入数组a中。
1) 求最小值及其下标。输出最小值和它所对应的最小下标。
2) 交换最小值。将最小值与第一个数交换,输出交换后的n个数。
#include<stdio.h>
#define MAXN 10
int main(void)
{
int i,index,n;
int a[MAXN];
printf("Enter n:");
scanf("%d",&n);
printf("Enter %d integers:",n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
index=0;
for(i=1;i<n;i++)
{
if(a[i]<a[index])
{
index=i;
}
}
printf("min is %d\t sub is %d\n",a[index],index);
int temp;
temp=a[index];
a[index]=a[0];
a[0]=temp;
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
例7-5 选择法排序。输入一个正整数n(1-10),再输入n个整数,用选择法将它们从小到大排序后输出。
#include<stdio.h>
#define MAXN 10
int main(void)
{
int i,index,k,n,temp;
int a[MAXN];
printf("Enter n:");
scanf("%d",&n);
printf("Enter %d integers:",n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(k=0;k<n-1;k++)
{
index=k;
for(i=k+1;i<n;i++)
{
if(a[i]<a[index])
{
index=i;
}
}
temp=a[index];
a[index]=a[k];
a[k]=temp;
}
printf("After sorted:");
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
例7-6 调查电视节目受欢迎程度。某电视台要调查观众对该台8个栏目(设相应栏目编号为1-8)的受欢迎情况,共调查了n(1<=n<=1000)位观众。现要求编写程序,输入每一位观众的投票情况(每位观众只能选择一个最喜欢的栏目投票),统计输出各栏目的得票情况。
#include<stdio.h>
#define MAXN 8
int main(void)
{
int i,n,response;
int count[MAXN+1];
printf("Enter n:");
scanf("%d",&n);
for(i=1;i<=MAXN;i++)
{
count[i]=0;
}
for(i=1;i<=n;i++)
{
printf("Enter your response:");
scanf("%d",&response);
if(response>=1&&response<=MAXN)
{
count[response]++;
}
else
{
printf("Invalid:%d\n",response);
}
}
printf("result:\n");
for(i=1;i<=MAXN;i++)
{
if(count[i]!=0)
{
printf("%4d%4d\n",i,count[i]);
}
}
return 0;
}
例7-7 二分查找法。设已有一个n(1 )个元素的整型数组a,且按值从小到大有序排列。输入一个整数x,然后在数组中查找x,如果找到,输出相应的下标,否则,输出“Not Found”。
#include<stdio.h>
int main(void)
{
int low,high,mid,n=10,x;
int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("Enter x:");
scanf("%d",&x);
low=0;
high=n-1;
while(low<=high)
{
mid=(low+high)/2;
if(x==a[mid])
{
break;
}
else if(x<a[mid])
{
high=mid-1;
}
else
{
low=mid+1;
}
}
if(low<=high)
{
printf("Index is %d\n",mid);
}
else
{
printf("Not Found\n");
}
return 0;
}
例7-8 求矩阵的最大值。输入两个正整数m和n( ),再输入1个mxn的矩阵,找出最大值以及它的行下标和列下标。假设最大值唯一。
#include<stdio.h>
#define MAXM 6
#define MAXN 6
int main(void)
{
int col,i,j,m,n,row;
int a[MAXM][MAXN];
printf("Enter m,n:");
scanf("%d%d",&m,&n);
printf("Enter %d integers:\n",m*n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
row=col=0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j]>a[row][col])
{
row=i;
col=j;
}
}
}
printf("max=a[%d][%d]=%d\n",row,col,a[row][col]);
return 0;
}
例7-9 方阵转置。输入一个正整数n( ),根据下式生成一个nxn的方阵,即将该方阵转置(行列互换)后输出。
a[i][j]=i*n+j+1 (0 ,0 )
#include<stdio.h>
#define MAXN 6
int main(void)
{
int i,j,n,temp;
int a[MAXN][MAXN];
printf("Enter n:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[i][j]=i*n+j+1;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i<=j) //上三角
{
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
return 0;
}
例7-10 计算天数。定义函数day_of_year(year,month,day),计算并返回年year,月month和日day对应的是该年的第几天。
#include<stdio.h>
int day_of_year(int year,int month,int day)
{
int k,leap;
int tab[2][13]={
{
0,31,28,31,30,31,30,31,31,30,31,30,31
},
{
0,31,29,31,30,31,30,31,31,30,31,30,31
}
};
leap=(year%4==0&&year%100!=0||year%400==0);
for(k=1;k<month;k++)
{
day=day+tab[leap][k];
}
return day;
}
int main(void)
{
int year,month,day;
int n;
printf("Enter yyyy-mm-dd:");
scanf("%d%d%d",&year,&month,&day);
n=day_of_year(year,month,day);
printf("%d\n",n);
return 0;
}
例7-11 判断回文字符串。输入一个以回车符为结束标志的字符串(少于80个字符),判断该字符串是否为回文。回文就是字符串中心对称,如“noon”、“radar”、是回文,“reader”不是回文。
#include<stdio.h>
#define MAXLINE 80
int main(void)
{
int i,k;
char line[MAXLINE];
printf("Enter a string:");
k=0;
while((line[k]=getchar())!='\n')
{
k++;
}
line[k]='\0';
i=0;
k=k-1;
while(i<k)
{
if(line[i]!=line[k])
{
break;
}
i++;
k--;
}
if(i>=k)
{
printf("It is a palindrome\n");
}
else
{
printf("It is not a palindrome\n");
}
return 0;
}
例7-12 凯撒密码。为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成密文。输入一个以回车符为结束标志的字符串(少于80个字符),再输入一个正整数offset,用凯撒密码将其加密后输出。凯撒密码是一种简单的替换加密技术,将明文中的所有字母都在字母表上向后偏移offset位后被替换成密文。例如,当偏移量offset是2时,表示所有的字母被向后移动2位后的字母替换,即所有的字母A将被替换成C,字母B将变为D。。。。字母X变成Z,字母Y则变为A,字母Z变为B。
#include<stdio.h>
#define MAXLINE 80
#define M 26 //字母数量
int main(void)
{
int i,offset;
char str[MAXLINE];
printf("Enter a string:");
i=0;
while((str[i]=getchar())!='\n')
{
i++;
}
str[i]='\0';
printf("Enter offset:");
scanf("%d",&offset);
if(offset>=M)
{
offset=offset%M;
}
for(i=0;str[i]!='\0';i++)
{
if(str[i]>='A'&&str[i]<='Z')
{
if((str[i]-'A'+offset)<M)
{
str[i]=str[i]+offset;
}
else
{
str[i]=str[i]-(M-offset);
}
}
else if(str[i]>='a'&&str[i]<='z')
{
if((str[i]-'a'+offset)<M)
{
str[i]=str[i]+offset;
}
else
{
str[i]=str[i]-(M-offset);
}
}
}
printf("After being encrypted:");
for(i=0;str[i]!='\0';i++)
{
putchar(str[i]);
}
printf("\n");
return 0;
}
例7-13 字符转换。输入一个以回车符为结束标志的字符串(少于10个字符),提取其中所有数字字符(‘0’。。。‘9’),将其转换为一个十进制整数输出。
#include<stdio.h>
#define MAXLINE 10
int main(void)
{
int i,number;
char str[MAXLINE];
printf("Enter a string:");
i=0;
while((str[i]=getchar())!='\n')
{
i++;
}
str[i]='\0';
number=0;
for(i=0;str[i]!='\0';i++)
{
if(str[i]>='0'&&str[i]<='9')
{
number=number*10+str[i]-'0';
}
}
printf("digit=%d\n",number);
return 0;
}
例7-14 十六进制字符串转换成十进制非负整数。输入一个以‘#’为结束标志的字符串(少于10个字符),滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,输出该字符串并将其转换为十进制数后输出。
#include<stdio.h>
#define MAXLINE 80
int main(void)
{
int i,k,number;
char hexad[MAXLINE],str[MAXLINE];
printf("Enter a string:");
i=0;
while((str[i]=getchar())!='#')
{
i++;
}
str[i]='\0';
i=0;
k=0;
while(str[i]!='\0')
{
if((str[i]>='0'&&str[i]<='9')||(str[i]>='A'&&str[i]<='F')||(str[i]>='a'&&
str[i]<='f'))
{
hexad[k]=str[i];
k++;
}
i++;
}
hexad[k]='\0';
printf("New string:");
for(i=0;hexad[i]!='\0';i++)
{
putchar(hexad[i]);
}
printf("\n");
number=0;
for(i=0;hexad[i]!='\0';i++)
{
if(hexad[i]>='0'&& hexad[i]<='9')
{
number=number*16+hexad[i]-'0';
}
else if(hexad[i]>='A'&&hexad[i]<='F')
{
number=number*16+hexad[i]-'A'+10;
}
else if(hexad[i]>='a'&&hexad[i]<='f')
{
number=number*16+hexad[i]-'a'+10;
}
}
printf("Number=%d\n",number);
return 0;
}
参考资料
C语言程序设计/何钦铭,颜晖主编.---4版.---北京:高等教育出版社,2020.9
C语言程序设计-笔记6-数组的更多相关文章
- C语言学习笔记 (007) - 数组指针和通过指针引用数组元素的方法总结
1.数组指针:即指向数组的指针 那么, 如何声明一个数组指针呢? ]; /*括号是必须写的,不然就是指针数组:10是数组的大小*/ 拓展:有指针类型元素的数组称为指针数组. 2.通过指针引用数组元素的 ...
- C语言学习笔记 (004) - 数组名和数组首地址(转)
一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址.指针变量既然可以指向变量,当然也可以指向数组和数组元素(把数据起始地址或某一元素的地址放到一个指针变量中) ...
- JavaScript语言精粹 笔记04 数组
数组1 数组字面量2 长度3 删除4 列举5 混淆的地方6 方法7 维度 数组1 数组字面量 var empty = []; var numbers = [ 'zero', 'one', 'two', ...
- 粗暴,干就完了----徐晓冬似的C语言自学笔记---字符数组相关技术
字符串拼接函数 strcat() 字符串----作为很多编程语言的鼻祖C语言,没有字符串类型,取而代之的字符数组,很多数组在声明的时候会给定数组长度,然而我们却可以这样写 char mywords[] ...
- JAVA语言程序设计-笔记摘录
JAVA 程序语言设计(基础篇) 笔记摘录 为避免输入错误, 不要在nextByte().nextShort().nextInt()等等后面使用nextLine() nextXXXXX()都称为令牌读 ...
- c语言学习笔记 函数数组传递笔记
今天学习c语言的一个小例子,果然还是陷入了php的编程习惯里,这里记录一下. #include <stdio.h> //例子很简单,就是编写一个函数把传递进来的数组里的值都赋值为1而已 / ...
- Go语言学习笔记(4)——数组和切片
1 数组的特点: 长度固定.元素数据类型相同.下标从0开始 1.1 声明和初始化: var array_name [size] type var arr1 [10] float32 ...
- C语言学习笔记之数组与指针的关系
首先,大家先需知道一个关于基类型的概念 基类型:组成一个新类型的基础类型 这句话是什么意思呢?举个例子: int a[3] = {1,2,3}; 上面是由三个int类型的数组成一个新的类型也就是数组, ...
- go语言学习笔记之数组
package main import ( "fmt" ) func main() { // Declare arrays var x[5] int //Assign value ...
- Python语言程序设计(笔记)
1.平方根的格式化 知识点:平方根计算 pow(a,0.5)[可以计算负数,结果为复数] a**b 例题: 获得用户输入的一个整数a,计算a的平方根,保留小数点后3位,并打印输出. ...
随机推荐
- SpringBoot RestTemplate 上传文件
@Test public void testUpload() throws Exception { String url = "http://127.0.0.1/file/upload&qu ...
- MySQL 索引失效场景总结
查询条件有 or 假设在 customer_name 字段设置了普通索引,执行以下 sql: # type: ref, possible_keys: idx_customer_name, key: i ...
- #点分治,树状数组#洛谷 5311 [Ynoi2011] 成都七中
题目 给你一棵 \(n\) 个节点的树,每个节点有一种颜色,有 \(m\) 次查询操作. 查询操作给定参数 \(l\) \(r\) \(x\),需输出: 将树中编号在 \([l,r]\) 内的所有节点 ...
- #范德蒙德卷积,第二类斯特林数,NTT#洛谷 2791 幼儿园篮球题
题目 \(T(T\leq 200)\)组数据求 \[\frac{1}{C(n,k)}\sum_{i=0}^kC(m,i)C(n-m,k-i)i^L \] 对于所有数据满足 \(n,m,k\leq 2* ...
- #trie,动态规划#洛谷 2292 [HNOI2004]L语言
题目 分析 建一棵trie,然后匹配最长前缀可以用\(dp\)做, 如果这个位置可以被匹配到那么可以从这个位置继续匹配 代码 #include <cstdio> #include < ...
- OpenHarmony创新赛|赋能直播第五期
OpenHarmony创新赛赋能直播课程即将再次与大家见面!本期基于之前的青蛙影院的UI界面设计的课程,介绍综合性APP的需求介绍和技术栈整合等内容.此外,课程同步赋能OpenHarmony创新赛, ...
- OpenHarmony中的HDF单链表及其迭代器
概念 为了性能考虑,嵌入式系统一般使用C语言进行开发,由于C语言标准库没有封装链表,所以嵌入式系统一般自己设计和实现链表这种数据结构.单链表是链表中的一种,本文描述OpenAtom OpenHarmo ...
- Matplotlib绘图设置---图形颜色和风格调整
绘图函数 plt.plot()函数可以通过相应的参数设置绘图风格. plt.plot(*args, scalex=True, scaley=True, data=None, **kwargs) Doc ...
- MFC程序隐藏托盘+右键关闭菜单
背景介绍: 我的程序是启动后,默认就隐藏到托盘中,等待http请求后,显示界面.所以最小化到托盘的代码,我是写在初始化里面. 正文: 一.自定义消息 WM_SHOWTASK #define W ...
- 代码覆盖率检查工具 -- Coverage,简单使用
Coverage 一个专门用来检查代码覆盖率的工具,他的使用非常简单,有两种使用方法:[命令行运行,配合测试套件使用] 安装: pip install coverage 一.准备素材 main.py ...