getchar函数巧妙解决一行字符串中单词个数问题、
#include<stdio.h>
int main(int argc,char const *argv[])
{
char ch;
ch=getchar();
printf("%c\n",ch);
return 0;
}
the summer we will go to california.
ch=t
Program ended with exit code: 0
//统计一行文本的单词个数
#include<stdio.h>
int main(int argc,char const *argv[])
{
char ch;
int flag=0;
int count=0;
while((ch=getchar())!='\n')
//利用的特点是第一个单词前面是一个空格以及单词第一个数字不是空格。
{
if(ch!=' '&&flag==0)
{
count++;
flag=1;
printf("%d %c\n",count,ch);
}
else if(ch==' ')
{
flag=0;
}
}
printf("单词个数:%d\n",count);
return 0;
}
the summer we will go to california.
1 t
2 s
3 w
4 w
5 g
6 t
7 c
单词个数:7
Program ended with exit code: 0
实验7-1-1 简化的插入排序 (15分)
本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。
输入格式:
输入在第一行先给出非负整数N(<10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X。
输出格式:
在一行内输出将X插入后仍然从小到大有序的整数序列,每个数字后面有一个空格。
输入样例:
5
1 2 4 5 7
3
输出样例:
1 2 3 4 5 7
#include<stdio.h>
int main(){
int m[10];
int n,i,x;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&m[i]);
}
scanf("%d",&x);
i=0;
while(m[i]<x&&i<n){
i++;
}
for(int j=n;j>=i;j--){
m[j+1]=m[j];
}
m[i]=x;
for(int k=0;k<=n;k++){
printf("%d",m[k]);
}
return 0;
}
实验7-1-2 求最大值及其下标 (20分)
本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。
输入格式:
输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。
输出格式:
在一行中输出最大值及最大值的最小下标,中间用一个空格分开。
输入样例:
6
2 8 10 1 9 10
输出样例:
10 2
#include<stdio.h>
int main(){
int n,i=0,j;
int max=0;
scanf("%d",&n);
int m[n];
//scanf("%d",&m[i]); 首先应该读入数组,这种读入方式不对;
for(i=0;i<n;i++){
scanf("%d",&m[i]);
}
for(i=1;i<n;i++){
for(j=0;j<i;j++){
if(m[j]>m[i]){
max=m[j];
}else
max=m[i];
}
}
for(i=0;i<n;i++){
if(max==m[i]){
printf("%d\n",i);
break;
}
}
printf("2)%d\n",max);
return 0;
}
实验7-1-3 将数组中的数逆序存放
本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素。
输入格式:
输入在第一行中给出一个正整数n(1≤n≤10)。第二行输入n个整数,用空格分开。
输出格式:
在一行中输出这n个整数的处理结果,相邻数字中间用一个空格分开,行末不得有多余空格。
输入样例:
4
10 8 1 2
输出样例:
2 1 8 10
#include<stdio.h>
int main(){
int n,i;
scanf("%d",&n);
int m[n];
for(i=n-1;i>=0;i--){
scanf("%d",&m[i]);
}
for(i=0;i<n;i++){
printf("%d ",m[i]);
}
return 0;
}
实验7-1-4 找出不是两个数组共有的元素 (20分)
给定两个整型数组,本题要求找出不是两者共有的元素。
输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。
输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。
输入样例:
10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1
10
3 -5 2 8 0 3 5 -15 9 100
11
6 4 8 2 6 -5 9 0 100 8 1
输出样例:
3 5 -15 6 4 1
找到两个数组相等的元素;
#include<stdio.h>
int main(){
int n1,n2,i,j;
scanf("%d",&n1);
int x[n1];
//读入第一个数组;
for(i=0;i<n1;i++){
scanf("%d",&x[i]);
}
//读入第二个数组;
scanf("%d",&n2);
int y[n2];
for(j=0;j<n2;j++){
scanf("%d",&y[j]);
}
for(i=0;i<n1;i++){
for(j=0;j<n2;j++){
if(x[i]==y[j]){
printf("%d)x[%d]=y[%d]=%d\n",i,i,j,x[i]);
}
}
}
return 0;
}
10
3 -5 2 8 0 3 5 -15 9 100
11
6 4 8 2 6 -5 9 0 100 8 1
1)x[1]=y[5]=-5
2)x[2]=y[3]=2
3)x[3]=y[2]=8
3)x[3]=y[9]=8
4)x[4]=y[7]=0
8)x[8]=y[6]=9
9)x[9]=y[8]=100
Program ended with exit code: 0
正确的代码:
程序思路:
设立三个数组,前两个数组x,y放存放输入的数字;
比较两个:
数组x数组中是否每个元素在y有,如果没有的话,则输入在c数组中;
数组y数组中是否每个元素在x有,如果没有的话,接着前面的顺序输入到c数组中;
最后得到c数组是彼此没有的元素,再删除重复的部分;
#include<stdio.h>
int main(){
int n1,n2,i,j;
int cnt=0;
int c[20],k=0; //设立第三个数组用来存放比较出来的数据;
scanf("%d",&n1);
int x[n1];
//读入第一个数组;
for(i=0;i<n1;i++){
scanf("%d",&x[i]);
}
//读入第二个数组;
scanf("%d",&n2);
int y[n2];
for(j=0;j<n2;j++){
scanf("%d",&y[j]);
}
for(i=0;i<n1;i++){
for(j=0;j<n2;j++){
if(x[i]==y[j]){ //比较得到哪些是相同的;
cnt++; //可以得到有多少个数据是相等的;
//printf("%d,%d)x[%d]=y[%d]=%d\n",cnt,i,i,j,x[i]);
}
cnt++;
}
//printf("%d\n",cnt); //第二层循环结束以后,一共有多少个cnt;
if(cnt==n2){ //说明没有相等的;
cnt=0; //cnt必须清空,每个数据比较得出不同的cnt;
c[k]=x[i]; //c数组存放在x[]中没有找到的数据;
k++; //不用专门设立循环,直接在此k++;
}else
cnt=0;
}
//存放在y[]数组中,每个在x中找不到的元素;
int t=0;
for(i=0;i<n2;i++){
for(j=0;j<n1;j++){
if(x[j]==y[i]){ //比较得到哪些是相同的;
t++; //可以得到有多少个数据是相等的;
//printf("%d,%d)x[%d]=y[%d]=%d\n",cnt,i,i,j,x[i]);
}
t++;
}
//printf("%d\n",t); //第二层循环结束以后,一共有多少个t;
if(t==n1){ //说明没有相等的;
t=0; //t必须清空,每个数据比较得出不同的t;
c[k]=y[i]; //c数组存放在x[]中没有找到的数据,k得到的数据是接着前面的;
k++; //不用专门设立循环,直接在此k++;
}else
t=0;
}
//c[]得到的数组中,删除相同的元素;
printf("%d",c[0]); //在进行循环前先输出第一个数c[0],因为循环从c[1]开始的;
for(i=1;i<k;i++){
int flag=1;
for(j=0;j<i;j++){
if(c[j]==c[i]){
flag=0;
}
}
//c[i]和前面的每一项进行比较,有相等的flag就为0,比较完以后如果还是1,代表没有相等的。则输出c[i];
if(flag==1){
printf(" %d",c[i]);
}
}
return 0;
}