c语言 数组排序 字符串排序 函数实现
C语言必背的典型程序设计题目 - 数组、函数-------参考答案

1、使用选择法、冒泡法对10个数进行排序,并输出排序前后的数列。
nk=0; mt=0; //用于记录出列顺序while(t<n){if(num[i]==0) k++;if(k==m){t++;num[i]=t;k=0;}i++;if(i==n)i=0; //或者 i=i%n,构成循环}for(i=0;i<n;i++)printf("%4d",i+1);printf("\n");for(i=0;i<n;i++)printf("%4d",num[i]);printf("\n");}4、编程打印直角杨辉三角形前六行。
#include <>#include <>void main(){int i,j,a[6][6];for(i=0;i<=5;i++){a[i][i]=1;a[i][0]=1;}for(i=2;i<=5;i++){for(j=1;j<=i-1;j++){a[i][j]=a[i-1][j]+a[i-1][j-1];}}for(i=0;i<=5;i++){for(j=0;j<=i;j++){printf("%4d",a[i][j]);}printf("\n");}}5、编写程序,把下面的数据输入一个二维数组中。
25 36 78 1312 26 88 9375 18 22 3256 44 36 58然后执行以下操作:①输出矩阵两个对角线上的数;②分别输出各行和各列的和;③交换第一行和第三行的位置;④交换第二列和第四列的位置;⑤输出处理后的数组。
#include<>#define SIZE 4void main(){inta[SIZE][SIZE]={{25,36,78,13},{12,26,88,93},{75,18,22,32},{56,44,36,58}};int i,j,t,sum;//输出二维数组printf("二维数组:\n");for(i=0;i<SIZE;i++){for(j=0;j<SIZE;j++){printf("%5d",a[i][j]);}printf("\n");}printf("\n");printf("主对角线上的数:");for(i=0;i<SIZE;i++){printf("%4d",a[i][i]);}printf("\n");printf("副对角线上的数:");for(i=0;i<SIZE;i++){printf("%4d",a[i][SIZE-1-i]);}printf("\n\n");//各列的和for(i=0;i<SIZE;i++){sum=0;for(j=0;j<SIZE;j++){sum+=a[i][j];}printf("第%d行的和=%d\n",i+1,sum);}printf("\n");//各列的和for(j=0;j<SIZE;j++){sum=0;for(i=0;i<SIZE;i++){sum+=a[i][j];}printf("第%d列的和=%d\n",j+1,sum);}printf("\n");//交换第一行和第三行的位置for(j=0;j<SIZE;j++){t=a[0][j];a[0][j]=a[2][j];a[2][j]=t;}//输出二维数组printf("交换第一行和第三行后的二维数组:\n"); for(i=0;i<SIZE;i++){for(j=0;j<SIZE;j++){printf("%5d",a[i][j]);}printf("\n");}printf("\n");//交换第二列和第四列的位置for(i=0;i<SIZE;i++){t=a[i][1];a[i][1]=a[i][3];a[i][3]=t;}//输出二维数组printf("交换第2列和第4列后的二维数组:\n"); for(i=0;i<SIZE;i++){for(j=0;j<SIZE;j++){printf("%5d",a[i][j]);}printf("\n");}} 6、求一个5×5矩阵中的马鞍数,输出它的位置,所谓马鞍数是指在行上最小而在列上最大的数。
C语言3

A . 1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
B . 1*1=1 1*2=2 1*3=3
2*2=4 2*3=6
3*3=9
C . 1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
D . 1*1=1 1*2=2 1*3=3
故本题答案选A。
有以下程序
main()
{ int i=1,j=1,k=2;
if((j++||k++)&&i++) printf("%d,%d,%d\n",i,j,k);
}
执行后输出的结果是__A____。
A.2,2,2 B.2,2,1 C.1,1,2 D.2,2,3
本题的考查点是逻辑表达式。
选项D中scanf的列表项必需为变量的地址。
故本题答案为A。
以下关于字符串的叙述中正确的是__C____。
A . C语言中有字符串类型的常量和变量
B . 两个字符串中的字符个数相同时才能进行字符串大小的比较
C . 空串一定比空格打头的字符串小
D . 可以用关系运算符对字符串的大小进行比较
形如(表达式 1)&&(表达式 2)&&...的逻辑表达式在计算时,先计算表达式1,如果其值是逻辑"真"或非0,就接着计算表达式2,直至计算到第一个为逻辑"假"的表达式时,就可判定整个逻辑表达式为逻辑"假",其后的表达式将不被计算。
c语言程序设计基础期中复习题

