编程实现从键盘任意输入20个整数,计算其中所有非负数之和
//计算20个非负整数之和
#include<stdio.h>
#include<string.h>
int main()
{
int i,sum=0;
int a[20];
for(i=0;i<20;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<20;i++)
{
if(a[i]>=0)
{
sum=sum+a[i];
}
}
printf("sum=%d\n",sum);
return 0;
}
输入10个整数,将这10个整数按升序排序输出,并且奇数在前,偶数在后。
#include<stdio.h>
#include<string.h>
int main()
{
int odd=0,even=9,a[10],n,i,j,t;
for(i=0;i<10;i++){
scanf("%d",&n);//存放一个整数
if(n%2!=0)//奇数
a[odd++]=n;//先进行odd的运用,Odd=0所以a[0]=n;odd+1
else
a[even--]=n;//把偶数排到右边
}
//此时,假如输入10,9,8,7,6,5,4,3,2,1
//这个时候,a[0]=9,a[1]=7,a[2]=5,a[3]=3,a[4]=1,odd=5
//a[odd]={9,7,5,3,1}odd=5,因为odd++在赋值之后还加了一个
//a[9]=10,a[8]=8,a[7]=6,a[6]=4,a[5]=2,even=4
for(i=0;i<odd-1;i++)//通过选择排序对奇数进行升序排列
{
n=i;//很好奇为什么要设置n=i
//就假设,n=0;
for(j=i+1;j<odd;j++)
if(a[j]<a[n])//a[1]<a[0]:7是否小于9,是的
n=j;//n=1;
//之后,a[2]<a[1]?是的,n=2;a[3]<a[2]是的,n=3;a[4]小于a[3]是的n=4
//j=j++=5,此时不小于5了,所以此时n=4
//但此时n!=0,所以进行换位置,a[0]和a[4]进行换位置a[0]=1,a[4]=9
//之后再来几轮就是
//n=1;j=2开始,a[2]<a[1] 对,n=2;j=3,对,n=3,j=4,此时就不对了
//a[4]=9,a[3]=3,此时不小于,此时n=3,j=5退出
//此时还不等于i=1,所以a[1]=a[3]=3,a[3]=a[1]=7
//所以此时是1,3,5,7,9
//之后再i=2=n,j=3,a[3]<a[2]不小于,所以j=4,a[4]<a[2]不小于,所以退出
//此时,n=i=2,所以结束,此时排完
if(n!=i){//如果不等于就交换位置
t=a[i];
a[i]=a[n];
a[n]=t;
}
}
for(i=odd;i<9;i++)
{
n=i;
for(j=i+1;j<10;j++)
if(a[j]<a[n])
n=j;
if(n!=i)
{
t=a[i];
a[i]=a[n];
a[n]=t;
}
}
//输出排序结果
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
return 0;
}
从键盘输入10个整数,编程实现将其中最大数与最小数的位置兑换后,再输出调整后的数组
#include<stdio.h>
int main()
{
int i,max,min,a[10];
printf("Input 10 integer number:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
max=0;
min=0;
for(i=1;i<10;i++)//为什么是从1开始,不从0开始呢?因为直接把max=min开始设置为0
{
if(a[i]>a[max])
max=i;
if(a[i]<a[min])
min=i;
}
i=a[max];
a[max]=a[min];
a[min]=i;
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
return 0;
}
编写一程序,其功能是给一维数组a输入任意的6个整数,假设为5 7 4 8 9 1,然后建立一个具有以下内容的方正,并打印出来
错误的程序
#include<stdio.h>
int main()
{
int i,j,t,a[6];
printf("Input 6 Integer number:");
for(i=0;i<6;i++)//输入6个数字
scanf("%d",&a[i]);
printf("\n");
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)//显示结果
printf("%d",a[j]);
printf("\n");
t=a[5];
for(j=5;j>0;j--);//将数组元素循环右移
a[j]=a[j-1];
a[0]=t;
}
return 0;
}
正确答案
就是最后一个for多写了一个;
#include<stdio.h>
int main()
{
int i,j,t,a[6];
printf("Input 6 Integer number:");
for(i=0;i<6;i++)//输入6个数字
scanf("%d",&a[i]);
printf("\n");
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)//显示结果
printf("%d",a[j]);
printf("\n");
t=a[5];
for(j=5;j>0;j--)//将数组元素循环右移
a[j]=a[j-1];
a[0]=t;
}
return 0;
}
输入5*5阶的矩阵编码实现,A:求两条对角线上的各元素之和,B求两条对角线上行,列下标均为偶数的个元素之和
#include<stdio.h>
int main()
{
int i,j,sum=0,mul=1,a[5][5];
printf("Input 5*5 array:\n");
for(i=0;i<5;i++)//输入5*5的矩阵
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
printf("\n");
for(i=0;i<5;i++)
{
sum+=a[i][i];//对左角线元素进行累加
if(i!=2)//对右角线上的元素进行累加(对角线中间元素除外)
sum+=a[i][4-i];
if(i%2!=0)//如果行下标为奇数,进入下一次循环
continue;
mul *= a[i][i];//对左对角线上行,列下标均为偶数的元素进行累乘
if(i!=2)//对右对角线上行,列下标均为偶数的元素进行累成,中间元素除外
mul*=a[i][4-i];
}
printf("sum=%d mul=%d\n",sum,mul);
return 0;
}
编程打印杨辉三角
#include<stdio.h>
#define N 6
int main()
{
int i,j,a[N][N];
for(i=0;i<N;i++)//先把杨辉三角写入
{
a[i][0]=1;
a[i][i]=1;
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for(i=0;i<N;i++)
{
for(j=0;j<N-i-1;j++)//j=0;j<6-0-1,第一个是小于5 ,第二个是4
printf(" ");
for(j=0;j<=i;j++)
printf("%2d ",a[i][j]);//占2个字符宽
printf("\n");//输出换行
}
}
编写一程序实现将用户输入的一字符串以反向形式输出。比如,输入的字符串是abcdefg,输出为gfedcba
#include<stdio.h>
#include<string.h>
#define N 80
int main()
{
char str[N];
int i;
printf("Input a string: ");
gets(str);
printf("After reverse:");
for(i=strlen(str)-1;i>=0;i--)
printf("%c",str[i]);
printf("\n");
return 0;
}
书上的例题错误
编写一程序实现将用户输入的一字符串中所有的字符’c’删除,并输出结果
#include<stdio.h>
#include<string.h>
#define N 80
int main()
{
char str[N],strtemp[N];
unsigned int i,j;
printf("Input a string: ");//将输入的字符串存入str数组中
gets(str);
for(i=0,j=0;j<strlen(str);i++)//将str中的非'c'字符复制到字符数组strtemp中
if(str[i]!='c')
strtemp[j++]=str[i];
strtemp[j]='\0';
strcpy(str,strtemp);
//将删除字符'c'后的字符串strtemp复制给字符串str
printf("After delete charactor \'c\':");
printf("%s\n",str);
return 0;
}
编写一个程序,将字符数组s2中的全部字符复制到字符数组s1中,不用strpy函数,复制时’\0’也要复制过去。’\0’后面的字符不复制
#include<stdio.h>
#define N 80
int main()
{
char s1[N],s2[N]="abcdefg\0hijk";
unsigned int i;
i=0;
while(1)
{
s1[i]=s2[i];
if(s2[i]=='\0')
break;
i++;
}
printf("After string copy:%s\n",s1);
return 0;
}
不用strcat函数编程实现字符串连接函数strcat的功能,将字符串srcStr连接到字符串dstStr的尾部
#include<stdio.h>
int main()
{
char dstStr[20]="12345",srcStr[20]="67890";
unsigned int i,j;
printf("Before strcat:dstStr=%s scrStr=%s\n",dstStr,srcStr);
for(i=0;dstStr[i]!='\0';i++)//找到dstStr串中\0所在的位置I
;
for(j=0;srcStr[j]!='\0';j++)
dstStr[i+j]=srcStr[j];
dstStr[i+j]='\0';
printf("After strcat:dstStr =%s\n",dstStr);
return 0;
}
有一个已排好序(升序)的整型数组,要求从键盘输入一整数按原来排序的规律将它插入到数组中。并输出结果。比如,原来数据1 3 5 7,需插入4,插入后为:1 3 4 5 7
#include<stdio.h>
int main()
{
int a[10]={1,3,5,7,9},num=5,i,n;
printf("Before insert:");
for(i=0;i<num;i++)
printf("%d",a[i]);
printf("\n");
printf("Input a number:");
scanf("%d",&n);
for(i=num-1;i>=0;i--)
if(a[i]>n)
a[i+1]=a[i];
else
break;
a[i+1]=n;
printf("After insert:");
for(i=0;i<num+1;i++)
printf("%d",a[i]);
printf("\n");
return 0;
}