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-数组的更多相关文章

  1. C语言学习笔记 (007) - 数组指针和通过指针引用数组元素的方法总结

    1.数组指针:即指向数组的指针 那么, 如何声明一个数组指针呢? ]; /*括号是必须写的,不然就是指针数组:10是数组的大小*/ 拓展:有指针类型元素的数组称为指针数组. 2.通过指针引用数组元素的 ...

  2. C语言学习笔记 (004) - 数组名和数组首地址(转)

    一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址.指针变量既然可以指向变量,当然也可以指向数组和数组元素(把数据起始地址或某一元素的地址放到一个指针变量中) ...

  3. JavaScript语言精粹 笔记04 数组

    数组1 数组字面量2 长度3 删除4 列举5 混淆的地方6 方法7 维度 数组1 数组字面量 var empty = []; var numbers = [ 'zero', 'one', 'two', ...

  4. 粗暴,干就完了----徐晓冬似的C语言自学笔记---字符数组相关技术

    字符串拼接函数 strcat() 字符串----作为很多编程语言的鼻祖C语言,没有字符串类型,取而代之的字符数组,很多数组在声明的时候会给定数组长度,然而我们却可以这样写 char mywords[] ...

  5. JAVA语言程序设计-笔记摘录

    JAVA 程序语言设计(基础篇) 笔记摘录 为避免输入错误, 不要在nextByte().nextShort().nextInt()等等后面使用nextLine() nextXXXXX()都称为令牌读 ...

  6. c语言学习笔记 函数数组传递笔记

    今天学习c语言的一个小例子,果然还是陷入了php的编程习惯里,这里记录一下. #include <stdio.h> //例子很简单,就是编写一个函数把传递进来的数组里的值都赋值为1而已 / ...

  7. Go语言学习笔记(4)——数组和切片

    1 数组的特点: 长度固定.元素数据类型相同.下标从0开始 1.1 声明和初始化: var array_name [size] type         var arr1 [10] float32   ...

  8. C语言学习笔记之数组与指针的关系

    首先,大家先需知道一个关于基类型的概念 基类型:组成一个新类型的基础类型 这句话是什么意思呢?举个例子: int a[3] = {1,2,3}; 上面是由三个int类型的数组成一个新的类型也就是数组, ...

  9. go语言学习笔记之数组

    package main import ( "fmt" ) func main() { // Declare arrays var x[5] int //Assign value ...

  10. Python语言程序设计(笔记)

    1.平方根的格式化 知识点:平方根计算 pow(a,0.5)[可以计算负数,结果为复数] a**b 例题: 获得用户输入的一个整数a,计算a的平方根,保留小数点后3位,并打印输出.‪‬‪‬‪‬‪‬‪‬ ...

随机推荐

  1. KingbaseES V8R3集群运维案例之---流复制异步同步及全同步模式配置

    案例说明: 通过案例描述KingbaseES V8R3集群异步.同步及全同步强一致性配置,本案例为一主二备的架构. 适用版本: KingbaseES V8R3 集群架构: 集群复制配置参数说明: 1) ...

  2. #dp#CodeChef Little Elephant and Mouses

    LEMOUSE 分析 由于被单只老鼠吓到只能算一次,所以前两次走的位置也可能会被老鼠吓到. 设 \(dp[n][m][o][p]\) 表示走到 \((n,m)\) 上一步走的是 \(o\) 这种方式, ...

  3. #模型转换,动态规划#洛谷 1758 [NOI2009] 管道取珠

    题目 分析 考虑每种情况的方案数平方之和,可以被转换成有两个人同时独立进行该游戏,问最后情况相同的方案数. 那么设 \(dp[i][j][k][o]\) 表示第一个人在上管道拿了 \(i\) 个,下管 ...

  4. #KMP,矩阵乘法#洛谷 3193 [HNOI2008]GT考试

    题目 给定\(n,m,K\)和一个长度为\(m\)的数\(x\), 问有多少个\(n\)位数满足任意一段不与\(x\)完全相同,可含前导0 \(n\leq 10^9,m\leq 20\) 分析 设\( ...

  5. #KD-Tree#洛谷 4849 寻找宝藏

    题目传送门 题目大意 在一个四维坐标系中,给定 \(n\) 个点,问有多少种选择点的方案, 使得这些点排序后任意坐标单调不降,并且选择的点权和最大,同时输出最大值 分析 设 \(f[i]\) 表示最后 ...

  6. JDK 14的新特性:switch表达式

    目录 简介 写在前面 连写case switch返回值 yield 总结 简介 switch的新特性可是源远流长,早在JDK 12就以预览功能被引入了,最终在JDK 14成为了正式版本的功能:JEP ...

  7. OpenHarmony—应用间HSP开发指导

     应用间HSP用于不同应用间的代码.资源共享. 应用间HSP的宿主应用是一种特殊状态的应用,只能由一个HSP组成,不会独立运行在设备上,而是被普通应用模块的依赖项引用.当普通应用运行时,通过动态调用的 ...

  8. 【开源三方库】crypto-js加密算法库的使用方法

     OpenAtom OpenHarmony(简称"OpenHarmony")三方库,是经过验证可在OpenHarmony系统上可重复使用的软件组件,可帮助开发者快速开发OpenHa ...

  9. OpenHarmony 3.2 Beta多媒体系列——音视频播放gstreamer

      一. 简介 多媒体播放框架主要的实现在PlayerServer服务中,这个服务提供了媒体播放框架所需要的实现环境,继续跟踪代码分析发现,PlayerServer主要通过gstreamer适配层,对 ...

  10. Git 分支管理:优化版本控制与应急处理的关键策略

    使用 Git 分支:轻松管理不同版本和应对紧急情况的最佳实践 使用 Git 分支 在 Git 中,分支是主仓库的新/独立版本. 假设你有一个大型项目,需要对其进行设计更新. 没有使用 Git 时: 复 ...