c语言程序设计基础期中复习题c语言程序设计是计算机科学与技术专业中非常重要的基础课程之一。
它不仅教会我们如何使用计算机语言编写程序,还培养了我们解决问题的逻辑思维能力。
下面是一些c语言程序设计基础的期中复习题,供同学们复习参考。
# 一、选择题1. 以下哪个选项是C语言中的关键字?- A. class- B. int- C. function- D. include2. C语言中,用于定义变量的关键字是:- A. define- B. declare- C. var- D. let3. 以下哪个是合法的C语言标识符?- A. 2variable- B. for- C. variable2- D. int4. 在C语言中,用于表示逻辑“与”的运算符是:- A. &&- B. ||- C. !- D. &5. C语言中,用于实现条件判断的语句是:- A. if- B. switch- C. case- D. default# 二、填空题1. 在C语言中,基本数据类型包括整型(int)、字符型(char)、______(请填写浮点型)等。
2. C语言中,字符常量可以用单引号括起来,例如'A',而字符串常量则需要用双引号括起来,例如"______"。
3. C语言中,一个完整的程序由______和函数组成。
4. 在C语言中,使用______语句可以实现循环控制。
5. C语言中,函数的返回类型是放在函数名之前的,例如int main()表示函数返回类型为______。
# 三、简答题1. 请简述C语言的基本数据类型有哪些,并简要说明它们的特点。
2. 请解释C语言中数组的定义和使用方式。
3. 描述C语言中函数的声明和调用过程。
4. 请说明C语言中指针的概念及其基本操作。
5. 解释C语言中结构体(struct)的作用和定义方式。
# 四、编程题1. 编写一个C语言程序,实现输入两个整数,输出它们的和。
西北农林科技大学C语言上机实习5答案

实习五答案1、用指针实现排序/* exer 5-1 由键盘输入10个整数,将它们按由小到大顺序排列*/ 用指针实现:由键盘输入10个整数,将他们按由小到大的顺序排列。
输入:键盘输入的10个整数。
输出:按由小到大的顺序排列。
输入样例:1 5 4 3 2 9 23 11 5 7输出样例:1 2 3 4 5 5 7 9 11 23#include<stdio.h>void main(void){int a[10],*p = NULL; /* 说明数组和指针*/int i, j, temp;for(p = a; p < a + 10; p++) /* 指针从数组首到尾*/ {scanf("%d", p); /* 利用指针依次输入*/ }p = a;for(i = 0; i < 9; i++) /* 利用指针依次比较*/{for(j = i + 1; j < 10; j++)if(*(p + i) > *(p + j)){temp = *(p + i);*(p + i) = *(p + j);*(p + j) = temp;}}for(p=a; p < a + 9; p++)printf("%d ", *p);printf("%d\n", *p);}2、用指针实现字符串排序/*exer 5-2 将10个长度小于20的字符串排序*/用指针实现:将10个字符串(设其长度小于20)从小到大排序。
输入:10个字符串。
输出:排序后的10个字符串。
输入样例:ijkjkldefghidefcdehijdefefgfgh输出样例:cdedefdefdefefgfghghihijijkjkl提示:①定义二维字符数组和指向该数组的指针数组;②用循环使指针数组的元素指向二维字符数组各行首;③用循环为指针数组元素赋字符串为值;④用strcmp函数比较两个指针数组元素的值、用strcpy函数交换两个指针数组元素的值。
C语言 第六章 数组

6
6.1 排序问题
3. 初始化
类型名 数组名[数组长度]={初值表}; 初值表中依次放着数组元素的初值。例如: int a[10]={1,2,3,4,5,6,7,8,9,10}; 静态存储的数组如果没有初始化,系统自动给所有的数组元素赋0。 即 static int b[5]; 等价于 static int b[5]={0,0,0,0,0}; 初始化也可以只针对部分元素,如 static int b[5]={1,2,3}; 只对数组b的前3个元素赋初值,其余元素的初值为0。又如 int f[20]={0,1}; 对数组f的前两个元素赋初值,其余元素的值 不确定。
18
6.2 矩阵中最大值的位置
4. 使用二维数组编程
例7:定义一个3*2的二维数组a,数组元素的值由下式给 出,按矩阵的形式输出a。a[i][j]=i+j(0≤i ≤2, 0≤j ≤1), 见文件p131ex7-6.cpp
i
j
第1次 第2次 第3次 第4次 第5次
第6次
0 0 1 1 2
2
0 1 0 1 0
9
6.1 排序问题
4. 使用一维数组编程
例4:输入一个正整数n(1<n≤10), 再输入n个整数,将它们存入 数组a中。 ① 输出最小值和它所对应的下标。 ② 将最小值与第一个数交换,输 出交换后的n个数。 数组的长度在定义时必须确定, 如果无法确定需要处理的数据 数量,至少也要估计其上限, 并将该上限值作为数组长度。 因为n ≤10,数组长度就取上 限10。此外,如果用变量 index记录最小值对应的下标, 则最小值就是a[index]。 见p124ex7-4.cpp
8
6.1 排序问题
4. 使用一维数组编程
C语言6-数组

