练习1:使用二维数组计算杨辉三角
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int m,i,j;
printf("请输入你所要打印的杨辉三角的列数:\n");
scanf("%d",&m);
putchar(10);
int arr[100][100]={0};
for (int i=0;i<m;i++){
arr[i][0]=1;
for(int j=0;j<=i;j++){
if(i == j){
arr[i][j]=1;
}
if(i>=2 && j>=1){
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
}
}
}
for (int i=0;i<m;i++){
for (int j=0;j<=i;j++){
printf("%d ",arr[i][j]);
}
putchar(10);
}
return 0;
}
练习2:输入一个n个元素的一维数组,计算最大的和,最大差(不允许使用排序)
最大和:第一大值+第二大值
最大差:第一大值-最小值
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
int n;
printf("请输入数组的长度: ");
scanf("%d", &n);
int arr[n];
printf("请输入数组元素: ");
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
int max1 = arr[0], max2 = arr[0], min = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > max1) {
max2 = max1;
max1 = arr[i];
} else if (arr[i] > max2 && arr[i] != max1) {
max2 = arr[i];
}
if (arra[i] < min) {
min = arra[i];
}
}
int max_sum = max1 + max2;
int max_diff = max1 - min;
printf("最大和为: %d\n", max_sum);
printf("最大差为: %d\n", max_diff);
return 0;
}
练习3:输入一个m行n列的二维数组,计算第二小值
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
int rows, cols;
printf("请输入二维数组的行数:\n");
scanf("%d", &rows);
printf("请输入二维数组的列数:\n");
scanf("%d", &cols);
int arr[rows][cols];
printf("请输入这个数组:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
scanf("%d", &arr[i][j]);
}
}
int min = arr[0][0];
int second_min = arr[0][0];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (arr[i][j] < min) {
second_min = min;
min = arr[i][j];
} else if (arr[i][j] != min && (second_min == min || arr[i][j] < second_min)) {
second_min = arr[i][j];
}
}
}
printf("本数组中第二小的数值为:%d\n", second_min);
return 0;
}
练习4:输入n个元素的一维数组,输入查找的key值
如果key出现一次,则输出对应的下标
如果key没有出现,则提示不存在
如果key出现多次,则提示出现多次
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
int n, key;
printf("请输入数组的长度: ");
scanf("%d", &n);
int arr[n];
printf("请输入数组元素: ");
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
printf("请输入要查找的 key 值: ");
scanf("%d", &key);
int count = 0;
for (int i = 0; i < n; i++) {
if (arr[i] == key) {
if (count == 0) {
printf("Key 值 %d 出现的位置: %d\n", key, i);
count++;
} else {
printf("Key 值 %d 出现多次\n");
return 0;
}
}
}
if (count == 0) {
printf("Key 值 %d 不存在\n");
}
return 0;
}
练习5:输入一个m行n列的二维数组,输出每一行的和,以及每一列的和
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int i,j;
int line_sum,column_sum;
printf("请输入二维数组的行数:\n");
scanf("%d",&i);
printf("请输入二维数组的列数:\n");
scanf("%d",&j);
int arr[i][j];
printf("请输入这个数组:\n");
for(int m=0;m<i;m++){
for(int n=0;n<j;n++){
scanf("%d",&arr[m][n]);
}
}
for (int m=0;m<i;m++){
line_sum = 0;
for(int n=0;n<j;n++){
line_sum+=arr[m][n];
}
printf("第%d行的累加和为:%d\n",m+1,line_sum);
}
putchar(10);
for (int n=0;n<j;n++){
column_sum = 0;
for (int m=0;m<i;m++){
column_sum+=arr[m][n];
}
printf("第%d列的累加和为:%d\n",n+1,column_sum);
}
return 0;
}
练习6:输入一个m行n列的二维数组,输出正对角线和反对角线的差
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int i,j;
int sum=0,rsum=0,diff;
printf("请输入二维数组的行数:\n");
scanf("%d",&i);
printf("请输入二维数组的列数:\n");
scanf("%d",&j);
int arr[i][j];
printf("请输入这个数组:\n");
for(int m=0;m<i;m++){
for(int n=0;n<j;n++){
scanf("%d",&arr[m][n]);
}
}
for (int m=0;m<i;m++){
sum+=arr[m][m];
rsum+=arr[m][j-m-1];
}
diff = sum - rsum;
printf("正对角线与反对角线的差为:%d\n",diff);
return 0;
}
练习7:输入一个2行3列的二维数组,请实现转置(行列转换)
1 2 3 1 4
4 5 6 ----> 2 5
3 6
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int arr[2][3]={0};
int r_arr[3][2]={0};
int t;
printf("请输入一个2行3列的二维数组:\n");
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
scanf("%d",&arr[i][j]);
r_arr[j][i]=arr[i][j];
}
}
printf("转置后的数组为:\n");
for(int i=0;i<3;i++){
for(int j=0;j<2;j++){
printf("%d ",r_arr[i][j]);
}
putchar(10);
}
return 0;
}
练习8:设float a= 2,b = 4,c =3; C语言表达式(1/2)+(a+b)*c的计算结果是:
答:18.000000
练习9:下述程序执行后的输出结果是:
main()
{
int x = 'f';
printf("%c\n",'a'+(x-'a'+1));
}
答:g
练习10:执行语句"k = 7 >> 1;"后,变量k的当前值是:
答:3
练习11:若有宏定义:#define MOD(x,y) x%y
则执行以下语句后的输出结果是:
int a=10, b=94;
printf("%d\n",MOD(b,a+4));
答:8
练习12:下列程序段运行后,x的值是:
int a = 1;b = 2;x = 0;
if(!(--a))x--;
if(!b)x=7;else ++x;
答:0