练习7-1 原题:将7-3程序中的break语句去掉,输出结果会有变化吗?假设输入数据不变,输出什么?
我们先来看例7-3中的源码
#include<stdio.h>
int main()
{
int i,flag,x;
int a[5];
printf("Enter 5 integers: ");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
printf("Enter x: ");
scanf("%d",&x);
flag=0;
for(i=0;i<5;i++)
if(a[i]==x)
{
printf("Index is %d \n",i);
flag=1;
break;
}
if(flag==0)
printf("Not Found\n");
return 0;
}
测试数据:2 9 8 1 9 9
运行结果:1
如果去掉break,说明即使找到了x的下标,程序还是会继续查找,所以输出的结果应该是x的所有下标,注意输出的格式是什么样的就好了。
练习7-2原题:求最大值及其下标。输入一个正整数n(1<n<=10),再输入n个整数,输出最大值及其对应的最小下标,下标从0开始。
代码如下,有误请指出,谢谢!
#include<stdio.h>
int main()
{
int n,i;
scanf("%d",&n);//输入一个正整数
int a[10];
for(i=0;i<n;i++)
scanf("%d",&a[i]);//输入n个整数
int max,m;
max=a[0];m=0;//假设最大值为首项
for(i=1;i<n;i++)
{
if(a[i]>max)//只要你不放等号就不会改变找到的最大值的下标
{
max=a[i];
m=i;
}
}
printf("%d %d\n",max,m);
return 0;
}
例7-3原题:将数组中的数逆序存放。输入一个正整数n(1<n<=10),再输入n个整数,存入数组a中,先将数组a中的这n个数逆序存放,再按顺序输出数组a中的n个元素。
代码如下,有误请指出,谢谢!
#include<stdio.h>
int main()
{
int n,i;
scanf("%d",&n);//输入一个正整数
int a[10];
for(i=0;i<n;i++)
scanf("%d",&a[i]);//输入n个整数
int k,index,temp;//选择排序法
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;
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
例7-4原题:找出不是两个数组共有的元素。输入一个正整数n(1<n<=10),再输入n个整数,存入第一个数组中;然后输入一个正整数m(1<m<=10),再输入m个整数,存入第二个数组中,找出所有不是这两个数组共有的元素。
从 inooll 博主摘来的代码加上我的一些解释:
#include <stdio.h>
int main()
{
int str1[20], str2[20], str3[40];//第一行,第二行,要输出的
int len1, len2, len3;//长度
int i, j;
int temp = 0, num = 0;
scanf("%d", &len1);//输入第一行,len1=n
for (i = 0; i < len1; i++)
scanf("%d", &str1[i]);
scanf("%d", &len2);//输入第二行,len2=m
for (i = 0; i < len2; i++)
scanf("%d", &str2[i]);
for (i = 0; i < len1; i++)//找出第一行与第二行不同的数字
{
for (j = 0; j < len2; j++)
if (str1[i] == str2[j])
break;
//若第一行有和第二行相同的数字,循环结束
if (j == len2)//说明第一行的数字在第二行里没找到
{
str3[temp] = str1[i];//把这个数存入第三个数组中
temp++;
}
}
for (i = 0; i < len2; i++) //找出第二行与第一行不同的数字
{
for (j = 0; j < len1; j++)
if (str2[i] == str1[j])
break;
if (j == len1)
{
str3[temp] = str2[i];
temp++;
}
}
for (i = 0; i < temp; i++)//第三个数组里
{
for (j = 0; j < i; j++)//有可能一行中有相同的数字 且另一行不存在垓数字,注意不能重复输出
if (str3[i] == str3[j])
break;//如果第三个数组里的某个元素 和前面的元素相同,则跳到某个元素的下一个元素
if (i == j)//如果不相同,则输出这个元素
{
if (num != 0)
printf(" ");//控制空格的输出(不是第一项就加个空格)
printf("%d", str3[i]);
num++;//第三个数组的项数
}
}
return 0;
}
7-4学到了学到了