今天主要写了几条程序题,复习了一下make工程管理器的用法。
下面罗列一下今天写的题
1.已知 ch 是字符型变量,下面不正确的赋值语句是__a__。
a. ch=‘a+b’; b. ch=’\0’; c. ch=‘7’+‘9’; d. ch=5+9;
a是字符串要用双引号,d的解释如下c语言中“+”的优先级高于赋值号,所以先执行右边,也就是5+9=13,而13是int型,此时系统会自动通过ASCII码讲13转换为13对应的字符值。(如65对应ASCII中的’A’)
具体等价于char ch=(char*)(5+9);
2.编写一个程序,求出满足下列条件的四位数:该数是个完全平方数,且第一、三位数字之和为10,第二、四位数字之积为12
#include <stdio.h>
#include<math.h>
int main()
{
int a=0,b=0,c=0,d=0,i=1000;
for(i;i>999&&i<10000;i++)
{
if(sqrt(i)==(int)sqrt(i)) /*i开根号得到整数,(int)sqrt(i)是整形*/
{
d=i%10; /*个位*/
a=i/1000; /*千位*/
b=i/100%10; /*百位*/
c=i%100/10; /*十位*/
if(a+c==10&&b*d==12)
printf("这样的数有%3d",i);
}
}
return 0;
}
方法二
#include <stdio.h>
int main()
{
int i;
int j=32;
int a=0,b=0,c=0,d=0;
for(j;j<100;j++)/*31*31=961,32*32=1024*/
{
i=j*j;
a=i/1000;
b=i/100%10;
c=i%100/10;
d=i%10;
if(a+c==10&&b*d==12)
printf("这样的四位数有:%d\n",i);
}
return 0;
}
3.通过编程实现,统计1~n有多少个9?
#include <stdio.h>
int main()
{
int i;
int n;
int num=0;
int tmp,a;
printf("输入一个数:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
tmp=i;
while(tmp!=0)
{
a =tmp%10;
tmp=tmp/10;
if(a==9)
{
num++;
}
}
}
printf("1~%d有%d个9\n",n,num);
return 0;
}
4.输入5个数(含负数、小数)将它们按由小到大的顺序排列起来
提示:需要排数的数字通过参数传递进来,
例如:输入:./a.out -1 2.1 -3 5 7 输出: -3 -1 2.1 5 7
#include <stdio.h>
#define NUMBER 5
float bosrt(float a[], int n)
{
int i,j;
for(i=1;i<n;i++){
for(j=n-1;j>0;j--){
if(a[j]<a[j-1]){
float tmp=a[j];
a[j]=a[j-1];
a[j-1]=tmp;
}
}
}
}
int main()
{
float a[NUMBER];
int i;
for(i=0;i<NUMBER;i++){
printf("数%d:",i+1);
scanf("%f",&a[i]);
}
bosrt(a,NUMBER);
for(i=0;i<NUMBER;i++){
printf("从小到大排序为a[%d]:%f\n",i+1,a[i]);
}
return 0;
}
5.一个数如果恰好等于它的因子之和,这个数被成为”完数”,例如:6=1+2+3.请编程找出1000以内的完数
#include <stdio.h>
int main()
{
int i,j;
int sum=0;
for(i=1;i<1000;i++)
{
sum = 0;
for(j=1;j<i;j++)
{
if(i%j==0)
{
sum+=j;
}
}
if(sum==i)
{
printf("完数有:%d\n",i);
}
}
return 0;
}
有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.
提示:用数组完成
#include <stdio.h>
int main()
{
int n,func(int n);//提示输入圈子的人数
printf("请输入一个数:");
scanf("%d",&n);
printf("剩下的数是:%d\n",func(n)); //输出最后留下来的编号
return 0;
}
int func(int n)
{
int group[1000];//定义存储编号的数组
int i,nn,sum=0; //定义存储数组中元素个数的变量
nn=n; //将1,2,3,……,n按次序存入数组
for(i=0;i<n;i++)
group[i]=i+1;
for(i=0;;i++) //循环一轮后将i赋值为0以进行下一轮
{
if(i==n)
i=0; //记录不为零的元素的个数,为零(该元素已经被删除)则进入下一次循环
if(group[i]!=0)
sum++;
else continue;
if(sum%3==0)
{
group[i]=0;
nn--;
}//当个数为3的倍数时,将该元素赋值为零(即退出圈子),数组中元素的个数(nn)减一
//当数组中只剩一个元素时,退出循环
if(nn==1)
break;
} //寻找并返回剩下的元素的值(即编号)
for(i=0;i<n;i++)
if(group[i]!=0)
return group[i];
}
7.快速找出一个数组中的最大数、第二大数。
#include <stdio.h>
#define NUMBER 9999
int main()
{
int a[NUMBER];
int i;
int n;
printf("输入数字个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int max=a[0];
int max2;
if(a[1]<max)
{
max2=a[1];
}
else
{
max=a[1];
max2=a[0];
}
for(i=2;i<n;i++)
{
if(max<a[i])
{
max2=max;
max=a[i];
}
else if(max2==max||(max!=a[i]&&max2<a[i]))
{
max2=a[i];
}
}
printf("最大数为%d,第二大得数为%d\n",max,max2);
return 0;
}