一维数组的定义和引用
一维数组的定义
类型说明符 数组名[常量表达式];
例:int a[10] ;
a
说明:
(1) 类型说明符用来说明数组中各个数组 元素的类型。
(2)数组名命名规则和变量名相同。 (3)[]代表定义的是数组。
(4)常量表达式的值代表数组的长度,可 以是一般常量和符号常量,不可为变量。
算法2: 输入 a amax for ( i=2; i<=10; i++)
{ 输入 a if ( a>max ) max=a; }
输出 max
显然算法2比算法1简洁, 同时节省了存储空间。
end
算法3:采用数组
算法2:采用简单变量 main()
main()
{ int max,a;
{ int max,a[10];
scanf(“%d”,&a);
for(i=0;i<=9;i++)
max=a;
scanf(“%d”,&a[i]);
for(i=2;i<=10;i++)
/*读入10个数,放入数组*/
{ scanf(“%d”,&a);
max=a[0]; for(i=1;i<10;i++)
与算法2比较 if(max<a) max=a; }
for( i=0;i<n-1;i++)
在a[i]~a[n-1] 范围内找
最小元素a[p], 与a[i]互换
a[0] a[1] a[2] a[3] a[4]
第一轮比 较 第二轮比 较
第三轮比较
82 31 65 9 47 9 31 65 82 47 9 31 65 82 47
c语言编程题

3.在屏幕上输出如下图案(考虑能否将输出的行数由输入的值来控制):
******
******
******
******
4.在屏幕上输出如下图案(考虑将输出的行数由输入的值来控制):
*
**
***
****
*****
5.编程输出如下格式图形(考虑将输出的行数由输入的值来控制):
1
11
1 2 1
1 331
1 4 6 4 1
1 5 101011
18.输入一个大写字母打印菱形。菱形中间一行由该字母组成,相邻的各行由前面的字母依次组成,直到字母A出现在第一行和最末行为止。例如输入字母D,输出图形如下:
A
BBB
CCCCC
DDDDDDD
CCCCC
BBB
A
19.打印如下图形。输出行数由键盘输入。
{
inti,j,k,t;
}
main()
{
inti,a[10];
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
putchar(“\n”);
fun(a,10);
for(i=0;i<10;i++)
printf(“%d”,a[i]);
}
2.编写一个函数,从所读入的若干个字符串(用end作为结束的标志)中找出长度最大的一个字符串,并输出该字符串。
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 5 6 5 4 3 2 1
14.编程打印图形(考虑将输出的行数由输入的值来控制):
[工学]《C语言程序设计》第5章___数组、字符串、指针
![[工学]《C语言程序设计》第5章___数组、字符串、指针](https://img.taocdn.com/s3/m/c07859c84afe04a1b071de5c.png)
5.2.2 一维数组的初始化
1、数组声明时初始化 在编译阶段进行的。这样将减少运行时间, 提高效率。 数组初始化的一般形式为: 类型符 数组名[常量表达式]={值,值…值}; 例如: int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相当于a[0]=0; a[1]=1;... a[9]=9;
…
a[9]
#include <stdio.h> 声明有10个元素 void main() 的一维数组a {int n,i; float s=0, ave, a[10]; a[0] a[1] … a[9] for(i=0;i<10;i++) a[i] { scanf("%f",&a[i]); a[i] s=s+a[i]; } ave=s/10; for(i=0;i<10;i++) a[i] a[i] if (a[i]>ave) printf("%f ",a[i]); }
说明: ① int a[10]={0,1,2,3,4};
给前5个元素赋 值,其余赋0值 不能给数组整体 赋值,改成{1} 静态存储类型, 初值为0 可以省略数组元 素个数。 初值的个数不能 超过元素个数
② int a[10]=1;
③ static int a[3]; ④ int a[ ]={1,2,3,4,5}; ⑤ int a[5]={1,2,3,4,5,1 };
代码: for(i=0; i<N-1; i<5; i++) { p=i; for(j=i+1; i<N; j<6; j++) if(a[j]<a[p]) p=j; t=a[i]; a[i]=a[p]; a[p]=t; } 5-5.c