1、 设计一个函数,找出整型数组元素的最小值(C语言编程题)
#import <Foundation/Foundation.h>
//宏定义数组的长度
#define LENGTH 5
int main(int argc, const char * argv[])
{
@autoreleasepool {
//定义整形数组
int arr[LENGTH];
printf("输入五个整数:");
//循环输入整形数据,存放在数组中
for(int i = 0 ;i < LENGTH; i ++)
{
//输入函数:%d整形占位符,&取地址
scanf("%d",&arr[i]);
}
//从第一个开始比较
int min = arr[0];
//下标从0开始,长度为定义的LENGTH
for(int i = 0 ;i < LENGTH ; i ++ )
{
//如果min大于数组当前下标i的值
if(min > arr[i])
{
//将当前a[i]值,赋给min
min = arr[i];
}
}
//输出函数
printf("min = %d", min);
}
return 0;
}
2、 计算1~100中所有7的倍数的个数(C语言编程题)
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
//记录7倍数的个数
int count= 0;
//循环遍历1到100之间的数
for(int i = 1;i <= 100; i++ )
{
//如果是7的倍数,则满足条件
if(i % 7 ==0)
{
//满足条件,个数加1
count++;
//打印当前满足条件的数
printf("%d是7的倍数\n",i);
}
}
//输出函数:打印7倍数的总个数
printf("总个数为:%d",count);
}
return 0;
}
3 输入一英文句子,将其中所有单词首字符转换成大写后输出。(C语言)
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
//定义一个字符数组
char s[100];
//输入提示
printf("输入一个英文句子:");
//调用接收字符串函数
gets(s);
//定义一个字符指针pt,指向s
char *pt = s;
//如果第一个字符是小写
if(islower(*pt))
{
//通过改变ASCII值,转变为大写
*pt-=32;
}
//移动指针,指向下一个字符
pt++;
//如果没有到达字符串结尾
while (*pt)
{
//如果当前字符是小写,并且上一个字符不是英文字符
if( islower(*pt) && !isalpha(*(pt -1 )))
{
//将当前字符转变为大写
(*pt)-=32;
}
//指针指向下一个字符
pt++;
}
//调用输出字符串函数
puts(s);
}
return 0;
}
4 编写一个int string_len(char *s),返回字符串s的字符长度(不包括\0) (C语言编程题)
#import <Foundation/Foundation.h>
int string_len(char *s)
{
//定义字符指针ch
char *ch;
//字符长度计数器
int count = 0;
//首地址赋给指向当前字符的指针
ch = s;
//如果不到字符串结尾'\0'
while (*ch) {
//字符计数器加1
count++;
//指针加1,指向下一个字符
ch++;
}
//返回字符串的长度
return count;
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
//输入提示
printf("输入一个字符串:");
//定义一个字符串数组,大小为100
char s[100];
//输入函数,%s占位符,输入类型为字符串
scanf("%s",s);
//输出函数,调用string_leng函数,输出返回输入字符串的长度
printf("字符长度为:%d",string_len(s));
}
return 0;
}
5 小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)写复杂了。。。
/*
分析:
0,判断输入时间是否正确
1,首先算出输入时间距离之前时间过去了多少天
1.1 编写函数,计算木一年总天数
1.11闰年问题:二月按28天计算,如果是闰年,加一天,不是则不加
1.2函数实现当年第几天
2,如果差值%2==0 则是结识美女,%3 == 0 结识帅哥
3,计算木一年的总天数和实现当年第几天可以合并为一个函数
*/
#define FIRSTYEAR 2006
#import <Foundation/Foundation.h>
//判断是否是闰年
bool isLeapYear(int year)
{
//闰年的判断条件:如果能被400整除,或者不能够被100整除能被4整除
if(year % 400 == 0 || (year%4 ==0 && year %100 !=0))
{
//如果是闰年返回真
return true;
}
//不是则返回假
return false;
}
//判断当木一年的总天数
int daysInTheYear(int year )
{
int sum = 0 ;
//将一年十二个月的天数,放在整形数组中,二月暂时按28天,后面再处理
int daysInMonth[] ={31,28,31,30,31,30,31,31,30,31,30,31};
//循环遍历并计算总月数的天数
for(int month = 0; month < sizeof(daysInMonth) / sizeof(daysInMonth[0]); month ++)
{
sum+=daysInMonth[month];
}
//如果是闰年
if(isLeapYear(year))
{
//闰年加一天,二月为29天
sum++;
}
printf("%d年总共%d天\n",year,sum);
//返回木一年的总天数
return sum;
}
//返回输入时间为当年第几天
int daysInCurYear(int year ,int month ,int day)
{
int curYearDays = 0 ;
//将一年十二个月的天数,放在整形数组中,二月暂时按28天,后面再处理
int daysInMonth[] ={31,28,31,30,31,30,31,31,30,31,30,31};
//循环遍历计算当前月份上一个月之前的总天数
for(int mo = 0; mo < month -1 ; mo ++)
{
curYearDays +=daysInMonth[mo];
}
//加上当前月过得天数
curYearDays+=day;
//如果是闰年并且,过了二月,则总天数加1
if( isLeapYear(year) && month > 2)
{
curYearDays = curYearDays + 1;
}
printf("%d年第%d天\n",year,curYearDays);
//返回输入时间为当前年第几天
return curYearDays;
}
//获取总天数
int getDays(int year, int month ,int day)
{
int sumDays = 0 ;
//如果不是起始年
if((year - FIRSTYEAR) > 0)
{
//计算过去几年的总天数
for(int ye = FIRSTYEAR ; ye <year ; ye++)
{
sumDays+=daysInTheYear(ye);
}
}
//返回当年第几天
int curYearDays = daysInCurYear(year, month, day);
//计算总天数
sumDays += curYearDays;
//返回总天数
return sumDays;
}
//判断时间是否输入正确
BOOL checkDate(int year,int month ,int day)
{
int daysInMonth[] ={31,28,31,30,31,30,31,31,30,31,30,31};
//判断是否是闰年,用来判断二月是否输入正确
if(isLeapYear(year))
{
daysInMonth[1] = 29;
}
//如果小于起始年,月不在1-12,天数不在当月正确范围内,返回false
if(! (year >= FIRSTYEAR && month <= 12&&month > 0 && daysInMonth[month] > 0 && daysInMonth[month]>= day))
{
printf("时间输入错误\n");
return false;
}
return true;
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
//提示输入年月日
int year = 0, month = 0 ,day = 0;
printf("输入年:");
//输入函数,%d占位符,整形,&取地址符
scanf("%d",&year);
printf("输入月:");
scanf("%d",&month);
printf("输入日:");
scanf("%d",&day);
if(!checkDate(year,month,day))
{
return 0;
}
//调用函数返回总天数
int days = getDays(year,month,day);
printf("当前第%d天",days);
//如果从起始时间到当天天数差是3的倍数,则认识的是帅哥
if(days % 2 == 0)
{
printf("认识的为帅哥\n");
}
//如果从起始时间到当天天数差是3的倍数,则认识的是美女
if(days % 3 == 0)
{
printf("认识的为美女\n");
}
//不满足上述条件,输出提示
if(days %3 != 0 && days % 2 != 0)
{
printf("当天没有认识美女或帅哥\n");
}
}
return 0;
}
6,在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。
int _tmain(int argc, _TCHAR* argv[])
{
//定义三个变量,及两个数组来记录输入字符串及其长度 和最大字符串及其长度
int i,len = 0,maxlen = 0;
char *p,*pt,s[1024],subs[100];
//提示让用户输入字符串
printf("请输入字符串: ");
//获取输入的字符串
gets(s);
//通过for循环依次比较,遇到是空格或者其他字符的,就从下一个数继续开始比较.
for(pt = s;*pt != '\0';pt++)
{
//判断字符是否是除字母意外的其他字符
if((*pt != ',') && (*pt != '.') && (*pt != ' ') && (*pt != '"') && (*pt != '\0'))
{
len++;
}
//如果是字母,则开始记录,并将长度及最大字符串数组记录
else
{
if(len > maxlen)
{
maxlen = len;
p = pt - len;
len = 0;
}
}
}
if(len > maxlen)
{
maxlen = len;
p = pt - len;
len = 0;
}
//遍历最长单词,打印最长单词,并且输出这个单词的长度
for(i = 0;i < maxlen;i++)
{
subs[i] = *(p + i);
}
subs[maxlen] = '\0';
printf("最长的英文词是:%s,其长度是:%d个字符。\n\n",subs,maxlen);
return 0;
}
7 编程实现将任意的十进制整数转换成任意R进制数(R在2-16之间)。
#import <Foundation/Foundation.h>
#include<stdio.h>
#include<string.h>
void TentoAny(int number,char *str,int digits)
{
int i=0;
if(digits>16||digits<2)//非2~16进制则直接退出
return ;
while(number)
{
switch(number%digits)
{
//根据余数的情况做相应处理
case 15:
str[i++]='F';
break;
case 14:
str[i++]='E';
break;
case 13:
str[i++]='D';
break;
case 12:
str[i++]='C';
break;
case 11:
str[i++]='B';
break;
case 10:
str[i++]='A';
break;
default:
str[i++]=number%digits+'0';
break;
}
number=number/digits;
}
str[i]='\0';
strrev(str);//strrev函数定义在string.h中的,是对字符串做逆序处理的函数
//这里需要逆序的原因是因为得到的结果为该进制的逆序
}
int main()
{
//定义一个数组从来存储,两个变量记录输入的十进制数字
int number,i;
char str[80];
printf("输入一个十进制数:");
scanf("%d",&number);
printf("\n---------2到16进制对应关系----------\n");
for(i=2;i<=16;i++)
{
TentoAny(number,str,i);
printf("%d转换为%d进制为:%s\n",number,i,str);
}
return 0;
}