1. 程式人生 > >C程式設計題2

C程式設計題2

1.寫一個用矩陣法求定積分的通用函式,求

#include<stdio.h>
#include<math.h>
float integral(float a,float b,int n){
int i;
float x,h,s;
h=(b-1)/n;
x=a;s=0;
for(i=1;i<=n;i++)
{
    x=x+h;
    s=s+sin(x)*h;
}
return s;
}
int main(){
float a1=1,b1=0,c;
int n=20;
c=integral(a1,b1,n);
printf("sin:%f",c);
return 0;
}

2.輸入一個字串,內有數字和非數字字元,將其中連續的數字作為一個整數,依次存放在陣列a中,輸出

#include<stdio.h>
int Digit(int i,int k,char b[]){
int p;
int e=1,sum=0,n=0;
//k找到連續的最後一個數字的後一位
for(p=k-2;p>=i;p--){//個位除外
    n=b[p]-48;//轉換為數字
    e=e*10;//位
    sum=sum+n*e;
}
sum=sum+b[k-1]-48;//加上個位
return sum;
}

int main(){
char b[]="ab1234cdef56gh78ijk";//字串
int a[2];int i,j,k;//迴圈變數
int sum;
for(i=0,j=0;b[i]!='\0';i++){
    printf("b[i]:%c\n",b[i]);
    if(b[i]>='0'&&b[i]<='9'){
        for(k=i+1;b[k]>='0'&&b[k]<='9';k++);
        sum=Digit(i,k,b);
        printf("\nsum:%d\n",sum);
        a[j++]=sum;
        i=k-1;//從k開始繼續從查詢
    }
}
printf("陣列a中數字:\n");
for(i=0;i<j;i++)//j中記錄了有幾個數字
    printf("%d ",a[i]);
return 0;
}

3.寫一個函式,實現兩個字串的比較。即自己寫一個strcmp函式,函式原型為:int strcmp(char *p1,char *p2);
當字串相等時,返回值為0,不相等時,返回第一個不同字元的ASCII碼差值

#include<stdio.h>
int strcmp(char *p1,char *p2){
int i;//n,m分別記錄p1,p2字串長度
char *p=p1,*r=p2;
while(*p==*r){//兩個字元相等
if(*p =='\0')//如果p1指向結束符,說明相等
    return 0;
//比較之後的兩個字元
p++;r++;
}
printf("p:%c,r:%c\n",*p,*r);
return *p-*r;
}

int main(){
char a[]="abcdefg";
char b[]="abcdkfg";
int c;
c=strcmp(a,b);
printf("返回值為:%d",c);
return 0;
}

4.定義一個結構體變數(年、月、日),計算該日在本年中是第幾天。

#include<stdio.h>
typedef struct{
int year;
int month;
int day;
}Dates;
int leapyear(Dates a){
if(a.year%4==0&&a.year%100==0||a.year%400==0)
    return 1;
else
    return 0;
}
int days(Dates year){
int sum=0,i;
int b[12]={31,28,31,30,31,31,31,30,31,30,30,31};//一年中每個月的天數
for(i=0;i<year.month-1;i++)
    sum=sum+b[i];//計算月份天數
if(leapyear(year))//判斷閏年
    sum=sum+year.day+1;//閏年2月份多1天
else
    sum=sum+year.day;
return sum;
}
int main(){
Dates y;
int n;
printf("請輸入是年月日:");
scanf("%d%d%d",&y.year,&y.month,&y.day);
n=days(y);
printf("計算該日在%d年中是第%d天",y.year,n);
return 0;
}
5.輸出乘法九九表
    1   2   3   4   5   6   7   8   9
    2   4   8   16  32...
    3   6   9   12  ...
    4   ...
    5
    6
    7
    8

    9

void DispMult(){
int i,j;
for(i=1;i<=9;i++){
    for(j=1;j<=9;j++){
        if(j==1)
            printf("%d\t",i);
        else
            printf("%d\t",i*j);
    }
    printf("\n");
}
}

6.求555555的約數中最大的三位數是多少?

void MaxThree(int n){
int i=999;
while(i>100){//窮舉三位數
    if(n%i==0)
        break;
    i--;
}
printf("%d的約數中最大的三位數是%d\n",n,i);
}
7.列印數字金字塔
    1
  121
 12321

1234321,至9層

void DispPyramid(){
int i,j,k,l;
for(i=1;i<9;i++){//9也就是9行
    for(j=1;j<=9-i;j++)//負責輸出空格
        printf(" ");
    for(k=1;k<=i;k++)//負責輸出前面的數字
        printf("%d",k);
    for(l=i-1;l>0;l--)//負責輸出後面的數字
        printf("%d",l);
printf("\n");
}
}
8.程式設計輸出下列高度為n的圖形
    1   3   6   10  15  21
    2   5   9   14  20
    4   8   13  19
    7   12  18
    11  17
    16

    當n=6時

void DispDraw(){
int i,j;
int k=1,m;
for(i=0;i<6;i++){
printf("%d\t",i+k);
k=k+i;
m=k;
j=i+1;
while(j<6){//列
printf("%d\t",m+j+1);
m=m+j+1;
j++;
}
printf("\n");
}
}